scp使用者遷移rsync
本文將為熟悉 scp 的人提供一個介紹和過渡的指南。讓我們跳進最常見的場景:複製檔案和複製目錄。在 SSH 8.0 預釋出公告中,OpenSSH 專案表示,他們認為 scp 協議已經過時,不靈活,而且不容易修復,然後他們繼而推薦使用 sftp 或 rsync 來進行檔案傳輸。 |
然而,很多使用者都是從小用著 scp 長大的,所以對 rsync 並不熟悉。此外,rsync 可以做的事情也遠不止複製檔案,這可能會給菜鳥們留下複雜和難以掌握的印象。尤其是,scp 的標誌大體上可以直接對應到 cp 命令的標誌,而 rsync 命令的標誌卻和它大相徑庭。
對於複製單個檔案而言,scp 和 rsync 命令實際上是等價的。比方說,你需要把 foo.txt 傳到你在名為 server 的伺服器上的主目錄下:
$ scp foo.txt me@server:/home/me/
相應的 rsync 命令只需要輸入 rsync 取代 scp:
$ rsync foo.txt me@server:/home/me/
對於複製目錄,就有了很大的分歧,這也解釋了為什麼 rsync 會被認為比 scp 更復雜。如果你想把 bar 目錄複製到 server 伺服器上,除了指定 ssh 資訊外,相應的 scp 命令和 cp 命令一模一樣。
$ scp -r bar/ me@server:/home/me/
對於 rsync,考慮的因素比較多,因為它是一個比較強大的工具。首先,我們來看一下最簡單的形式:
$ rsync -r bar/ me@server:/home/me/
看起來很簡單吧?對於只包含目錄和普通檔案的簡單情況,這就可以了。然而,rsync 更在意傳送與主機系統中一模一樣的檔案。讓我們來建立一個稍微複雜一些,但並不罕見的例子:
# 建立多級目錄結構 $ mkdir -p bar/baz # 在其根目錄下建立檔案 $ touch bar/foo.txt # 現在建立一個符號連結指回到該檔案 $ cd bar/baz $ ln -s ../foo.txt link.txt # 返回原位置 $ cd -
現在我們有了一個如下的目錄樹:
bar ├── baz │ └── link.txt -> ../foo.txt └── foo.txt 1 directory, 2 files
如果我們嘗試上面的命令來複制 bar,我們會注意到非常不同的(並令人驚訝的)結果。首先,我們來試試 scp:
$ scp -r bar/ me@server:/home/me/
如果你 ssh 進入你的伺服器,看看 bar 的目錄樹,你會發現它和你的主機系統有一個重要而微妙的區別:
bar ├── baz │ └── link.txt └── foo.txt 1 directory, 2 files
請注意,link.txt 不再是一個符號連結,它現在是一個 foo.txt 的完整副本。如果你習慣於使用 cp,這可能會是令人驚訝的行為。如果你嘗試使用 cp -r 複製 bar 目錄,你會得到一個新的目錄,裡面的符號連結和 bar 的一樣。現在如果我們嘗試使用之前的 rsync 命令,我們會得到一個警告:
$ rsync -r bar/ me@server:/home/me/ skipping non-regular file "bar/baz/link.txt"
rsync 警告我們它發現了一個非常規檔案,並正在跳過它。因為你沒有告訴它可以複製符號連結,所以它忽略了它們。rsync 在手冊中有一節“符號連結”,解釋了所有可能的行為選項。在我們的例子中,我們需要新增 -links 標誌:
$ rsync -r --links bar/ me@server:/home/me/
在遠端伺服器上,我們看到這個符號連結是作為一個符號連結複製過來的。請注意,這與 scp 複製符號連結的方式不同。
bar/ ├── baz │ └── link.txt -> ../foo.txt └── foo.txt 1 directory, 2 files
為了省去一些打字工作,並利用更多的檔案保護選項,在複製目錄時可以使用歸檔標誌 -archive(簡稱 -a)。該歸檔標誌將做大多數人所期望的事情,因為它可以實現遞迴複製、符號連結複製和許多其他選項。
$ rsync -a bar/ me@server:/home/me/
如果你感興趣的話,rsync 手冊頁有關於存檔標誌的深入解釋。
不過,使用 rsync 有一個注意事項。使用 scp 比使用 rsync 更容易指定一個非標準的 ssh 埠。例如,如果 server 使用 8022 埠的 SSH 連線,那麼這些命令就會像這樣:
$ scp -P 8022 foo.txt me@server:/home/me/
而在使用 rsync 時,你必須指定要使用的“遠端 ”命令,預設是 ssh。你可以使用 -e 標誌來指定。
$ rsync -e 'ssh -p 8022' foo.txt me@server:/home/me/
rsync 會使用你的 ssh 配置;但是,如果你經常連線到這個伺服器,你可以在你的 ~/.ssh/config 檔案中新增以下程式碼。這樣你就不需要再為 rsync 或 ssh 命令指定埠了!
Host server Port 8022
另外,如果你連線的每一臺伺服器都在同一個非標準埠上執行,你還可以配置 RSYNC_RSH 環境變數。
現在我們已經介紹了從 scp 切換到 rsync 的日常使用案例和注意事項,讓我們花一些時間來探討一下為什麼你可能想要使用 rsync 的優點。很多人在很久以前就已經開始使用 rsync 了,就是因為這些優點。
如果你和伺服器之間的網路連線速度較慢或有限,rsync 可以花費更多的 CPU 處理能力來節省網路頻寬。它透過在傳送資料之前對資料進行即時壓縮來實現。壓縮可以用 -z 標誌來啟用。
rsync 也只在目標檔案與原始檔不同的情況下複製檔案。這可以在目錄中遞迴地工作。例如,如果你拿我們上面的最後一個 bar 的例子,並多次重新執行那個 rsync 命令,那麼在最初的傳輸之後就不會有任何傳輸。如果你知道你會重複使用這些命令,例如備份到 U 盤,那麼使用 rsync 即使是進行本地複製也是值得的,因為這個功能可以節省處理大型資料集的大量的時間。
顧名思義,rsync 可以做的不僅僅是複製資料。到目前為止,我們只演示瞭如何使用 rsync 複製檔案。如果你想讓 rsync 把目標目錄變成源目錄的樣子,你可以在 rsync 中新增刪除標誌 -delete。這個刪除標誌使得 rsync 將從源目錄中複製不存在於目標目錄中的檔案,然後它將刪除目標目錄中不存在於源目錄中的檔案。結果就是目標目錄和源目錄完全一樣。相比之下,scp 只會在目標目錄下新增檔案。
對於簡單的使用情況,rsync 並不比老牌的 scp 工具複雜多少。唯一顯著的區別是在遞迴複製目錄時使用 -a 而不是 -r。然而,正如我們看到的,rsync 的 -a 標誌比 scp 的 -r 標誌更像 cp 的 -r 標誌。
希望透過這些新命令,你可以加快你的檔案傳輸工作流程。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2721796/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- scp實現斷點續傳---rsync斷點
- SCP和Rsync遠端拷貝的幾個技巧
- 遷移oracle使用者密碼Oracle密碼
- 常用命令--複製-備份--cp--mv--scp--rsync
- 棧遷移
- 遷移公告
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- docker映象遷移Docker
- 賬號遷移
- Jenkins Job遷移Jenkins
- [論文閱讀] 顏色遷移-N維pdf遷移
- scp
- xtts遷移實踐TTS
- Kafka資料遷移Kafka
- ASM下遷移spfileASM
- Harbor資料遷移
- WSL2遷移
- 遷移&新地址
- oracle遷移OCR盤Oracle
- 遷移ASM磁碟組ASM
- gitlab資料遷移Gitlab
- Homestead 怎麼遷移?
- Oracle遷移文件大全Oracle
- Oracle遷移文章大全Oracle
- webpack 4遷移指南Web
- Codable 的遷移方案
- wsl docker 遷移 - windowsDockerWindows
- 從Milvus遷移DashVector
- jenkins 遷移踩坑Jenkins
- CDH/HDP遷移之路
- MongoDB遷移工具MongoshakeMongoDB
- DBMotion——MySQL遷移利器MySql
- cloudera manager server遷移CloudServer
- 資料庫遷移資料庫
- Mysql百萬級資料遷移,怎麼遷移?實戰過沒?MySql
- 遷移學習系列---基於例項方法的遷移學習遷移學習
- rsync
- ESXI 遷移至KVM (V2V遷移)