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

聯盟行銷揭露 Ver 3.1
聯盟行銷揭露 Ver 3.2(僅限行動版)
測試環境RHEL 系列AlmaLinux 9.8root 帳號2026-10-07 確認

如果為了讓兩台伺服器的資料夾保持一致,每次都重新複製全部內容,那麼即使只變動了一個檔案,傳輸量也仍是全部內容的大小。 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輸出檔案數與傳輸量統計
rsync 指令模擬器rsync 3.2.7
[root@server work]#
只在瀏覽器中運作,不會動到實際的檔案。www 資料夾是來源,backup 資料夾是上一次的備份;請換用不同的 rsync 選項輸入,再用 ll、cat、diff 確認結果。遠端位址(user@host:路徑)只接受格式,不會實際連線。變更的內容按下 [Start over] 就會還原。用鍵盤 ↑↓ 可以叫出之前輸入過的指令,輸入 uknew help 會列出可用的指令。

✅ 連線方式: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
rsync 指令_從遠端到本機執行_結果

要排除特定檔案或目錄時,可以每個模式各加一個 -⁠-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 指令_從遠端到本機_排除特定檔案與目錄

🔲 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/
rsync 指令_從遠端到本機_使用 delete 選項
rsync 指令_從遠端到本機_使用 delete、include、exclude 選項

在啟用 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/
rsync 指令_從遠端到本機_頻寬限制 100kb 並用 -P 選項確認進度

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 8   +   5   =