scp 用戶的 rsync 遷移指南
導讀:OpenSSH 項目表示,他們認為 scp 協議已經過時,不靈活,而且不容易修復,然後他們繼而推薦使用 sftp 或 rsync 來進行文件傳輸。
本文字數:4130,閱讀時長大約:5分鐘
https://linux.cn/article-12575-1.html
作者:Chasinglogic
譯者:Xingyu.Wang
在SSH 8.0 預發布公告中,OpenSSH 項目表示,他們認為 scp 協議已經過時,不靈活,而且不容易修復,然後他們繼而推薦使用sftp或rsync來進行文件傳輸。
然而,很多用戶都是從小用著 scp 命令長大的,所以對 rsync 並不熟悉。此外,rsync 可以做的事情也遠不止複製文件,這可能會給菜鳥們留下複雜和難以掌握的印象。尤其是,scp 命令的標誌大體上可以直接對應到 cp 命令的標誌,而 rsync 命令的標誌卻和它大相徑庭。
本文將為熟悉 scp 的人提供一個介紹和過渡的指南。讓我們跳進最常見的場景:複製文件和複製目錄。
複製文件
對於複製單個文件而言,scp和rsync命令實際上是等價的。比方說,你需要把??傳到你在名為??的伺服器上的主目錄下:
相應的 rsync 命令只需要輸入 rsync 取代 scp:
複製目錄
對於複製目錄,就有了很大的分歧,這也解釋了為什麼 rsync 會被認為比 scp 更複雜。如果你想把??目錄複製到??伺服器上,除了指定??信息外,相應的 scp 命令和 cp 命令一模一樣。
對於rsync,考慮的因素比較多,因為它是一個比較強大的工具。首先,我們來看一下最簡單的形式:
看起來很簡單吧?對於只包含目錄和普通文件的簡單情況,這就可以了。然而,rsync更在意發送與主機系統中一模一樣的文件。讓我們來創建一個稍微複雜一些,但並不罕見的例子:
現在我們有了一個如下的目錄樹:
如果我們嘗試上面的命令來複制?,我們會注意到非常不同的(並令人驚訝的)結果。首先,我們來試試scp:
如果你??進入你的伺服器,看看??的目錄樹,你會發現它和你的主機系統有一個重要而微妙的區別:
請注意,?不再是一個符號鏈接,它現在是一個??的完整副本。如果你習慣於使用cp,這可能會是令人驚訝的行為。如果你嘗試使用cp -r複製??目錄,你會得到一個新的目錄,裡面的符號鏈接和??的一樣。現在如果我們嘗試使用之前的rsync命令,我們會得到一個警告:
rsync警告我們它發現了一個非常規文件,並正在跳過它。因為你沒有告訴它可以複製符號鏈接,所以它忽略了它們。rsync在手冊中有一節「符號鏈接」,解釋了所有可能的行為選項。在我們的例子中,我們需要添加??標誌:
在遠程伺服器上,我們看到這個符號鏈接是作為一個符號鏈接複製過來的。請注意,這與scp複製符號鏈接的方式不同。
為了省去一些打字工作,並利用更多的文件保護選項,在複製目錄時可以使用歸檔標誌?(簡稱?)。該歸檔標誌將做大多數人所期望的事情,因為它可以實現遞歸複製、符號鏈接複製和許多其他選項。
如果你感興趣的話,rsync手冊頁有關於存檔標誌的深入解釋。
注意事項
不過,使用rsync有一個注意事項。使用scp比使用rsync更容易指定一個非標準的 ssh 埠。例如,如果??使用 8022 埠的 SSH 連接,那麼這些命令就會像這樣:
而在使用rsync時,你必須指定要使用的「遠程 shell」命令,默認是?。你可以使用??標誌來指定。
rsync會使用你的??配置;但是,如果你經常連接到這個伺服器,你可以在你的??文件中添加以下代碼。這樣你就不需要再為rsync或??命令指定埠了!
另外,如果你連接的每一台伺服器都在同一個非標準埠上運行,你還可以配置??環境變數。
為什麼你還是應該切換到 rsync?
現在我們已經介紹了從scp切換到rsync的日常使用案例和注意事項,讓我們花一些時間來探討一下為什麼你可能想要使用rsync的優點。很多人在很久以前就已經開始使用rsync了,就是因為這些優點。
即時壓縮
如果你和伺服器之間的網路連接速度較慢或有限,rsync可以花費更多的 CPU 處理能力來節省網路帶寬。它通過在發送數據之前對數據進行即時壓縮來實現。壓縮可以用??標誌來啟用。
差量傳輸
rsync也只在目標文件與源文件不同的情況下複製文件。這可以在目錄中遞歸地工作。例如,如果你拿我們上面的最後一個??的例子,並多次重新運行那個rsync命令,那麼在最初的傳輸之後就不會有任何傳輸。如果你知道你會重複使用這些命令,例如備份到 U 盤,那麼使用rsync即使是進行本地複製也是值得的,因為這個功能可以節省處理大型數據集的大量的時間。
同步
顧名思義,rsync可以做的不僅僅是複製數據。到目前為止,我們只演示了如何使用rsync複製文件。如果你想讓rsync把目標目錄變成源目錄的樣子,你可以在rsync中添加刪除標誌?。這個刪除標誌使得rsync將從源目錄中複製不存在於目標目錄中的文件,然後它將刪除目標目錄中不存在於源目錄中的文件。結果就是目標目錄和源目錄完全一樣。相比之下,scp只會在目標目錄下添加文件。
結論
對於簡單的使用情況,rsync並不比老牌的scp工具複雜多少。唯一顯著的區別是在遞歸複製目錄時使用??而不是?。然而,正如我們看到的,rsync的??標誌比scp的??標誌更像cp的??標誌。
希望通過這些新命令,你可以加快你的文件傳輸工作流程。
via:https://fedoramagazine.org/scp-users-migration-guide-to-rsync/
作者:chasinglogic選題:lujun9972譯者:wxy校對:wxy
本文由LCTT原創編譯,Linux中國榮譽推出