放假的电话

为什么要用tmux

讲tmux配置、优化的太多了,这里不再赘述。在配置之前,一个关键的问题就是,我为什么要用tmux?其实之前就看过跟tmux相关的文章、教程,但是都没有往心里去。当时简单地以为tmux就是一个把terminal窗口分成不同pane的工具。你说我iterm2有快捷键,把窗口分分pane,开开新window、新tab,不是简简单单的事情,我要搞个tmux么?快捷键还那么复杂。

就是因为这个原因,或者说我平时对terminal的简单应用,让我忽略了tmux。直到最近由于看production机器上的log文件实在是太麻烦了,我才又想到了tmux。这次仔细看看tmux,才发现它很好地解决了我的痛点。

举一个最简单的🌰:如果一台server上我有3个log文件要看,我怎么办?我先ssh上去,打开一个文件。然后,split一下iterm2的窗口,变成3个pane。蛋疼的是,即使一开始ssh过了,新的pane也需要再次ssh。这么一来,就多了2步ssh的操作。虽然说不是很麻烦,还能接受,但是production里的机器可不止一台,要看所有log,需要ssh多少次?而且,每次ssh上去,我还得找到要看的log文件打开,也要打不少字。

这里,tmux就能帮上不少忙。首先,tmux是可以在server上安装的,我ssh到server上,输入tmux,进入一个新的tmux session,之后,再分若干个pane出来,是不需要重新ssh的。每个pane里,我可以再打开自己需要看的文件。跟上面的痛点相比,减少了我需要ssh的次数。

其次,不得不提一下tmux最重要的特性:session。session可以保存命令的执行状况,简单得说,每个session相当于一个独立的terminal进程,并且是可以保存、放入后台并且之后重新连接的。

刚才说过每次在server上打开好几个log文件也是件很麻烦的事情。不过有了tmux,我第一次在tmux的session里打开了那些文件后,要做的就是detach这个session(退出,而不是把session kill掉)。那么下次再ssh到这个server时,就可以重新attach到这个session上,一步操作,恢复之前打开的所有文件!

有了tmux,我查看log的操作被大大简化了。原来3个server,每个server上3个log文件,我需要把iterm2分成9个pane,ssh9次,打开文件9次。现在,我只要第一次在每个server上开一个tmux的seesion并打开3个log文件,之后,我只要把iterm2分成3个pane,ssh3次,attach 3次到3个之前保留的session上,就能看到9个文件了!27->9,整整少了18个操作!

9个操作已经不多了,但是我要的是更加方便!这个愿望,可以通过tmuxinator这个大杀器实现!tmuxinator是一个tmux session的管理工具。简单得说,我可以通过配置文件,配置一个tmux session的模板,包括window,每个window里的pane,pane的布局,启动时要运行的一些命令,每个pane里各自需要的命令等等。我有一个叫prod-log的配置,大致如下:

1
2
3
4
5
6
7
8
windows:
- logs:
layout: even-horizontal
synchronize: after
panes:
- ssh server1
- ssh server2
- ssh server3

这个配置,会自动打开3个pane,分别ssh到3台机器上。并且我设置了synchronize: after,启动后3个pane里接收相同的键盘操作。我只要输一次tmux attach命令,就可以让3个pane里的tmux都attach到之前保存的session里!

最后,我还给一些常用的tmux,tmuxinator命令设置了alias,再一次减少打字数量。例如:

1
2
3
4
alias tkill="tmux kill-session -t"
alias tls="tmux ls"
alias tatt="tmux attach -t"
alias ts="tmuxinator start"

现在,ts prod-logtmux attach -t 0,之前的9步操作2步搞定!

希望看过这篇文章,你也决定用tmux。