Rsync 命令詳解安裝及使用Rsync
使用 rsync 更輕松更快速地同步兩臺機(jī)器(比如筆記本計算機(jī)和桌面計算機(jī)),這提供一種高效的算法和多種選項(xiàng)。另外,如果不喜歡命令行操作,還可以通過幾個圖形化工具更簡便地使用 rsync。
如果您同時使用筆記本計算機(jī)和桌面計算機(jī),就可能需要及時地同步它們。另外,除了在家里運(yùn)行同步之外,還可能希望從遠(yuǎn)程站點(diǎn)運(yùn)行同步;就拿我來說,我在旅途中使用筆記本計算機(jī),在此期間希望確保把在筆記本上做的工作備份到桌面計算機(jī)上。(丟失筆記本并因此丟失所有工作是真正的大災(zāi)難!)對于這個問題有許多解決方案:本文介紹一種工具 — rsync — 和幾種相關(guān)工具,它們都提供簡便的同步過程。
什么是 Rsync 命令?
rsync 應(yīng)用程序是在 Linux? 和 UNIX? 上廣泛使用的文件傳輸和同步程序,而且它已經(jīng)移植到了 Windows? 上。它的關(guān)鍵特性是一個非??斓乃惴?,它只通過數(shù)據(jù)鏈路發(fā)送文件差異,因此把機(jī)器之間傳輸?shù)臄?shù)據(jù)總量降低到最低限度。(如果使用 File Transfer Protocol [FTP] 或 rcp 和 scp 等實(shí)用程序,那么即使只修改了一個字節(jié),也會發(fā)送完整的文件)。當(dāng)然,rsync 并非只能處理現(xiàn)有的文件:它還可以處理只在鏈路一端存在的文件和目錄。最后,通過壓縮數(shù)據(jù)來優(yōu)化通信,因此可以通過非寬帶連接使用這個工具。
rsync 的狀態(tài)
rsync 實(shí)用程序最初是由 Samba 的開發(fā)者 Andrew Tridgell 開發(fā)的。這個軟件采用 GNU General Public License (GPL),它的當(dāng)前版本是 2008 年 12 月發(fā)布的 3.0.5。
獲取并安裝 rsync
可以找到針對大多數(shù)當(dāng)前 Linux 發(fā)行版預(yù)編譯的二進(jìn)制包,首先應(yīng)該找到適合自己的包。我使用 Smart 對 OpenSUSE 進(jìn)行包管理,所以只需使用 sudo smart install rsync 命令安裝 rsync 的最新版本。如果您喜歡自己進(jìn)行編譯,那么可以獲取源代碼(見 參考資料 中的鏈接)并用傳統(tǒng)的 configure, make, make install 方法安裝它;詳細(xì)步驟參見源代碼中的 README 文件。
為了進(jìn)行安全的通信,需要安裝 Secure Shell (ssh)。(可以使用 remote shell [rsh],但是它不夠安全)。OpenSSH 是 ssh 的一種免費(fèi)實(shí)現(xiàn),在所有發(fā)行版上都有。還需要在防火墻上打開一個端口,讓計算機(jī)可以相互連接。這些都是標(biāo)準(zhǔn)配置,更多信息見 參考資料 中的鏈接。
作為守護(hù)進(jìn)程運(yùn)行 Rsync 命令
有兩種運(yùn)行 rsync 的方法:作為守護(hù)進(jìn)程運(yùn)行和根據(jù)需要運(yùn)行。如果只想同步兩臺計算機(jī),那么選用哪種方法并沒有明顯的差異。作為守護(hù)進(jìn)程運(yùn)行 rsync(使用 rsync --daemon 命令)適用于服務(wù)器,允許多個不同的用戶針對服務(wù)器同步自己的計算機(jī)??梢酝ㄟ^ man rsyncd.conf 了解可以指定的選項(xiàng)。但是要注意,對于同步筆記本和桌面計算機(jī),不需要使用復(fù)雜的配置。
使用 Rsync 命令
現(xiàn)在,我們使用 rsync 把筆記本計算機(jī)直接同步到一個遠(yuǎn)程服務(wù)器。為此,可以使用與 清單 1 相似的代碼。還可以把遠(yuǎn)程服務(wù)器同步到筆記本(文件將從服務(wù)器發(fā)送到筆記本),或者同步兩個本地目錄,但是不能同步兩個遠(yuǎn)程服務(wù)器。
清單 1. 相同 rsync 命令的兩個版本
rsync --compress --recursive --delete --links \ --times --perms --owner --group \ --verbose --progress --stats \ --rsh="ssh" \ --exclude "*bak" --exclude "*~" \ /my/path/at/the/laptop/* myserver:/some/path/at/the/server rsync -zrltpogve "ssh" --progress --stats --delete \ --exclude "*bak" --exclude "*~" \ /my/path/at/the/laptop/* myserver:/some/path/at/the/server |
注意,清單 1 中選項(xiàng)的次序是任意的,而且大多數(shù)選項(xiàng)有短格式。首先,--compress(或 -z)指定將壓縮數(shù)據(jù),這可以節(jié)省帶寬。應(yīng)該總是使用這個選項(xiàng)。(在非常高速的數(shù)據(jù)鏈路上,不進(jìn)行壓縮可能也可以,但是對于大多數(shù)遠(yuǎn)程連接,壓縮都是有幫助的)??梢允褂醚a(bǔ)充選項(xiàng) --compress-level=level 指定壓縮的級別;但是,通??梢越邮軜?biāo)準(zhǔn)的壓縮級別。
--recursive (-r) 選項(xiàng)讓 rsync 遞歸地復(fù)制所有目錄。這會復(fù)制目錄中的所有文件,包括其中的子目錄及其內(nèi)容。如果不需要這個功能,可以使用 --dirs 選項(xiàng) (-d) 產(chǎn)生相反的效果:跳過子目錄及其內(nèi)容。
在默認(rèn)情況下,rsync 把需要的文件復(fù)制到目標(biāo)計算機(jī),但是并不刪除額外文件。通過使用 --delete 選項(xiàng),目標(biāo)目錄會與原目錄保持完全一致。但是要注意:如果把一個空目錄同步到遠(yuǎn)程目錄,就會刪除遠(yuǎn)程目錄中的所有內(nèi)容!
如果原目錄中有符號鏈接,--links 選項(xiàng)(或 -l)會在目標(biāo)目錄中重新創(chuàng)建這些符號鏈接。另一種方法是使用 --copy-links(或 -L)復(fù)制符號鏈接指向的文件或目錄,而不是復(fù)制符號鏈接本身。如果有符號鏈接指向復(fù)制的樹之外的文件或目錄(這是一種安全風(fēng)險),可以使用 --copy-unsafe-links。--safe-links 選項(xiàng)忽略這樣的鏈接,這更安全。
后面四個選項(xiàng)(--times、--perms、--owner 和 --group 或 -tpog)分別讓 rsync 保持原來的更新時間戳、權(quán)限、所有者和組信息。同時指定所有這些選項(xiàng)的簡便方法是使用 --archive(或 -a),這還會設(shè)置 --recursive 和 --links 選項(xiàng)。
后面三個選項(xiàng)(--verbose、--progress 和 --stats)提供關(guān)于 rsync 正在執(zhí)行的操作的大量信息。如果對這些信息不感興趣,只需跳過它們,除非出現(xiàn)錯誤,rsync 會悄悄地運(yùn)行。
盡管當(dāng)前的 rsync 版本默認(rèn)使用 ssh,但是可以使用 --rsh(或 -e)選項(xiàng)強(qiáng)制使用 ssh。如果需要使用額外的 ssh 參數(shù)(例如希望讓 ssh 使用非標(biāo)準(zhǔn)端口),可以添加這些參數(shù),例如 --rsh "ssh -p 12345"。
可以使用 --exclude 選項(xiàng)(和對應(yīng)的 --include)選擇要同步的文件。在這個示例中,排除了常見的備份文件。應(yīng)該根據(jù)需要排除和包含文件,從而優(yōu)化發(fā)送的內(nèi)容。
最后,指定源路徑和目標(biāo)路徑。不要忘記最后的 /*,否則結(jié)果可能不符合期望??梢酝ㄟ^查看文檔了解 some/path、some/path/ 和 some/path/* 之間的差異。但是,使用 /* 是最保險的方法。
可以使用 -a 選項(xiàng) (--archive) 簡化清單 1 中的命令,見 清單 2。(如果作為根在服務(wù)器上運(yùn)行 rsync,-a 選項(xiàng)可能會復(fù)制一些額外的內(nèi)容 — 請查閱文檔 — 這不是一種安全的做法)。rsync 還有許多選項(xiàng);可以通過 rsync --help 和 man rsync 了解所有選項(xiàng)。
未完,查看全文請點(diǎn)擊:rsync 命令家族
【編輯推薦】