什么是 tmux
?
tmux
一款终端窗口复用器(terminal multiplexer
),通过这个工具我们实现在单一窗口中创建并访问多个终端。同时 tmux
可以与创建的终端实现分离,并使它们在后台继续运行。我们在需要的时候可以重新连接这些后台运行的终端。
直接这样讲可能不太明确,下面描述一个场景来进一步说明。我们一般在使用 ssh
命令连接远程主机时,往往会获取到远程主机的一个终端窗口。我们可以在这个窗口中输入并运行命令,获取到返回结果。但是如果我们要执行一个持续执行的任务时,比如启动一个Spring Boot
我们会发现在退出ssh
后我们的任务也随之终止了,这明显不是我们想要的结果。
tmux
的诞生就是为了解决这个问题的。tmux
通过管理自己内部的子会话和窗口保证了当我们在 tmux
中执行的命令与当前ssh
的连接会话的生命周期无关。
上图可以看到,tmux
本质是相当于另起炉灶,我自己管理我自己的 session
。与当前 ssh
的连接 session
彻底脱离关系了。
tmux
的基本结构
tmux
的结构包括会话(session)
,窗口(window)
,窗格(pane)
三个部分。
会话
的本质是伪终端的集合,每个窗格表示一个伪终端,多个窗格展现在一个屏幕上,这一屏幕就叫窗口。
基本结构以及状态信息如下图所示:
在 tmux
中,你可以创建多个会话(session
),每个会话会默认创建一个窗口,而每个窗口(window
)又会默认创建一个窗格(pane
),每个窗格都对应一个伪终端用于执行命令。简单来讲可以把它们看成是分组的关系,每个组内可以有多个终端用来执行命令。而 tmux
基本的操作无非就是基于会话,窗口和窗格对终端进行管理。
tmux
基本操作
tmux
最基本的操作无非就是对会话,窗口,窗格等进行管理。包括创建,关闭,命令,连接,分离,选择等等。
一般的操作可以使用命令和快捷键两种方式操作,对于快捷键而言 tmux
这里与普通快捷键的触发方式还有所区别。
tmux
前缀键
对于 tmux
而言,与一般我们直接使用的快捷键有所区别的地方在于它设计了一个名为"前缀键"的快捷键唤醒方式。所有快捷键在触发之前,都要先使用前缀键(Ctrl+B)。
这里举个栗子,在 tmux
终端中显示帮助命令的快捷键是 (Ctrl+B+?)。
而对于该快捷键的触发方式是先按下 Ctrl+B ,然后松开 Ctrl+B (注意这里 Ctrl 和 B 按键都要松开),接着按下 ? 。
- 按下 Ctrl+B
- 松开 Ctrl+B
- 按下快捷键 ?
这里列举一些常用的快捷键:
按键 | 说明 |
---|---|
Ctrl + b d | 分离当前会话(离开终端但不停止当前命令) |
Ctrl + b s | 列出所有会话 |
Ctrl + b c | 创建新窗口 |
Ctrl + b n | 选择下一个窗口 |
Ctrl + b p | 选择前一个窗口 |
Ctrl + b l | 最近一次活跃窗口之间进行切换 |
Ctrl + b 0~9 | 选择几号矿口 |
Ctrl + b % | 划分左右两个窗格(pane) |
Ctrl + b " | 划分上下两个窗格(pane) |
Ctrl + b o | 光标切换到下一个窗格 |
Ctrl + b ; | 光标切换到上一个窗格 |
tmux
中还有另一类快捷键,它们的触发方式与上面有所区别。这里以 Ctrl+b Ctrl+o为例,需要先按下 Ctrl+b ,然后 Ctrl 按住不动, 松开 按键b,然后在按下按键 o。这样的快捷键触发方式在 Visual Studio Code
中很常见,但在 tmux
中只有几个快捷键的触发方式是这样子的。
- 按下Ctrl+b
- 松开 b
- 按下 o
按键 | 说明 |
---|---|
Ctrl + bCtrl + o | 所有窗格向前移动一个位置,第一个窗格变成最后一个窗格 |
Ctrl + bAlt + o | 所有窗格向后移动一个位置,最后一个窗格变成第一个窗格 |
而对于快捷键 Ctrl + bAlt + o ,则需要先按下 Ctrl + b ,然后松开 Ctrl + b ,接着按下 Alt + o 。
- 按下 Ctrl + b
- 松开 Ctrl + b
- 按下 Alt + o
总结
综上所述,tmux
的快捷键对于新手而言简直就是劝退级别的。但这并不能说明 tmux
本身不好用,一旦你使用的熟练了以后,你会发现它会给与你很大的帮助。以上就是我入坑 tmux
的一点笔记,希望能够帮助到你。