在iTerm2中使用Zmodem實現快速傳輸檔案
很多時候我們需要在本機和遠端伺服器間進行檔案傳輸,通常都是使用 scp
命令進行傳輸。今天我們就來講講另一種更簡單方便的方法:通過 Zmodem
在本地和遠端伺服器間快速傳輸檔案。
什麼是Zmodem
Zmodem
是針對 modem
的一種支援錯誤校驗的檔案傳輸協議。Zmodem
是 Ymodem
的改進版,後者又是 Xmodem
的改進版。Zmodem
不僅能傳輸更大的資料,而且錯誤率更小。
利用 Zmodem
協議,可以在 modem
上傳送 512 位元組的資料塊。Zmodem
包含一種名為檢查點重啟的特性,如果通訊連結在資料傳輸過程中中斷,能從斷點處而不是從開始處恢復傳輸。
配置iTerm2支援Zmodem
要讓 iTerm2
在遠端伺服器上支援通過 Zmodem
協議傳輸,需要分別在服務端和客戶端進行相應配置。網上大多數文件都只提到客戶端部分。因為收發方都必須有支援 Zmodem
協議的工具,才能進行正常收發。下面我們就來看看是如何進行配置的:
服務端配置
lrzsz
軟體包是 支援 Zmodem
協議的工具包。 其包含的 rz
、sz
命令是通過 ZModem
協議在遠端伺服器和終端機器間上傳下載檔案的利器。
為了正確通過 sz
、rz
命令傳輸檔案,服務端需要安裝 lrzsz
軟體包的。
- Ubuntu 或 Debian
$ apt-get install lrzsz
- RHEL 或 CentOS
$ yum install lrzsz
客戶端配置
安裝lrzsz
和伺服器端一樣,客戶端同樣需要安裝 lrzsz
軟體包。這裡通過 Homebrew
進行 lrzsz
軟體包安裝,如果你還不會使用 Homebrew
,可參考 「macOS不可或缺的套件管理器——Homebrew」一文進行了解。
$ brew install lrzsz
配置iTerm2
在全球最大同性交友網站 Github
上,已經有人共享了一個叫「ZModem integration for iTerm 2」的專案。我們只需下載其相應指令碼,並進行簡單配置就可以很容易的在 iTerm2
上實現對 Zmodem
的支援。
專案地址:https://github.com/mmastrac/iterm2-zmodem
- 下載並安裝指令碼
$ git clone https://github.com/mmastrac/iterm2-zmodem.git $ cd iterm2-zmodem $ cp iterm2-recv-zmodem.sh iterm2-send-zmodem.sh /usr/local/bin/
- 配置iTerm2上的觸發器
開啟 iTerm2
,點選 Preferences
→ Profiles
選擇指定的 Profile
,這裡選 Default
。然後繼續選擇 Advanced
→ Triggers
,並點選 Edit
新增兩個觸發器。
按如下內容新增兩個觸發器,首先增加 sz
指令的觸發器:
Regular expression: rz waiting to receive.\*\*B0100 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-send-zmodem.sh Instant: checked
其次增加 rz
指令的觸發器:
Regular expression: \*\*B00000000000000 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-recv-zmodem.sh Instant: checked
成功增加完成後的效果,類似下圖:
配置這兩個觸發器的作用就是讓 iTerm2
根據終端上顯示的字元通過指定的觸發器呼叫相應的傳送和接收指令碼。
使用Zmodem傳輸檔案
傳送檔案到遠端伺服器
- 在遠端伺服器執行
rz
命令 - 本地選擇檔案傳輸
- 等待傳輸指示消失
接收遠端伺服器的檔案
- 在遠端伺服器執行
sz filename1 filename2 … filenameN
命令 - 本地選擇目錄儲存
- 等待傳輸指示消失
上面詳細介紹瞭如何在 macOS
下通過 Zmodem
快速傳輸檔案的方法,你可能會問沒有 macOS
的情況下如何破?其實在 Windows
下實現更加簡單,只需使用一個支援 Zmodem
的終端軟體就行了,這裡推薦 XShell
。當然服務端的 lrzsz
軟體包是必不可少的。
參考文件
http://www.google.com
https://github.com/mmastrac/iterm2-zmodem
文章來自微信公眾號:運維之美