tmux:终端复用利器

什么是终端复用(terminal multiplexer)?终端复用可以让你在同一个终端同时打开不同的程序并观察输出,同时允许你方便地退出和恢复这些程序的使用。
使用tmux可以达到终端复用的目的,下图为tmux在同一个终端窗口中同时打开不同程序的一个示例:

安装

对于 Mac OS,使用简单的 brew命令即可完成tmux安装:

brew install tmux

Mac下如何安装的详细教程可以参考这个链接:Mac安装tmux教程

基本概念

在tmux中,session包括一个或者多个window,window包括一个或者多个pane,这三者的关系如下图所示:

  • Session:tmux使用session来区分不同的工作环境,例如对于一个程序员来说,可以区分使用work session和play session,work session上班工作时使用,play session在家使用。
  • Window:这个可以以Mac系统的虚拟桌面的来类比,一个window就相当一个虚拟桌面,记住这点就行了。
  • Pane:一个pane对应一个视图,在不同的pane中执行不同的命令并进行显示。可以说pane就是实现终端复用最直接的载体。

举个例子来说明这三者的关系:假设我们有一个sysadmin的session,该session下面有一个log的window,为了查看不同的日志,我们创建了三个不同的pane:access log pane,error log pane以及syslog log pane。

这个就是tmux需要掌握的三个概念了,上面的文字描述也许还有些抽象,不过不用担心,tmux其实使用起来很简单的,使用几次后,上面的概念就都理解了。

基本使用

使用简单的tmux命令,可以创建一个默认的session:

tmux

然后进入下面的界面:

底部的状态栏是tmux的一个重要组成部分。状态栏左边是tmux的session,window以及pane信息,状态栏右边则是用户名称和日期等信息。tmux状态栏也是可以定制的,如何定制不在本文的描述范围,具体可以参考网上资料。

Pane命令

创建pane

上面我们使用tmux命令创建了一个session,也默认创建一个window以及window下的一个pane。只有一个pane还没法达到终端复用的目的,为此我们还需要创建额外的pane。

在tmux中,所有的命令都需要一个前缀。默认地,tmux使用control + b(下面以C - b表示)来作用命令的前缀。
为创建一个pane,可以使用命令C - b %。这个命令的意思是,先按下control键和b键,松开后,再按下%键。

C - b %创建一个水平分割的pane:

如果需要创建一个垂直分割的pane,可以使用命令C - b "

切换pane

创建不同的pane后,如果需要激活不同的pane,可以使用命令C - b <上下左右箭头>,即先按下control键和b键,松开后,再按下箭头按键,选择不同的pane。

如果需要将当前pane全屏,可以使用命令C - b z,恢复则再操作一次C - b z,这个命令很实用。

关闭pane

如果需要关闭一个pane,可以在该pane输入exit命令。

pane的使用占据了tmux使用的大部分,不夸张地说,掌握了pane命令的使用就基本掌握tmux的使用,从而可以应对日常工作需要了。

Window命令

使用C - b c命令(按下control键和b键,松开后,再按下c键)创建一个window:

状态栏左侧出现了两个提示符0:1:,表示两个windows。
如果需要在不同的window进行切换,可以使用命令C - b <数字>来选择不同的window。

Session命令

使用C - b d命令可以退出一个session。虽然退出了某个session,但tmux仍然保持该session在后台运行,我们随时可以重新恢复该session的使用。
为了查看当前有哪些sessions,可以使用以下命令:

tmux ls

输出:

0: 1 windows (created Mon Apr 3 10:26:09 2017) [88x21]

为了重新进入原来的session,可以使用命令:

tmux attach -t 0

-t 0的含义是让tmux进入session 0。session 0是tmux默认创建的第一个session。

如果需要对session进行重命名,可以使用命令:

tmux rename-session -t 0 code

这时,session的名称已发生变化:

tmux ls
code: 1 windows (created Mon Apr 3 10:26:09 2017) [88x21]

当然,也可以在创建时指定session的名称:

tmux new -s db

这样就创建一个名为db的session。

如果需要进入db的session,可以使用命令:

tmux attach -t db

小结

tmux可谓终端复用的利器。以前在使用terminal.app时,假设需要实现同时连接服务器和查看本机的信息时,就不得不打开两个终端窗口(使用iterm2会方便一点)。之从使用上了tmux,再也不用打开多余的窗口了,桌面变成更整洁舒畅,查看各个命令的输出也更加方便直接。

参考资料

  1. https://tmux.github.io
  2. http://harttle.com/2015/11/06/tmux-startup.html
  3. https://robots.thoughtbot.com/a-tmux-crash-course
  4. https://gist.github.com/simme/1297707
  5. https://danielmiessler.com/study/tmux/
  6. http://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/