目录
1.Tmux 是什么
1.1 会话与进程
会话(session):用户与计算机之间的一种临时交互。
会话的核心特征在于窗口与其内启动的进程紧密相连。开启窗口意味着会话的开始;关闭窗口则标志着会话的结束,随之,会话中的进程不论是否执行完毕都将被终止。
以SSH 远程登录计算机为例,若在执行命令时网络突然中断,重新登录后将无法找回先前的命令。这是因为之前的SSH会话已终止,其进程也随之消失。
为了克服这一挑战,可以实现会话与窗口的解绑:即使窗口关闭,会话也不会结束,而是继续运行,待需要时可重新绑定至其他窗口。
1.2 Tmux 的作用
Tmux:一个实现会话与窗口解绑的工具。
- (1)支持在单一窗口内同时访问多个会话,适用于并行运行多个命令行程序。
- (2)允许新窗口接入已存在会话。
- (3)支持每个会话拥有多个连接窗口,便于多人实时共享会话。
- (4)提供灵活的窗口垂直和水平拆分功能。
2.基本用法
2.1 Tmux 安装
1 | # 对于 Ubuntu 或 Debian |
2.2 Tmux 启动与退出
安装完成后,通过输入 tmux
命令即可进入 Tmux 窗口。
1 | tmux |
此命令将打开 Tmux 窗口,并在底部展示一个状态栏。状态栏左侧显示窗口信息(编号和名称),右侧显示系统信息。
按下 Ctrl+d
或输入 exit
命令即可退出 Tmux 窗口。
1 | exit |
2.3 前缀键
Tmux 窗口支持众多快捷键,所有快捷键均需通过前缀键激活。默认前缀键为 Ctrl+b
,即首先按下 Ctrl+b
,随后输入的快捷键才有效。
例如,显示帮助信息的快捷键是 Ctrl+b ?
。在 Tmux 窗口中,先按 Ctrl+b
,再按 ?
即可展示帮助信息。
按 ESC
键或 q
键退出帮助界面。
3.会话管理
3.1 新建会话
当首个 Tmux 窗口启动时,其编号为 0,随后启动的窗口编号依次增加。相应的会话也被称作 0 号会话、1 号会话等。
为了便于识别,推荐为会话命名:
1 | tmux new -s <session-name> |
以上命令新建一个带有指定名称的会话。
3.2 分离会话
在 Tmux 窗口中,通过按下 Ctrl+b d
或输入 tmux detach
命令可以实现当前会话与窗口的分离。
1 | tmux detach |
执行以上命令后,将退出当前 Tmux 窗口,但会话及其进程仍在后台运行。
使用 tmux ls
命令查看当前所有 Tmux 会话:
1 | tmux ls |
3.3 接入会话
tmux attach
命令允许重新接入某个已存在的会话。
-
使用会话编号接入:
1
tmux attach -t 0
-
使用会话名称接入:
1
tmux attach -t <session-name>
3.4 杀死会话
tmux kill-session
命令用于终止指定会话。
-
使用会话编号杀死:
1
tmux kill-session -t 0
-
使用会话名称杀死:
1
tmux kill-session -t <session-name>
3.5 切换会话
tmux switch
命令用于切换到另一个会话。
-
使用会话编号切换:
1
tmux switch -t 0
-
使用会话名称切换:
1
tmux switch -t <session-name>
3.6 重命名会话
tmux rename-session
命令允许为会话设置新名称。
1 | tmux rename-session -t 0 <new-name> |
以上命令将 0 号会话重命名。
3.7 会话快捷键
以下是一些与会话管理相关的快捷键操作:
Ctrl+b d
:分离当前会话。Ctrl+b s
:列出所有会话。Ctrl+b $
:重命名当前会话。
4.最简操作流程
综上所述,以下是 Tmux 的最简操作流程:
- 新建会话:
tmux new -s my_session
。 - 在 Tmux 窗口运行所需的程序。
- 按下快捷键
Ctrl+b d
将会话分离。 - 下次使用时,重新连接到会话:
tmux attach-session -t my_session
。
5.窗格操作
Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。
5.1 划分窗格
- 划分上下两个窗格:
tmux split-window
- 划分左右两个窗格:
tmux split-window -h
5.2 移动光标
- 光标切换到上方窗格:
tmux select-pane -U
- 光标切换到下方窗格:
tmux select-pane -D
- 光标切换到左边窗格:
tmux select-pane -L
- 光标切换到右边窗格:
tmux select-pane -R
5.3 交换窗格位置
- 当前窗格上移:
tmux swap-pane -U
- 当前窗格下移:
tmux swap-pane -D
5.4 窗格快捷键
Ctrl+b %
:划分左右两个窗格。Ctrl+b "
:划分上下两个窗格。Ctrl+b <arrow key>
:光标切换到其他窗格。<arrow key>
指向要切换到的窗格方向键。Ctrl+b ;
:光标切换到上一个窗格。Ctrl+b o
:光标切换到下一个窗格。Ctrl+b {
和Ctrl+b }
:当前窗格与相邻窗格交换位置。Ctrl+b Ctrl+o
和Ctrl+b Alt+o
:所有窗格顺序调整。Ctrl+b x
:关闭当前窗格。Ctrl+b !
:将当前窗格拆分为一个独立窗口。Ctrl+b z
:当前窗格全屏显示,再按恢复。Ctrl+b Ctrl+<arrow key>
:调整窗格大小。Ctrl+b q
:显示窗格编号。
6.窗口管理
除了划分窗格,Tmux 也允许新建多个窗口。
6.1 新建窗口
- 新建窗口:
tmux new-window
- 新建指定名称的窗口:
tmux new-window -n <window-name>
6.2 切换窗口
- 切换到指定编号的窗口:
tmux select-window -t <window-number>
- 切换到指定名称的窗口:
tmux select-window -t <window-name>
6.3 重命名窗口
- 为当前窗口起名或重命名:
tmux rename-window <new-name>
6.4 窗口快捷键
Ctrl+b c
:创建新窗口。Ctrl+b p
和Ctrl+b n
:切换窗口。Ctrl+b <number>
:切换到指定编号的窗口。Ctrl+b w
:从列表中选择窗口。Ctrl+b ,
:窗口重命名。
7.其他命令
以下是一些额外的 Tmux 命令:
- 列出所有快捷键:
tmux list-keys
- 列出所有 Tmux 命令及参数:
tmux list-commands
- 列出当前所有 Tmux 会话信息:
tmux info
- 重新加载 Tmux 配置:
tmux source-file ~/.tmux.conf
8.演示过程
我们输入 tmux new -s work
创建一个 session:
可以看到后台已经启动了 tmux 的 server 进程,因此即使关闭你的 terminal,session 仍然在运行:
输入 prefix + d
可以分离 session(注意:一定要松开 prefix
再按 d
):
如果想要重新连接已分离的 session,可以输入 tmux attach -t [session-name]
。在上例中,session 名为 work
,因此指令为 tmux attach -t work
:
若需重新命名 session,可以按下 prefix + $
:
要查看所有 session,可以按下 prefix + s
:
或者使用 tmux ls
查看所有 session:
一个 session 可以包含多个窗口。创建 session 时会默认生成一个窗口,使用 prefix + c
可以创建新窗口(每个窗口前面有编号,当前窗口标记为 *
,上一个窗口标记为 -
):
调整窗口:
prefix + p
:切换到上一个窗口prefix + n
:切换到下一个窗口prefix + <number>
:跳转到指定编号的窗口
按下 prefix + w
可以显示所有窗口列表:
按下 prefix + ,
可以为窗口命名,左下角会显示更改后的名字:
在窗口中可以进行分割,按下 prefix + "
可以水平分割,按下 prefix + %
可以垂直分割:
移动窗格:
prefix + <方向键>
:按方向键移动prefix + ;
:切换到上一个窗格prefix + o
:切换到下一个窗格
要关闭当前窗格,可以按下 prefix + x
:
将窗格转换为窗口(pane -> window):按下 prefix + !
,可以看到窗口数量增加:
要最大化窗格,可以按下 prefix + z
,左下角会提示已最大化,再按一次可以恢复:
附录
表一:系统指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
? |
显示快捷键帮助文档 |
Ctrl+b |
d |
断开当前会话 |
Ctrl+b |
D |
选择要断开的会话 |
Ctrl+b |
Ctrl+z |
挂起当前会话 |
Ctrl+b |
r |
强制重载当前会话 |
Ctrl+b |
s |
显示会话列表用于选择并切换 |
Ctrl+b |
: |
进入命令行模式,此时可直接输入命令 |
Ctrl+b |
[ |
进入复制模式,按q 退出 |
Ctrl+b |
] |
粘贴复制模式中复制的文本 |
Ctrl+b |
~ |
列出提示信息缓存 |
表二:窗口(Window)指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
c |
新建窗口 |
Ctrl+b |
& |
关闭当前窗口(关闭前需输入y or n 确认) |
Ctrl+b |
0~9 |
切换到指定窗口 |
Ctrl+b |
p |
切换到上一窗口 |
Ctrl+b |
n |
切换到下一窗口 |
Ctrl+b |
w |
打开窗口列表,用于选择切换窗口 |
Ctrl+b |
, |
重命名当前窗口 |
Ctrl+b |
. |
修改当前窗口编号(适用于窗口重新排序) |
Ctrl+b |
f |
快速定位到窗口(输入关键字匹配窗口名称) |
表三:面板(Pane)指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b |
" |
当前面板上下一分为二,下` |
Ctrl+b |
Ctrl+方向键 |
以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖) |
Ctrl+b |
t |
显示时钟 |