Linux rsync 指令:選項與使用範例

如果為了讓兩台伺服器的資料夾保持一致,每次都重新複製全部內容,那麼即使只變動了一個檔案,傳輸量也仍是全部內容的大小。 rsync 指令是 remote sync 的縮寫,會比對來源與目的地,只傳輸有差異的檔案;在本機資料夾之間,以及透過 SSH 連線的伺服器之間,都以相同方式運作。本文整理了基本用法與選項,以及 SSH 與 rsync daemon 兩種連線方式的範例。
本文的輸出取自 AlmaLinux 9.8 的 rsync 3.2.7;如果尚未安裝,請用套件管理工具安裝。
# RHEL 系列
dnf -y install rsync
# Debian 系列
apt -y install rsync✅ 基本使用方法
基本用法如下。
rsync -選項 來源 目的地就像 cp 指令一樣,先寫來源,再寫目的地。在來源結尾加上斜線 [/],只有資料夾裡的內容會放進目的地;不加的話,整個資料夾都會放進去。
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.png再次執行同一個指令,檔案清單就會是空的,sent 的位元組數也會降到幾百位元組。這是因為大小與修改時間相同的檔案會被跳過。
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84如果不加 -a、只用 -r,修改時間不會被保留,下次執行時就會再次傳送相同的檔案。同步資料夾時,基本上都要加上 -a。
-n 選項不會實際傳輸,只顯示會變動的檔案,結果最後會加上 [(DRY RUN)]。像 --delete 這種會刪除目的地檔案的選項,要先用 -n 確認後再執行。
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ rsync 指令選項 & 模擬器
| 選項 | 說明 | |
|---|---|---|
| -a | --archive連同子目錄一起複製,並保留權限、擁有者、修改時間與符號連結(與 -rlptgoD 相同) | |
| -v | --verbose輸出已傳輸的檔案名稱與傳輸量 | |
| -z | --compress傳輸時壓縮檔案資料 | |
| -r | --recursive連同子目錄一起複製(包含在 -a 中) | |
| -t | --times保留修改時間(包含在 -a 中)。是下次執行時決定要跳過哪些檔案的依據 | |
| -n | --dry-run不實際傳輸,只輸出會變動的檔案,並在最後標示 (DRY RUN) | |
| -u | --update跳過目的地端較新的檔案 | |
| -h | --human-readable以 K · M · G 為單位輸出位元組數 | |
| -P | 與 --partial --progress 相同。顯示每個檔案的進度,並接續中斷的傳輸 | |
| -i | --itemize-changes以符號輸出每個檔案的變更項目>f+++++++++ 新檔案 · >f.st...... 大小與時間變更 · *deleting 刪除 | |
| -e | --rsh=COMMAND指定遠端 Shell-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | 從目的地刪除來源中沒有的檔案(需要 -r 或 -a) | |
| --exclude=PATTERN | 排除符合模式的檔案與目錄--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | 放在 --exclude 之前,讓該模式不被排除 | |
| --max-size=SIZE | 不傳輸大於指定大小的檔案(--min-size 則針對較小的檔案)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | 限制傳輸速度,單位為 KiB/s | |
| --stats | 輸出檔案數與傳輸量統計 |
✅ 連線方式:SSH 與 rsync daemon
和遠端伺服器同步的連線方式有兩種。主機後面接一個冒號 [:] 會經由 SSH,接兩個冒號 [::] 則直接連到 873 埠的 rsync daemon。
| 類別 | SSH 方式(:) | rsync daemon 方式(::) |
|---|---|---|
| 連線格式 | rsync -選項 user@host:/路徑 /本機路徑 | rsync -選項 host::模組/路徑 /本機路徑 |
| 連接埠 | SSH 連接埠(預設 22) | 873 |
| 加密 | 由 SSH 加密 | 不加密 |
| 驗證 | SSH 金鑰或密碼 | rsyncd.conf 的 hosts allow,帳號與密碼為選用 |
| 伺服器端設定 | 不需要(只要能用 SSH 連線就能使用) | 安裝 rsync-daemon、/etc/rsyncd.conf、開放 873 埠 |
| 用途 | 伺服器之間的備份與部署(預設選擇) | 不提供 SSH 帳號的內部網路鏡像 |
🔲 SSH 方式
只要是能用 SSH 連線的伺服器,不需要伺服器端設定就能直接使用。連接埠不同或使用金鑰檔時,把 ssh 指令原封不動放進 -e 選項。
# 本機 → 遠端
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# 遠端 → 本機
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# 指定 SSH 連接埠與金鑰檔
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
要排除特定檔案或目錄時,可以每個模式各加一個 --exclude,或用大括號括起來一次寫完。
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 rsync daemon 方式
rsync daemon 不需要 SSH 帳號,透過 873 埠以模組為單位開放存取;由於通訊沒有加密,所以用在同一個內部網路的伺服器之間。
在 AlmaLinux 9 中,安裝 rsync-daemon 套件並啟動服務。使用 firewalld 的伺服器要開放 873 埠,雲端伺服器則在主控台的防火牆中開放。RHEL 8 以下使用的 xinetd 方式,在 9 中已經移除。
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload在設定檔 [/etc/rsyncd.conf] 中寫入模組名稱、路徑與允許連線的主機。把 read only 設為 yes,遠端就只能取得檔案。
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30從遠端在主機後面只寫兩個冒號,會列出模組清單;連模組名稱一起寫,則會列出其中的檔案清單。
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_data複製時以 [主機::模組/路徑] 的格式取得。--delete 會從目的地刪除來源中沒有的檔案,--include 則只讓放在 --exclude 前面的項目不被排除。
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

在啟用 SELinux 的伺服器上,存取模組路徑時可能會被 [Permission denied (13)] 擋下。測試時用 [setenforce 0] 關閉 SELinux 後就通過了。
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see 上一個 errors) (code 23) at main.c(1658) [Receiver=3.1.2]用 --bwlimit 以 KiB/s 為單位限制傳輸速度,加上 -P 就能同時看到每個檔案的進度。--max-size 與 --min-size 只傳輸指定大小範圍內的檔案。
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。