Rsync for Linux:同步、複製及備份檔案
9 分鐘閱讀 - 2025年5月24日

如何在 Linux 上使用 rsync 進行增量傳輸、透過 SSH 進行遠端同步、使用 cron 進行排程備份,以及避免 trailing-slash 陷阱。
Linux 版 Rsync:如何像專家一樣同步、複製和備份檔案
Rsync 是用於在 Linux 系統之間複製檔案的標準工具。它比 cp 或 scp ,且能從網路中斷中恢復,並僅傳輸實際變更的內容。本文將介紹 rsync 的功能、值得了解的參數、最常使用的範例,以及如何透過 cron 排程執行。
什麼是 rsync?
rsync 是一款用於在不同位置之間複製和同步檔案的命令列工具。它可在本地執行、透過 SSH 連線至遠端主機,或與 rsync 守護程序進行通訊。與 cp 或 scp:rsync 會先比較來源與目標,然後僅傳輸差異部分。以一個 100 GB 的目錄為例,若其中有 200 MB 已變更,rsync 僅會傳輸 200 MB。 cp 而 scp 則會傳輸全部內容。
它隨每個現代 Linux 發行版附帶。若未安裝: apt install rsync 或 dnf install rsync.
為何選擇 rsync 而非 cp 或 scp
rsync 在任何非簡單的複製任務中勝出的三個理由:
- 它具有增量特性。後續執行時僅傳輸變更的位元組,而非整個檔案。對於備份和鏡像操作而言,這能將原本需要一整夜的任務縮短至幾分鐘。
- 它能容忍中斷。透過
--partial,一個傳輸到一半的 50 GB 檔案會從中斷處繼續,而非從頭開始。 - 它能保留元資料。存檔模式 (
-a) 能保留權限、所有權、符號連結及時間戳記。這對於系統檔案、原始碼樹以及任何重視屬性的內容至關重要。
若僅需一次性複製小型檔案, scp 即可。至於任何需要重複執行的任務、佔用大量頻寬的傳輸,或是可能需要中斷後續傳輸的情況,請使用 rsync。
常見的 rsync 參數
您實際會用到的參數:
| 參數 | 功能說明 |
|---|---|
-a | 歸檔模式。保留權限、所有權、符號連結及時間戳記。等同於 -rlptgoD. |
-v | Verbose。列出正在傳輸的檔案。 |
-z | 傳輸中壓縮。適用於速度慢或成本高的連線,在區域網路或針對已壓縮的內容則較無用處。 |
-P | 結合 --partial 與 --progress。可恢復中斷的傳輸,並顯示即時進度。 |
--delete | 刪除目標位置上來源不存在的檔案。建立真正鏡像時必須啟用此選項。 |
--exclude | 跳過符合特定模式的檔案。 |
--exclude-from=FILE | 從檔案中讀取排除模式。比串接多個 --exclude 選項。 |
--dry-run | 顯示若不進行任何傳輸時會發生什麼情況。 |
--bwlimit=KBPS | 將頻寬使用量限制為每秒千位元組。對於在上班時間執行的備份非常有用。 |
--checksum | 透過校驗和而非檔案大小和修改時間來比較檔案。速度較慢,但能偵測邊緣案例。 |
-e ssh | 使用 SSH 進行傳輸。在大多數現代安裝環境中預設啟用。 |
預設行為會比較檔案大小與修改時間,此方式速度快且幾乎總是正確。請切換至 --checksum 若部署流程會重寫時間戳記但未變更內容,或您懷疑存在位元層級的損毀。
rsync 範例
在本地複製目錄:
rsync -av /source/path/ /destination/path/透過 SSH 同步至遠端伺服器:
rsync -avz /local/dir/ user@remote:/remote/dir/在執行任何可能造成資料損失的操作前進行模擬執行:
rsync -avz --dry-run /local/dir/ user@remote:/dir/鏡像兩個目錄,並包含目標端已刪除的檔案:
rsync -av --delete /source/ /destination/排除日誌檔與暫存目錄:
rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/恢復可能中斷的大型傳輸:
rsync -avP user@remote:/backups/big.img /local/若 SSH 連線中斷,請再次執行相同指令。使用 -P,rsync 會從中斷處繼續傳輸,而非從頭開始。
將非尖峰時段的備份頻寬限制為 50 MB/s,以免佔滿上行鏈路:
rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/尾隨斜線的陷阱
最常見的 rsync 錯誤:
rsync -av /source /destination/ # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/ # copies the CONTENTS of /source into /destination來源路徑末尾的斜線代表「此目錄內的所有內容」。若無末尾斜線,則代表「此目錄本身」。若不確定,請先使用 --dry-run ,尤其當與 --delete.
使用 cron 自動化 rsync
若要執行排程備份,您需要以下三項條件:
可透過無密碼 SSH 存取目標主機。cron 工作無法輸入密碼。請產生金鑰並將其複製到備份主機:
ssh-keygen -t ed25519 ssh-copy-id user@backup-host一個腳本,而非 crontab 中的單行指令。這樣更容易測試,也更容易記錄:
#!/bin/bash LOG=/var/log/rsync-backup.log rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1使用以下指令賦予可執行權限
chmod +x.建立一個 cron 任務來執行它。編輯時使用
crontab -e:0 2 * * * /usr/local/bin/rsync-backup.sh這會讓腳本每晚 02:00 執行。
在生產環境中值得進行的兩項優化:將腳本包裹在 flock ,以確保長時間執行的任務不會與隔夜的執行時段重疊,並將輸出透過 logger ,讓失敗紀錄能寫入系統日誌,以便監控系統能偵測到。

數位視力疲勞:在螢幕使用頻繁的時代,如何保護您的視力
整天盯著螢幕看嗎?學習如何運用經過驗證的技巧與工具來減輕數位眼疲勞。這份指南對於遠距工作者、開發人員以及所有科技從業者而言都不可或缺。
4 分鐘閱讀 - 2025年5月21日
為何擁有強大且不限流量的 VPS 至關重要
8 分鐘閱讀 - 2025年5月9日