rsync 是一個功能強大的文件同步工具,在 Ubuntu(和其他 Linux 系統)中廣泛用於高效複製和同步文件,支持本地和遠程操作。

基本語法

rsync [選項] 源路徑 目標路徑

常用選項詳解

1. 基礎選項

  • -v, --verbose:顯示詳細輸出
  • -r, --recursive:遞歸複製目錄
  • -a, --archive:歸檔模式(相當於 -rlptgoD),保持所有文件屬性
  • -z, --compress:傳輸時壓縮數據
  • -P:相當於 --progress --partial(顯示進度+斷點續傳)

2. 同步控制

  • --delete:刪除目標中源沒有的文件(謹慎使用!
  • --dry-run:試運行,不實際執行
  • --exclude=PATTERN:排除匹配的文件/目錄
  • --include=PATTERN:包含匹配的文件/目錄
  • --max-size=SIZE:限制同步文件的最大大小
  • --min-size=SIZE:限制同步文件的最小大小

3. 網絡傳輸

  • -e ssh:通過 SSH 傳輸(默認)
  • --port=PORT:指定 SSH 端口
  • --bwlimit=RATE:限制傳輸帶寬(KB/s)

實用示例

1. 本地同步

# 基本目錄同步(保留屬性)
rsync -av /源目錄/ /目標目錄/

# 帶刪除的同步(使目標與源完全一致)
rsync -av --delete /源目錄/ /目標目錄/

2. 遠程同步

# 推送到遠程服務器
rsync -avzP /本地目錄/ user@遠程IP:/遠程目錄/

# 從遠程拉取
rsync -avzP user@遠程IP:/遠程目錄/ /本地目錄/

# 使用非標準SSH端口
rsync -avzP -e "ssh -p 2222" /本地目錄/ user@host:/目錄/

3. 排除文件

# 排除特定文件/目錄
rsync -av --exclude='*.tmp' --exclude='cache/' 源/ 目標/

# 使用排除列表文件
rsync -av --exclude-from='exclude-list.txt' 源/ 目標/

4. 帶寬限制

# 限制帶寬為 500KB/s
rsync -avz --bwlimit=500 源/ 目標/

重要注意事項

目錄斜槓的區別

# 同步目錄內容
rsync -av /source/ /dest/    # 只同步source內的文件到dest

# 同步目錄本身
rsync -av /source /dest/     # 會創建dest/source目錄

常用組合

# 最常用的組合(備份推薦)
rsync -avzP --delete 源/ 目標/

# 試運行檢查
rsync -avn --delete 源/ 目標/

恢復部分傳輸

# 使用 --partial 保留部分傳輸的文件
rsync -avzP --partial 源/ 目標/

典型應用場景

1.網站備份

rsync -avzP --delete /var/www/ user@backup:/backups/www/

2.增量備份

# 使用硬鏈接實現增量備份(類似 Time Machine)
rsync -av --link-dest=/上次備份 源/ /新備份/

3.大型文件傳輸

# 分塊傳輸,支持斷點續傳
rsync -avzP --partial-dir=.rsync-partial 大文件 目標/

4.實時同步(配合 inotify)

# 使用 inotify-tools 監控變化
inotifywait -mrq --format '%w%f' -e create,modify 目錄 | while read file
do
    rsync -avz $file user@remote:/備份目錄/
done

故障排查

  • 使用 -vvv 獲得更詳細的調試信息
  • 檢查權限和所有權問題
  • 確保 SSH 免密登錄配置正確(遠程同步時)
  • 使用 --stats 查看傳輸統計

提示:始終先使用 --dry-run 測試命令,確認無誤後再實際執行!