超好用的会话管理工具Tmux

  作为Linux服务端程序资深开发者,归根结底不得不承认终端命令行的工作环境反而是最具有效率的。在Unix-like阵营中会话终端工具有老牌的screen和新秀tmux,而通常来说99%的Linux用户都是折腾帝(本人之前也不例外),而tmux通过配置可以得到十分酷炫的界面效果,因此普及率上tmux要比screen流行的多。
  现在的情况是,基本都用自己的rmbp远程连接多个服务器工作,iTerm标签一开多有时候自己都凌乱了,所以觉得配置完善一个tmux工作环境还是会很受用的。通过tmux,你可以在一个terminal window的环境下创建多个独立的window,而每一个widow中又可以有一个或者通过split切分成多个pane,在每个pane中运行着一个独立的terminal实例,里面躺着一个独立的shell,这样就可以让你在这个框架下各个pane中独立做对应的任何工作了。在实现上,tmux会将这些window和pane归纳到一个session当中,用户可以在任意时刻detach这个会话,而这个detach无论是你主动操作的,还是因为网络等因素被动触发的,总之只要这个tmux进程还活着,那么其上面所有的window、pane及其管理运行的任务都会被保留,而在后续任何时刻都可以随时再attach到这个会话上面去,而所有的工作环境立马都会立马全部恢复。
  实际中,tmux工具帮我们解决的痛点有:(1) 在终端关闭的时候session仍然安全的被保留着,那么session中的任务得以持续运行,就可以让程序保持终端而不需要通过&将服务作为后台进程去执行了;(2) tmux也可以看做是一个会话服务端,然后你在任何地方只要登录到对应的机器,再attach到对应的会话就立马恢复之前的工作环境,这样就可以安心的在家加班了;(3) 管理多个会session可以方便的切换,就像生活一个号工作一个号一样的道理,同样可以把工作内容组织成多个逻辑的session,然后方便的切换工作角色。

  tmux工具需要熟悉的东西有两个:操作快捷键配置文件,主题也就围绕着tmux的三个重要组件展开:Pane、Window、Session。
  tmux的所有操作都需要一个prefix key,默认是Ctrl-b,而几乎所有定制化tmux的都介绍将它修改成了Ctrl-a,因为Ctrl和b两个靠的太远了,基本没法一只手去独立完成,但是Ctrl-a又和shell的快捷键冲突……。既然Ctrl-a已经熟悉了,也就不跟风修改prefix key了,对现有工作影响越小越好。
  tmux的默认配置文件为~/.tmux.conf,配置的过程肯定会反复折腾,所以首先绑定r来强制tmux重新加载配置文件。

1
2
unbind r
bind r source-file ~/.tmux.conf

Pane
  可以在一个window中通过split创建多个pane,然后每个pane中运行独立的任务,很多人都拿他来炫酷,屏幕越大pane越多显摆的越厉害!默认的切分键比较奇怪,可以绑定更合直观的Ctrl-b -Ctrl-b |来水平和垂直切分window。通过Ctrl-b配合上下左右方向键可以在多个pane中切换,不过完全可以打开tmux的mouse mode功能,通过鼠标和触摸板切换起来可能会更方便,而且开启鼠标模式后还可以通过鼠标拖动的方式改变pane的相对大小。

Ctrl-b - 水平切分pane
Ctrl-b | 垂直切分pane
Ctrl-b 切换焦点到指定的pane
Ctrl-d 关闭pane,也可以在shell中输入exit,当shell退出的时候当前的pane会自动关闭

  修改配置文件实现上面的功能

1
2
3
4
5
6
7
8
# enable mouse mode
set -g mouse on
# split panes using | and -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %

  关于在tmux下面需要复制和粘贴,如果你用的是iTerm的话那就太幸运了,只需要按照下面的方式进行设置,当开启mouse mode的时候,任何选中的内容就会被自动添加进系统的剪贴板了,所以连Alt-C都省了。
iterm

Window
  在一个session中可以创建多个window,同时每个窗口都有一个数字标号,他们按照一定的顺序展示在状态栏上。

Ctrl-b c 创建一个window,同时会在状态栏增加一个窗口列表
Ctrl-b p/n 向前或者向后切换当前活动的窗口
Ctrl-b [n] 通过指定数字的方式可以快速的切换到某个窗口
Ctrl-b , 重新命名当前的window

  一个windows通常会执行特定的任务,给窗口一个有意义的名字显然是很有意义的,否则想要在这么多数字中快速切换到一个指定的窗口是很困难的。通过Ctrl-b ,可以给当前的窗口重命名,不过默认tmux会在执行命令的时候修改之,因此需要在配置文件中关闭这个特性(起个名字辣么的困难,怎么能让你说改就改)。

1
2
# don't rename windows automatically
set-option -g allow-rename off

Session
  在任何情况下,都可以执行Ctrl-b d来detach当前的session,这个时候就会回退到启动或者attach到tmux的那个shell中去了。

1
2
3
4
tmux ls 查看当前系统所有的tmux会话
tmux new -s [name] 创建一个新的session,并指定名字
tmux attach -t [n] session可以用数字编号,通过-t可以指定attach到哪个session
tmux rename-session -t [n] [name] 将制定数字编号n的session命名为name

  默认情况下,session都是使用数字来命令的,如果想给他们一个更有意义的名字,可以通过上面的rename-session方式对其进行改名操作。

  最后,抄了别人的一个配置文件算是做了一个界面上的美化,不敢独享完全奉上
tmux
  然后,瞬间觉得自己的工作界面整洁多了,而且随时随地可以attach立马恢复工作环境!
tmux2

本文完!

参考