rsync
是一個強大的文件同步與傳輸工具,廣泛用于本地或遠程服務器之間的高效文件備份、鏡像或同步。其核心優勢是通過增量傳輸?(僅傳輸文件差異部分)和壓縮減少數據傳輸量,同時支持保留文件元數據(如權限、時間戳、所有者等)。
?一、核心特性?
- ?增量同步?:通過比較源和目標的文件校驗和(如MD5),僅傳輸修改過的部分,大幅提升效率。
- ?壓縮傳輸?:支持
-z
選項壓縮數據,適合網絡傳輸。 - ?保留元數據?:
-a
(歸檔模式)可保留權限、時間戳、屬主/組等信息(需權限支持)。 - ?靈活過濾?:支持排除/包含特定文件(
--exclude
/--include
)。 - ?遠程支持?:通過SSH協議與遠程服務器同步(
user@host:path
格式)。
?二、基礎用法?
?1. 本地文件/目錄同步?
最常用場景是同步本地文件或目錄,基礎命令格式:
rsync [選項] 源路徑 目標路徑
?常用選項說明?:
-v
:詳細模式(Verbose),顯示同步過程。-a
:歸檔模式(Archive),等價于-rlptgoD
(遞歸、保留符號鏈接、時間戳、權限、屬主/組等),?推薦備份時使用。-r
:遞歸同步子目錄(僅對目錄有效)。-z
:壓縮傳輸(減少網絡傳輸量,本地同步時可忽略)。-h
:人性化顯示(Human-readable),將文件大小轉換為KB/MB/GB等。--delete
:刪除目標中源不存在的文件(謹慎使用!避免誤刪)。--dry-run
:模擬執行(預演),不實際同步,用于測試命令是否正確。--exclude=模式
:排除匹配模式的文件/目錄(如--exclude="*.log"
排除所有日志文件)。--include=模式
:僅包含匹配模式的文件(需配合--exclude
使用)。-n
:同--dry-run
,模擬執行。
?示例1:本地目錄同步(保留元數據)??
# 將本地 /data/source 同步到 /data/backup(覆蓋式同步,保留所有元數據)
rsync -av /data/source/ /data/backup/
注意:源路徑末尾的
/
很重要!
- 若
源/
(如/data/source/
):同步目錄內的內容到目標(目標目錄已存在時)。- 若
源
(如/data/source
):同步整個目錄到目標(目標會生成source
子目錄)。
?示例2:同步時排除特定文件?
# 同步 /home/user 到 /backup/user,但排除 .git 目錄和 *.tmp 文件
rsync -av --exclude='.git' --exclude='*.tmp' /home/user/ /backup/user/
?示例3:同步并刪除目標冗余文件?
# 假設 /data/backup 已有部分文件,現希望與 /data/source 完全一致(刪除目標中多余的文件)
rsync -av --delete /data/source/ /data/backup/
?2. 遠程服務器同步(通過SSH)??
rsync
支持通過SSH協議與遠程服務器同步,格式為:
# 從遠程服務器同步到本地(拉取)
rsync [選項] 用戶@遠程主機:遠程路徑 本地路徑# 從本地同步到遠程服務器(推送)
rsync [選項] 本地路徑 用戶@遠程主機:遠程路徑
?示例4:從遠程服務器拉取文件到本地?
# 將遠程服務器(192.168.1.100)的 /var/www 拉取到本地的 /backup/www(保留元數據,顯示詳細過程)
rsync -avz -e ssh root@192.168.1.100:/var/www/ /backup/www/
-e ssh
:顯式指定使用SSH協議(默認即SSH,可省略)。
?示例5:推送本地文件到遠程服務器?
# 將本地的 /data/logs 推送到遠程服務器(192.168.1.100)的 /backup/logs(壓縮傳輸)
rsync -avzh --delete /data/logs/ root@192.168.1.100:/backup/logs/
?示例6:指定SSH非默認端口(如2222)??
rsync -avz -e "ssh -p 2222" /local/path user@remotehost:/remote/path
?三、高級技巧?
?1. 同步特殊文件(如符號鏈接、設備文件)??
-a
模式已包含 -D
(等價于 --devices --specials
),可同步設備文件(如 /dev
下的文件)和符號鏈接(默認保留符號鏈接本身,而非指向的文件)。
若需同步符號鏈接指向的實際文件,添加 --copy-links
選項。
?2. 限制傳輸帶寬?
使用 --bwlimit=速率
限制同步時的帶寬(單位:KB/s),避免占用過多網絡資源。
示例:限制為1000KB/s(約1MB/s):
rsync -avz --bwlimit=1000 /data/ user@remote:/backup/
?3. 分批次同步大文件?
對于超大文件,可使用 --partial
選項保留未完成的傳輸文件(避免中斷后重新下載),配合 --progress
查看進度:
rsync -avz --partial --progress bigfile.iso user@remote:/backup/
?4. 同步權限與所有者?
若需嚴格同步文件的所有者、屬組或權限(如備份系統文件),需以 root
權限運行 rsync
(因普通用戶無法修改其他用戶的文件屬性)。
-a
模式已包含 -p
(保留權限)和 -o/-g
(保留屬主/組),通常無需額外設置。
?四、注意事項?
- ?**路徑末尾的
/
**?:源路徑末尾的/
決定是同步目錄內容還是目錄本身(如/src/
同步內容到目標,/src
同步目錄到目標)。 - ?權限問題?:若目標目錄無寫入權限,需用
sudo
(本地同步)或遠程用戶有足夠權限(遠程同步)。 - ?**
--delete
謹慎使用**?:該選項會刪除目標中源不存在的文件,可能導致數據丟失,建議先通過--dry-run
測試。 - ?網絡穩定性?:遠程同步時若網絡中斷,
-P
選項(等價于--partial --progress
)可保留中斷文件,后續繼續同步。
?五、總結?
rsync
是文件同步的“瑞士軍刀”,適用于備份、鏡像、遷移等多種場景。核心命令結構清晰,通過組合不同選項可滿足復雜需求。熟練掌握 rsync
能顯著提升文件管理效率!