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,再也不用打开多余的窗口了,桌面变成更整洁舒畅,查看各个命令的输出也更加方便直接。