1. 程式人生 > >在iTerm2中使用Zmodem實現快速傳輸檔案

在iTerm2中使用Zmodem實現快速傳輸檔案

很多時候我們需要在本機和遠端伺服器間進行檔案傳輸,通常都是使用 scp 命令進行傳輸。今天我們就來講講另一種更簡單方便的方法:通過 Zmodem 在本地和遠端伺服器間快速傳輸檔案。

什麼是Zmodem

Zmodem 是針對 modem 的一種支援錯誤校驗的檔案傳輸協議。ZmodemYmodem 的改進版,後者又是 Xmodem 的改進版。Zmodem 不僅能傳輸更大的資料,而且錯誤率更小。

利用 Zmodem 協議,可以在 modem 上傳送 512 位元組的資料塊。Zmodem 包含一種名為檢查點重啟的特性,如果通訊連結在資料傳輸過程中中斷,能從斷點處而不是從開始處恢復傳輸。

配置iTerm2支援Zmodem

要讓 iTerm2 在遠端伺服器上支援通過 Zmodem 協議傳輸,需要分別在服務端和客戶端進行相應配置。網上大多數文件都只提到客戶端部分。因為收發方都必須有支援 Zmodem 協議的工具,才能進行正常收發。下面我們就來看看是如何進行配置的:

服務端配置

lrzsz 軟體包是 支援 Zmodem 協議的工具包。 其包含的 rzsz 命令是通過 ZModem協議在遠端伺服器和終端機器間上傳下載檔案的利器。

為了正確通過 szrz 命令傳輸檔案,服務端需要安裝 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 ,點選 PreferencesProfiles 選擇指定的 Profile,這裡選 Default。然後繼續選擇 AdvancedTriggers,並點選 Edit 新增兩個觸發器。

iTerm

按如下內容新增兩個觸發器,首先增加 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

成功增加完成後的效果,類似下圖:

Zmodem

配置這兩個觸發器的作用就是讓 iTerm2 根據終端上顯示的字元通過指定的觸發器呼叫相應的傳送和接收指令碼。

使用Zmodem傳輸檔案

傳送檔案到遠端伺服器

  • 在遠端伺服器執行 rz 命令
  • 本地選擇檔案傳輸
  • 等待傳輸指示消失

接收遠端伺服器的檔案

  • 在遠端伺服器執行 sz filename1 filename2 … filenameN 命令
  • 本地選擇目錄儲存
  • 等待傳輸指示消失

上面詳細介紹瞭如何在 macOS 下通過 Zmodem快速傳輸檔案的方法,你可能會問沒有 macOS 的情況下如何破?其實在 Windows 下實現更加簡單,只需使用一個支援 Zmodem的終端軟體就行了,這裡推薦 XShell。當然服務端的 lrzsz 軟體包是必不可少的。

參考文件

http://www.google.com
https://github.com/mmastrac/iterm2-zmodem

文章來自微信公眾號:運維之美