rsync 命令詳解與示例
一、rsync 命令核心功能與基本語法
1. 核心功能
- 增量同步:僅傳輸源文件與目標(biāo)文件之間的差異部分,大幅減少數(shù)據(jù)傳輸量。
- 跨平臺支持:適用于本地文件系統(tǒng)、遠(yuǎn)程 SSH 或 rsync 協(xié)議連接的服務(wù)器。
- 元數(shù)據(jù)保留:支持保留文件權(quán)限、時間戳、符號鏈接、硬鏈接等屬性。
- 靈活過濾:可通過正則表達(dá)式、排除/包含規(guī)則篩選同步文件。
- 傳輸優(yōu)化:支持壓縮(
-z
)、帶寬限制(--bwlimit
)、斷點續(xù)傳(需配合工具)等。
2. 基本語法
# 本地同步語法 rsync [選項] [源路徑] [目標(biāo)路徑] # 遠(yuǎn)程同步語法(通過 SSH 協(xié)議) rsync [選項] [源路徑] [用戶@]遠(yuǎn)程主機(jī):[目標(biāo)路徑] rsync [選項] [用戶@]遠(yuǎn)程主機(jī):[源路徑] [目標(biāo)路徑] # 遠(yuǎn)程同步語法(通過 rsync 守護(hù)進(jìn)程協(xié)議) rsync [選項] rsync://遠(yuǎn)程主機(jī)模塊名/[目標(biāo)路徑]
核心參數(shù)分類:
- 模式參數(shù):
-a
(歸檔模式,等價于-rlptgoD
,保留所有元數(shù)據(jù)并遞歸同步)-n
/--dry-run
(模擬同步,不實際傳輸文件,用于測試)-v
/-vv
(顯示詳細(xì)/更詳細(xì)的同步過程) - 傳輸控制:
-z
(壓縮傳輸數(shù)據(jù),提升網(wǎng)絡(luò)傳輸效率)--delete
(刪除目標(biāo)中源不存在的文件,實現(xiàn)鏡像同步)--ignore-errors
(忽略文件刪除/讀取錯誤,繼續(xù)同步) - 過濾規(guī)則:
--exclude="模式"
(排除符合模式的文件/目錄)--include="模式"
(強(qiáng)制包含符合模式的文件/目錄) - 性能優(yōu)化:
--bwlimit=KB/s
(限制傳輸帶寬,如--bwlimit=1024
)-P
(等價于--partial --progress
,顯示進(jìn)度并保留部分傳輸文件)-D
(保留設(shè)備文件和特殊文件)
二、常用用例與命令示例
1. 本地文件同步
場景:將本地目錄 /data/source 同步到 /data/backup,保留所有屬性并顯示詳細(xì)過程。
rsync -av /data/source/ /data/backup/
末尾斜杠 / 表示同步目錄內(nèi)的內(nèi)容,目標(biāo)目錄不存在時會自動創(chuàng)建。
若源路徑不帶斜杠(如 /data/source),目標(biāo)目錄會創(chuàng)建以 source 為名的子目錄。
2. 遠(yuǎn)程同步(通過 SSH)
場景 1:本地文件上傳到遠(yuǎn)程服務(wù)器
rsync -avz /local/file.txt user@remote.server:/remote/path/
-z 壓縮文件,適合網(wǎng)絡(luò)傳輸;遠(yuǎn)程路徑需用戶有權(quán)限寫入。
場景 2:從遠(yuǎn)程服務(wù)器下載文件
rsync -avz user@remote.server:/remote/file.txt /local/path/
場景 3:跨服務(wù)器同步(無需本地中轉(zhuǎn))
rsync -avz -e "ssh -p 2222" user1@server1:/source/ user2@server2:/dest/
-e 指定使用 SSH 協(xié)議及端口(默認(rèn) 22),支持加密傳輸。
3. 增量備份與鏡像同步
場景 1:增量備份(僅更新變化的文件,刪除目標(biāo)中多余文件)
rsync -av --delete /source/ /backup/
--delete
會使目標(biāo)與源嚴(yán)格一致,謹(jǐn)慎用于重要數(shù)據(jù)!建議先用 --dry-run
模擬。
場景 2:保留歷史版本的增量備份(使用硬鏈接節(jié)省空間)
rsync -av --link-dest=/backup/last/ /source/ /backup/current/
--link-dest
讓新備份共享上一次備份的相同文件,僅存儲差異部分。
4. 排除/包含特定文件
場景:同步目錄時排除日志文件和臨時文件
rsync -av --exclude="*.log" --exclude="tmp/" /data/ /backup/
支持通配符(*
、?
)和目錄路徑(如 tmp/
表示排除整個目錄)。
復(fù)雜過濾可使用 --exclude-from=文件
,在文件中每行寫一個排除模式:
rsync -av --exclude-from=exclude.list /source/ /dest/
5. 性能優(yōu)化與高級選項
限速傳輸(避免影響帶寬):
rsync -avz --bwlimit=2048 /large_data/ remote:/storage/
校驗和模式(跳過時間戳檢查,確保文件內(nèi)容一致):
rsync -av --checksum /source/ /dest/
保留符號鏈接(默認(rèn)保留,若需跟隨鏈接同步實際文件,加 --follow-symlinks
):
rsync -av --follow-symlinks /source/ /dest/
三、常見問題與解決方案
1. 權(quán)限問題:rsync: failed to open dir: Permission denied
原因:源/目標(biāo)目錄無讀取/寫入權(quán)限,或遠(yuǎn)程用戶權(quán)限不足。
解決:
本地同步:使用 sudo
提升權(quán)限,或確保用戶對路徑有對應(yīng)權(quán)限。
遠(yuǎn)程同步:檢查遠(yuǎn)程用戶是否為目錄所有者,或使用 ssh-keygen
配置無密碼登錄避免權(quán)限中斷。
2. 誤刪文件:--delete 意外刪除目標(biāo)文件
預(yù)防:
永遠(yuǎn)先用 --dry-run
模擬同步,確認(rèn)輸出中無錯誤刪除操作:
rsync -av --delete --dry-run /source/ /dest/
重要數(shù)據(jù)先備份目標(biāo)目錄,或使用 --delete-after
(先傳輸新文件再刪除,減少風(fēng)險)。
3. 傳輸中斷:網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致同步失敗
解決:
使用 -P
(--partial
)保留未完成傳輸?shù)呐R時文件,支持?jǐn)帱c續(xù)傳:
rsync -avP /large_file.iso remote:/dest/
若頻繁中斷,可搭配 rsync
+ nohup
或 screen
保持會話持續(xù)。
4. 文件沖突:源與目標(biāo)有同名但內(nèi)容不同的文件
現(xiàn)象:rsync
默認(rèn)以源文件覆蓋目標(biāo)文件,可能導(dǎo)致數(shù)據(jù)丟失。
解決:
使用 --compare-dest=參考目錄
對比三方文件,優(yōu)先保留最新版本(需 rsync >= 3.1.0
):
rsync -av --compare-dest=/reference/ /source/ /dest/
手動檢查沖突文件(通過 --itemize-changes
輸出詳細(xì)差異):
bash
rsync -av --itemize-changes /source/ /dest/
5. 符號鏈接異常:同步后鏈接失效或指向錯誤
原因:默認(rèn) rsync
保留符號鏈接本身,不跟隨其指向的文件。
解決:
若需保留鏈接(推薦):無需額外參數(shù),默認(rèn)行為正確。
若需同步鏈接指向的實際文件:添加 --follow-symlinks
,但可能導(dǎo)致循環(huán)鏈接錯誤。
6. 元數(shù)據(jù)丟失:權(quán)限/時間戳未正確保留
原因:未使用歸檔模式 -a
,或遠(yuǎn)程服務(wù)器限制權(quán)限寫入。
解決:
始終使用 -a
或顯式添加 -rltp
(遞歸、保留符號鏈接、時間戳、權(quán)限)。
遠(yuǎn)程同步時,確保目標(biāo)用戶有 chmod
/chown
權(quán)限(如使用 root 用戶或 sudo
)。
7. 壓縮無效:-z 未減少傳輸量
原因:傳輸?shù)奈募咽菈嚎s格式(如 .zip
、.tar.gz
),壓縮反而增加開銷。
解決:對二進(jìn)制或文本文件用 -z
,對已壓縮文件改用 -z0
(最小壓縮)或直接禁用 -z
。
8. 網(wǎng)絡(luò)連接超時:遠(yuǎn)程主機(jī)不可達(dá)
原因:SSH 端口錯誤、防火墻阻止連接、主機(jī)名解析失敗。
解決:
檢查遠(yuǎn)程主機(jī) IP/端口(ping remote.server
或 ssh user@remote.server -p 端口
)。
添加 -e "ssh -o ConnectTimeout=10"
限制連接超時時間:
rsync -avz -e "ssh -o ConnectTimeout=10" /local/ remote:/dest/
四、最佳實踐總結(jié)
測試優(yōu)先:復(fù)雜同步任務(wù)先用 --dry-run
模擬,確認(rèn)輸出無誤后再執(zhí)行。
備份關(guān)鍵數(shù)據(jù):對重要目錄同步前,手動備份目標(biāo)數(shù)據(jù)(尤其是含 --delete
的操作)。
日志記錄:通過 --log-file=rsync.log
記錄同步過程,方便后續(xù)審計或排錯:
rsync -av --delete --log-file=sync.log /source/ /dest/
版本控制:結(jié)合 --link-dest
實現(xiàn)基于硬鏈接的版本化備份,節(jié)省存儲空間。
通過掌握上述用法,可高效利用 rsync 完成本地/遠(yuǎn)程文件同步、增量備份、服務(wù)器鏡像等任務(wù),同時避免常見陷阱。實際使用中建議根據(jù)具體場景調(diào)整參數(shù),必要時查閱官方文檔(man rsync
)獲取完整選項說明。
- 使用nohup和--remove-source-files在后臺運(yùn)行rsync并記錄日志方式
- rsync使用--password-file無法讀取密鑰文件,需手動輸入密碼?
- linux上scp能不能取代rsync問題解讀
- Linux中rsync命令使用方式
- 在LINUX系統(tǒng)上使用rsync命令詳解
- rsync如何實現(xiàn)斷點續(xù)傳
- rsync?server服務(wù)端配置文件?rsyncd.conf參數(shù)詳解
- rsync同步數(shù)據(jù)時提示password file must not be other-accessible的解決方法
- Linux下rsync(本地、遠(yuǎn)程)文件同步方式
- Linux利用inotify和rsync服務(wù)實現(xiàn)數(shù)據(jù)實時同步的原理解析
- 基于rsync寫腳本實現(xiàn)多節(jié)點多服務(wù)器文件一鍵同步的方法
- Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗詳解
- 如何使用Linux的rsync
- Rsync 秒殺一切備份工具,你能手動屏蔽某些目錄嗎?
- Linux 通過Rsync+Inotify實現(xiàn)本、異地遠(yuǎn)程數(shù)據(jù)實時同步功能
- python rsync服務(wù)器之間文件夾同步腳本
- python+rsync精確同步指定格式文件
- 自動刷新從BrowserSync開始
相關(guān)文章
云服務(wù)器(Linux)安裝部署Kafka的詳細(xì)過程
這篇文章主要介紹了云服務(wù)器(Linux)安裝部署Kafka的詳細(xì)過程,kafka的安裝需要依賴于jdk,需要在服務(wù)器上提前安裝好該環(huán)境,這里使用用jdk1.8,本文給大家詳細(xì)介紹感興趣的朋友跟隨小編一起看看吧2022-11-11ubuntu20.04安裝unity-tweak-tools啟動時遇到錯誤的解決
在Ubuntu系統(tǒng)中,安裝Unity Tweak Tool時可能會遇到schemacom.canonical.Unity.ApplicationsLens未安裝的錯誤,解決這個問題的辦法是安裝缺失的依賴包,執(zhí)行命令`sudo apt-get install unity-lens-applications` 和 `sudo apt-get install unity-lens-files`2024-09-09zerotier搭建免費(fèi)moon服務(wù)器的部署流程
ZeroTier是一種基于P2P的虛擬組網(wǎng)工具,通過搭建Moon服務(wù)器?可大幅提升跨運(yùn)營商/跨國節(jié)點的連接質(zhì)量,本文介紹了如何使用云服務(wù)部署ZeroTier的Moon服務(wù)器,并詳細(xì)步驟包括登錄服務(wù)器、安裝ZeroTier、生成Moon配置文件、配置Moon服務(wù)器和重啟服務(wù),感興趣的朋友一起看看吧2025-03-03