如果您同時使用筆記本計算機和桌面計算機,就可能需要及時地同步它們。另外,除了在家裡執行同步之外,還可能希望從遠端站點執行同步;就拿我來說,我在旅途中使用筆記本計算機,在此期間希望確保把在筆記本上做的工作備份到桌面計算機上。(丟失筆記本並因此丟失所有工作是真正的大災難!)對於這個問題有許多解決方案:本文介紹一種工具 —rsync
— 和幾種相關工具,它們都提供簡便的同步過程。
什麼是 rsync?
rsync
應用程式是在 linux® 和 unix® 上廣泛使用的檔案傳輸和同步程式,而且它已經移植到了 windows® 上。它的關鍵特性是乙個非常快的演算法,它只通過資料鏈路傳送檔案差異,因此把機器之間傳輸的資料總量降低到最低限度。(如果使用 file transfer protocol [ftp] 或rcp
和scp
等實用程式,那麼即使只修改了乙個位元組,也會傳送完整的檔案)。當然,rsync
並非只能處理現有的檔案:它還可以處理只在鏈路一端存在的檔案和目錄。最後,通過壓縮資料來優化通訊,因此可以通過非寬頻連線使用這個工具。
獲取並安裝 rsync
為了進行安全的通訊,需要安裝 secure shell (ssh)。(可以使用 remote shell [rsh],但是它不夠安全)。openssh 是 ssh 的一種免費實現,在所有發行版上都有。還需要在防火牆上開啟乙個埠,讓計算機可以相互連線。
使用 rsync
現在,我們使用rsync
把筆記本計算機直接同步到乙個遠端伺服器。為此,可以使用與 清單 1
相似的**。還可以把遠端伺服器同步到筆記本(檔案將從伺服器傳送到筆記本),或者同步兩個本地目錄,但是不能同步兩個遠端伺服器。
清單 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 中選項的次序是任意的,而且大多數選項有短格式。首先,--compress
(或-z
)指定將壓縮資料,這可以節省頻寬。應該總是使用這個選項。(在非常高速的資料鏈路上,不進行壓縮可能也可以,但是對於大多數遠端連線,壓縮都是有幫助的)。可以使用補充選項--compress-level=level
指定壓縮的級別;但是,通常可以接受標準的壓縮級別。
--recursive
(-r
) 選項讓rsync
遞迴地複製所有目錄。這會複製目錄中的所有檔案,包括其中的子目錄及其內容。如果不需要這個功能,可以使用--dirs
選項 (-d
) 產生相反的效果:跳過子目錄及其內容。
在預設情況下,rsync
把需要的檔案複製到目標計算機,但是並不刪除額外檔案。通過使用--delete
選項,目標目錄會與原目錄保持完全一致。但是要注意:如果把乙個空目錄同步到遠端目錄,就會刪除遠端目錄中的所有內容!
如果原目錄中有符號鏈結,--links
選項(或-l
)會在目標目錄中重新建立這些符號鏈結。另一種方法是使用--copy-links
(或-l
)複製符號鏈結指向的檔案或目錄,而不是複製符號鏈結本身。如果有符號鏈結指向複製的樹之外的檔案或目錄(這是一種安全風險),可以使用--copy-unsafe-links
。--safe-links
選項忽略這樣的鏈結,這更安全。
後面四個選項(--times
、--perms
、--owner
和--group
或-tpog
)分別讓rsync
保持原來的更新時間戳、許可權、所有者和組資訊。同時指定所有這些選項的簡便方法是使用--archive
(或-a
),這還會設定--recursive
和--links
選項。
後面三個選項(--verbose
、--progress
和--stats
)提供關於rsync
正在執行的操作的大量資訊。如果對這些資訊不感興趣,只需跳過它們,除非出現錯誤,rsync
會悄悄地執行。
儘管當前的rsync
版本預設使用 ssh,但是可以使用--rsh
(或-e
)選項強制使用 ssh。如果需要使用額外的 ssh 引數(例如希望讓 ssh 使用非標準埠),可以新增這些引數,例如--rsh "ssh -p 12345"
。
可以使用--exclude
選項(和對應的--include
)選擇要同步的檔案。在這個示例中,排除了常見的備份檔案。應該根據需要排除和包含檔案,從而優化傳送的內容。
最後,指定源路徑和目標路徑。不要忘記最後的/*
,否則結果可能不符合期望。可以通過檢視文件了解 some/path、some/path/ 和 some/path/* 之間的差異。但是,使用/*
是最保險的方法。
可以使用-a
選項 (--archive
) 簡化清單 1 中的命令,見 清單 2
。(如果作為根在伺服器上執行rsync
,-a
選項可能會複製一些額外的內容 — 請查閱文件 — 這不是一種安全的做法)。rsync
還有許多選項;可以通過rsync --help
和man rsync
了解所有選項。
清單 2. 相同命令的簡短版本
rsync -zae "ssh" --delete --exclude "*bak" --exclude "*~" / /my/path/at/the/laptop/* myserver:/some/path/at/the/server
作為守護程序執行 rsync
有兩種執行rsync
的方法:作為守護程序執行和根據需要執行。如果只想同步兩台計算機,那麼選用哪種方法並沒有明顯的差異。作為守護程序執行rsync
(使用rsync --daemon
命令)適用於伺服器,允許多個不同的使用者針對伺服器同步自己的計算機。可以通過man rsyncd.conf
了解可以指定的選項。但是要注意,對於同步筆記本和桌面計算機,不需要使用複雜的配置。
在不需要密碼的情況下使用 rsync
如果像上面這樣使用rsync
,那麼每次都必須輸入遠端計算機的密碼。對於一般的使用,這只是有點兒麻煩;但是,如果要從cron
過程使用rsync
,這會造成嚴重的阻礙。
為了實現不需要密碼的rsync
會話,必須設定乙個公共-私有金鑰對。首先,在筆記本上執行ssh-keygen -t rsa
。在詢問密碼時,保持為空。這個命令在主目錄中的(隱藏的).ssh 目錄中建立兩個檔案:id_rsa 和 id_rsa.pub。
然後,登入伺服器,在主目錄中執行mkdir .ssh; chmod 0700 .ssh
。返回到筆記本上,把剛建立的 id_rsa.pub 作為 authorized_keys2 複製到新的 .ssh 目錄中。在筆記本上,可以執行scp .ssh/id_rsa.pub your_server:.ssh/authorized_keys2
。
這就完成了!在此之後,就可以通過 ssh 連線伺服器(並執行scp
或rsync
),而不需要輸入密碼。
**:
rsync 命令格式
rsync 的命令格式可以為以下六種 rsync option src dest rsync option src user host dest rsync option user host src dest rsync option user host src dest rsync option ...
rsync命令用法
rsync命令用法 在配置完rsync伺服器後,就可以從客戶端發出rsync命令來實現各種同步的操 作。rsync有很 多功能選項,下面就對介紹一下常用的選項 rsync的命令格式可以為 1.rsync option src src user host dest 2.rsync option use...
Rsync命令引數詳解
v,verbose 詳細模式輸出 q,quiet 精簡輸出模式 c,checksum 開啟校驗開關,強制對檔案傳輸進行校驗 a,archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於 rlptgod r,recursive 對子目錄以遞迴模式處理 r,relative 使用相對路...