一、使用lszrz实现快速传输文件
很多时候我们需要在本机和远端服务器间进行文件传输,通常都是使用 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
软件包。这里通过 Homebrew
进行 lrzsz
软件包安装:
$ brew install lrzsz
配置 iTerm2
在全球最大同性交友网站 Github
上,已经有人共享了一个叫 “ZModem integration for iTerm 2” 的项目。我们只需下载其相应脚本,并进行简单配置就可以很容易的在 iTerm2
上实现对 Zmodem
的支持。
项目地址:https://github.com/kuoruan/iterm2-zmodem
- 下载并安装脚本
$ wget -qO /usr/local/bin/iterm2-zmodem.sh https://github.com/kuoruan/iterm2-zmodem/raw/master/iterm2-zmodem.sh $ chmod +x /usr/local/bin/iterm2-zmodem.sh
- 配置 iTerm2 上的触发器
打开 iTerm2
,点击 Preferences
→ Profiles
选择指定的 Profile
。然后继续选择 Advanced
→ Triggers
,并点击 Edit
添加两个触发器。
按如下内容添加两个触发器,首先增加 sz
指令的触发器:
Regular expression: rz waiting to receive.**B0100 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-zmodem.sh send Instant: checked
其次增加 rz
指令的触发器:
Regular expression: **B00000000000000 Action: Run Silent Coprocess Parameters: /usr/local/bin/iterm2-zmodem.sh recv Instant: checked
成功增加完成后的效果,类似下图:
配置这两个触发器的作用就是让 iTerm2
根据终端上显示的字符通过指定的触发器调用相应的发送和接收脚本。
使用 Zmodem 传输文件
发送文件到远端服务器
- 在远端服务器执行
rz
命令 - 本地选择文件传输
- 等待传输指示消失
接收远端服务器的文件
- 在远端服务器执行
sz filename1 filename2 … filenameN
命令 - 本地选择目录保存
- 等待传输指示消失
二、 悬浮窗口
首先我们来解决第一个问题:如何在任何界面呼入呼出 iTerm2 的窗口,并且悬浮在界面的顶部?
相信每个人都会有这样的使用场景:你正在全屏浏览器浏览网页,或者正在全屏编辑器写代码写文章之类的,突然想到了什么,或发现了什么,想快速打开终端,执行一两条命令(诸如打开文件、启动服务等),然后关闭。
对于这种情况,我们的愿景是可以通过快捷键迅速打开终端,然后用同样的快捷键迅速隐藏它,直到我需要时再次来到我面前。至于实现方式,虽繁琐但并不复杂,下面跟着我的步骤走:
创建新的 Profile
首先打开 Preperence → Profiles
,新建一个 Profiles
,取名 HotKey Window
。
背景透明与模糊设置
在Preperence → Profiles → Window → Window Appearance
进行设置
窗口风格配置
在Preperence → Profiles → Window → Settings for New Windows
进行设置
解释一下这几个参数:
- Full-Width Top of Screen : 这个很好理解,让终端显示在屏幕顶部,并占满整个宽度。
- Current Spce : 表示只显示在当前的工作空间,举个例子吧,假设你在当前屏幕打开了终端,你切换到下一个屏幕时它就不会跟到下一个屏幕。
- Screen width Cursor : 这个和上面的参数搭配,用来判定哪个屏幕属于当前的工作空间,表示你的鼠标在哪,哪里就是当前的工作空间。
设置 HotKey
在 Preperence → Profiles → Keys → HotKey Window
进行设置
选中 A hotkey opens a dedicated window with this profile
,表示此 profile 可以通过快捷键快速打开快速关闭。
然后点击 Configure Hotkey Window
,设置快捷键。
为了只使用一个键,可以使用功能键作为快捷键,我选择的是 F12
。
这里需要说明一点,功能键只适用于没有 Touch Bar
的 MacBook,对于新款的带 Touch Bar
的 MacBook,只能使用其他的组合快捷键,比如 Cmd+P
什么的。至于原因嘛,那是因为新款 MacBook 的功能键只能显示在 Touch Bar
上,你只能分别针对应用打开功能键,也就是说,你只有打开这个应用时,才会在 Touch Bar 上显示功能键,可是我们要的是在任何地方通过快捷键呼出终端,我不能先打开终端,再使用功能键打开终端。。。这是个先有鸡还是先有蛋的问题,所以还是选其他快捷键吧。
对于没有 Touch Bar
的 MacBook,我们可以这么设置,首先打开系统偏好设置,选择键盘设置。
选中 将 F1、F2 等键用作标准功能键。
这样你就可以通过 F12
来快速打开关闭终端了。
请注意:打开了标准功能键之后,以后再想使用功能键的特殊功能,比如F11
减小音量、F12
增大音量,必须得和Fn
键组合使用,例如增大音量就是Fn+F12
。
对于新款带 Touch Bar
的 MacBook,可以这么设置,首先打开系统偏好设置,选择键盘设置。
"按下 Fn 键以" 选择 “显示F1、F2等键”:
这样就可以使用 Fn+F12
来快速打开终端。
同时在 快捷键 → 功能键
设置中添加 iTerm 应用,这样打开 iTerm2 窗口时就可以直接使用 F12
键来关闭窗口。
到目前为止,悬浮终端的 Profile
就配置完成了,你可以按下你设置的HotKey
来方便快速打开和隐藏命令行。如果你想新建标签页也用这个 Profile,可以将 Hotkey Window
设为默认的 Profile:
下面我们来做一些优化工作。