前言
一个适合后端仔排查问题的 iterm2 终端应该是这样的:
交代下为啥要开这么多个窗口,目前我们的应用是单机部署,一个服务部署在很多台 Linux 服务器上,构建分布式架构。(实际上服务器数量比这个更多:-O)
当然,我们也有日志监控平台,从 UI 上查询信息也很方便,但看过《鸟哥的 Linux 私房菜》后,感觉里面的命令十分有用,所以在排查问题时,更喜欢直接在终端进行信息统计(grep、awk、sed、wc 和正则表达式来一套),而且终端查询比网页查询更快,所以决定好好改造 iterm2 这个工具!
安装 zsh
iterm2 被称为 Mac 下最好用的终端软件,我觉得更重要的是它与 zsh 的结合,才让 iterm2 变得这么好用!
在 github 官网上(https://github.com/ohmyzsh/ohmyzsh),它是这么介绍它的:
oh my zsh 是一个开放源代码,社区驱动的框架,用于管理zsh配置。
一旦完成安装,你的终端 shell 一定会成为村里最靓的那个仔(不是的话你可以找我退款!)
在命令提示符中进行每次输入,您都将利用数百个功能强大的插件和精美的主题。在咖啡馆时,会有陌生人找你,问你:“太好了!你是不是天才?”
当然,上面的介绍是 「谷歌专业翻译+个人渣翻译」,就是为了突出 zsh 的强大,下面来看下具体如何配置吧
个性化打造
关于 「iTerm2 + Oh My Zsh 打造舒适终端体验」,这篇文章已经说得很全面了:https://segmentfault.com/a/1190000014992947
我按照上面的提示和步骤,一步一步往下实践,也成功完成了自己的 iterm2 改造:
来介绍下上面出现过的插件:
- PowerLine:
Powerline 是一个比较酷炫的状态栏工具,主要用于显示状态行和提示信息(上面蓝色的状态栏,当然还有其它主题,读者慢慢去发掘吧):https://github.com/powerline/powerline - PowerFonts:
它是一个字体库,用来替换字体,有些主题需要字体的配合,所以从中选择一款好看且兼容主题的字体吧:https://github.com/powerline/fonts - Solarized 配色:
原来的背景颜色是黑白的,看起来不够冲击力,所以可以从下面的调色板中,选择一款自己喜欢的配置:https://github.com/altercation/solarized - 选择主题样式:
Robby 主题是默认的主题。但经过博主推荐,我也喜欢上了使用 agnoster 主题。更多主题选择截图请参考该链接:https://github.com/ohmyzsh/ohmyzsh/wiki/Themes - highlighting:
它是一个代码高亮插件,例如输入正确的 git 命令,字体颜色显示的是黄色,而输入 gti 错误命令时,它将显示红色。它能提前检查我们输入的命令是否正确,让我们得到更快提示:https://github.com/zsh-users/zsh-syntax-highlighting - autosuggestions:
自动补全功能,它将会记录我们输入过的命令,用于建议和补全,例如效果图中,输入命令 cd ,按下方向右键,就能将命令补全,或者方向上下键,可以选择曾经定位过的路径:https://github.com/zsh-users/zsh-autosuggestions
由于博主写的图文并茂,每一步都有详细操作,我就不重复记录啦,建议大家好好看着步骤进行配置,也可以在每个步骤中选择自己喜欢的插件,做自己的个性化配置~
去掉提示前缀
在配置完后,终端的提示状态栏,存在着一长串前缀提示:xxxx@MacBook-Pro,它是每个人的电脑名字,如果遇到定位的路径长,加上主机名,一整行就放不下,于是找到了消除前缀的办法:
- 定位到主题文件:
打开「访达」,点击顶部状态栏「前往 -> 前往文件夹」(或者按快捷键 Shift + ⌘(command) + G),接着定位到该目录:~/.oh-my-zsh/themes/
例如我选择的是 agnoster 主题,于是打开了 agnoster.zsh-theme 文件,然后在最底部的添加了注释符:
加上 # 前缀后,注释掉上下文提示符,然后记得保存,接着打开新的终端窗口,就看不到长长的主机名啦~
免密登录
既然是远端 Linux 服务器,我们需要通过 SSH 进行登录,常用以下形式进行操作:
1 | ssh root@ip |
上面的 root 是登录角色,输入第一行后,如果是第一次登录,会提示你是否确认保存”公钥指纹”,点击回车后,就可以输入登录密码,然后登录。
使用公钥加密是为了 SSH 安全登录,具体加密算法和原理,可以查看该篇文章:SSH原理与运用(一):远程登录 http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html
可是每次都要进行这样重复的操作,输入 ssh 命令后还要继续输入密码,浪费了宝贵的三秒时间,于是找到了「免密登录」,输入指令后,不需要再输入密码。
原理
前面提到了“公钥”,ssh 提供了公钥登录,通过公钥登录可以不需要输入密码直接登录
公钥登录:
用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 shell,不再要求密码。
操作
- 客户端生成公钥
1 | ssh-keygen -t rsa |
上述语句输入后,中途会提示你是否需要输入私钥,个人开发时比较少用到,所以可以直接回车,最后会提示你成功生成公钥和私钥。
具体文件生成路径在 ~/.ssh
1 | ├── authorized_keys # 已认证的 key |
- 拷贝公钥到服务器
1 | ssh-copy-id -i id_rsa.pub root@ip |
在本地终端上,输入 ssh-copy-id 命令,将本地公钥拷贝到远端服务器上,成功拷贝后,你将会在远端服务器上的 ~/.ssh/authorized_keys 文件上看到自己电脑的公钥信息。
接着下一次登录,直接输入 ssh 命令,不需密码就能直接登录到服务器~
使用脚本登录
如果有小伙伴的登录方式跟我们相似,是通过跳板机,服务器信息是通过跳板机管理和访问的,这样无法直接 ssh 连上远端服务器,这时候可以考虑这种方式,在 iterm2 的 profiles 界面,保存登录命令,通过 profile 直接登录。
- 添加脚本
shell 脚本保存的目录可以自己设置,个人保存在了 /usr/local/bin/iterm2login.sh 文件下
1 | sudo vim /usr/local/bin/iterm2login.sh |
保存后记得赋予该脚本可执行权限(由于在个人电脑,直接赋予了 777 权限(#^.^#))
1 | chmod 777 /usr/local/bin/iterm2login.sh |
- 保存 profile 信息
在这里设置配置文件信息
左下角的 + 号,进行添加一个配置文件,接着在右边的 Command 栏,输入以下命令:
1 | /usr/local/bin/iterm2login.sh port root ip password |
字段名 | 含义 |
---|---|
port | 开放登录的端口号,常见的是 22 |
root | 登录者角色 |
ip | 远端服务器 ip |
password | 登录角色对应的密码 |
根据上述格式,可能输入如下:
1 | /usr/local/bin/iterm2login.sh 22 root 127.0.0.1 123456 |
输入完成后,可以通过快捷键:⌘(command) + O(英文 O),调出配置信息,然后选择刚才保存的配置,iterm2 调用脚本后,会自动帮我们输入密码,进行登录。
- 配置 Shortcut Key
在右侧,有一行 「Shortcut Keys」,点击下拉选择,可以选一个自己喜欢,而且与其它软件不冲突的快捷键。
例如我使用了 「⌘(command) + Shift + P」,这样可以快速的通过快捷键,直接就能进行登录~
rz、sz 上传下载
有时候想传点小工具到远端服务器,或者将服务器上的排查结果下载到本地进行分析,这时候就可以祭出我们的大杀器 rz、sz 脚本。
网上也有很多介绍和安装步骤,但是由于配置问题,弄了挺久,最后才成功配置,所以这次记录下自己的配置流程:
- 安装 lrzsz
HomeBrew 是 mac 上一个很好用的包管理软件,如果没安装的话,可以使用以下命令安装:
1 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
- 拷贝脚本文件
定位到 /usr/local/bin 目录
下载下面地址的两个文件并放入 :https://github.com/Vip-Augus/iterm2-tool
- 添加权限
1 | cd /usrlocal/bin |
- 添加触发器
定位到 Perferences -> Profiles -> Advanced -> Triggers -> Edit
左下角的 + 号,添加以下两个触发器:
1 | 一、SZ 命令 |
- 使用方式
1 | 上传本地文件到服务器,直接输入 rz 命令,将会弹出文件选择框 |
通过上面的配置方式,就可以愉快上传和下载文件了~
快捷键推荐
像一开始,在一个窗口打开过个 tab 页,是通过拖拽 tab 形式实现的:
接着,在命令发送到所有窗口,是通过广播命令实现的,广播命令也分很多种,例如全部 window 的面板,或者是当前 window 的面板,我使用的是当前 window:
快捷键:「⌘(command) + Shift + i」
使用广播命令,在一个窗口上输入指令,可以将它们发送到其它窗口上,实现多个服务器同时执行指令的功能。
还有更多快捷键,可以参考这篇文章:https://www.jianshu.com/p/a0249778872e
总结
在工作中,一点一点小工具的使用和积累,逐渐形成习惯,本次将 iterm2 这个工具常用的技巧记录下来,做个备忘,同时希望能帮到大家~
参考资料
- iTerm2 + Oh My Zsh 打造舒适终端体验 https://segmentfault.com/a/1190000014992947
- Linux配置免密码登录(原理 + 实践) https://blog.csdn.net/syani/article/details/52618840
- iterm2保存ssh登录密码快速登录 https://www.jianshu.com/p/55216ca70963
- Mac osx 下安装iTerm2,并使用rz sz上传下载(附homebrew配置) https://segmentfault.com/a/1190000012166969
- 让你的iTerm更Geek! https://www.jianshu.com/p/a0249778872e