tmux 可以在一个终端中管理多个窗口和分屏,还能在 SSH 断开后继续保持任务运行。
它的默认前缀键是 Ctrl+b。大多数快捷键都要分两步按:
- 按下
Ctrl+b; - 松开两个键;
- 再按动作键。
例如,新建窗口不是同时按
Ctrl+b+c,而是先按Ctrl+b,松开后再按c。
最需要记住的快捷键
|
|
恢复刚才退出的会话:
|
|
安装并确认 tmux 可用
Debian、Ubuntu:
|
|
Fedora:
|
|
Arch Linux:
|
|
macOS 使用 Homebrew:
|
|
安装后查看版本:
|
|
终端返回类似 tmux 3.x 的信息,说明命令已经进入当前环境的 PATH。
创建、退出和恢复会话
直接启动匿名会话:
|
|
更推荐创建命名会话:
|
|
work 可以换成项目名、服务器名或任务名。
临时离开时按 Ctrl+b,松开后按 d。这个操作叫 detach,只让当前终端与会话分离。会话中的编译、下载、日志监控和脚本仍会运行。
如果在面板里执行 exit,则会关闭当前 shell。最后一个面板退出后,相应窗口和会话也可能结束。
| 操作 | 命令或快捷键 |
|---|---|
| 新建命名会话 | tmux new -s 会话名 |
| 查看会话 | tmux ls |
| 恢复最近会话 | tmux attach |
| 恢复指定会话 | tmux attach -t 会话名 |
| 临时退出 | Ctrl+b,再按 d |
| 重命名当前会话 | Ctrl+b,再按 $ |
| 删除指定会话 | tmux kill-session -t 会话名 |
存在多个会话时,tmux attach 可能提示目标不明确。先查看名称: |
|
|
再恢复指定会话:
|
|
简写命令也有效:
|
|
窗口快捷键
窗口类似浏览器标签页。一个会话可以有多个窗口,每个窗口又能包含多个面板。
| 操作 | 快捷键 |
|---|---|
| 新建窗口 | Ctrl+b,再按 c |
| 下一个窗口 | Ctrl+b,再按 n |
| 上一个窗口 | Ctrl+b,再按 p |
| 最近使用的窗口 | Ctrl+b,再按 l |
| 切换到窗口 0–9 | Ctrl+b,再按数字键 |
| 查看窗口列表 | Ctrl+b,再按 w |
| 重命名窗口 | Ctrl+b,再按 , |
| 关闭当前窗口 | Ctrl+b,再按 & |
关闭窗口时 tmux 会要求确认。输入 y 后,窗口中的所有面板和程序都会结束,不要把 & 和 detach 使用的 d 混淆。 |
|
窗口编号超过 9 时,使用 Ctrl+b w 从列表中选择。也可以按 Ctrl+b ',输入窗口编号后按 Enter。 |
分屏与面板操作
面板是同一个窗口中的独立终端区域。
| 操作 | 快捷键 |
|---|---|
| 左右分屏 | Ctrl+b,再按 % |
| 上下分屏 | Ctrl+b,再按 " |
| 切换面板 | Ctrl+b,再按方向键 |
| 切换到下一个面板 | Ctrl+b,再按 o |
| 显示面板编号 | Ctrl+b,再按 q |
| 当前面板全屏或恢复 | Ctrl+b,再按 z |
| 关闭当前面板 | Ctrl+b,再按 x |
| 轮换预设布局 | Ctrl+b,再按空格 |
按 Ctrl+b q 后,每个面板会短暂显示编号。编号仍在屏幕上时按对应数字,可以直接跳转。 |
|
Ctrl+b z 只改变显示范围,不会删除其他面板;再次执行即可恢复原布局。 |
调整面板大小
常用操作是先按 Ctrl+b,再按住 Ctrl 并连续按方向键。若终端截获组合键,可以使用 tmux 命令。
先按 Ctrl+b :,再输入:
|
|
L、R、U、D 分别表示左、右、上、下,数字表示调整的单元数量。
按百分比设置当前面板宽度或高度:
|
|
滚动查看历史输出
普通终端的滚轮有时无法直接滚动 tmux 历史。先进入复制模式:
|
|
| 操作 | 按键 |
|---|---|
| 逐行移动 | 方向键 |
| 向上翻页 | PageUp |
| 向下翻页 | PageDown |
| 跳到顶部 | g,需使用 vi 模式 |
| 跳到底部 | G,需使用 vi 模式 |
| 搜索 | /,需使用 vi 模式 |
| 退出复制模式 | q 或 Esc |
如果 g、G 和 / 的行为不同,通常是当前使用 emacs 风格按键。可在 ~/.tmux.conf 中启用 vi 模式: |
|
|
复制和粘贴文本
使用 vi 模式时,常见流程如下:
- 按
Ctrl+b [进入复制模式; - 移动到起点;
- 按空格开始选择;
- 移动到终点;
- 按 Enter 复制到 tmux 缓冲区;
- 按
Ctrl+b ]粘贴。 不同版本或自定义配置可能使用v开始选择、y完成复制。按Ctrl+b ?可以查看当前真实绑定。 查看和保存 tmux 缓冲区:
|
|
开启鼠标操作
希望用鼠标选择面板、调整边界和滚动时,在 ~/.tmux.conf 中加入:
|
|
重新载入配置:
|
|
开启鼠标后,滚轮通常会自动进入复制模式。某些终端中鼠标选择会被 tmux 接管;需要使用终端原生选择时,可以尝试按住 Shift 再拖动。
一份够用的基础配置
编辑 ~/.tmux.conf:
|
|
保存后执行:
|
|
也可以按 Ctrl+b :,输入 source-file ~/.tmux.conf。配置有语法错误时,tmux 会指出行号;先注释最近新增的配置再重试,不必删除整个文件。
修改默认前缀键
如果 Ctrl+b 与编辑器快捷键冲突,可以改成 Ctrl+a:
|
|
加载后,本文所有 Ctrl+b 操作都要替换为 Ctrl+a。最后一行用于把前缀发送给嵌套 tmux。
SSH 断开后恢复任务
远程运行长任务时,可以按以下流程操作:
|
|
需要离开时按 Ctrl+b d,再退出 SSH。网络意外断开时,会话通常也会继续存在。
重新连接后执行:
|
|
tmux 只能保存终端会话,不能让已经报错退出的程序自动复活。重要任务仍应保存日志:
|
|
常见错误与处理
no server running
执行 tmux ls 出现 no server running on /tmp/tmux-...,表示当前用户没有正在运行的 tmux server。重新创建会话即可:
|
|
sessions should be nested with care
这表示当前 shell 已在 tmux 中,又执行了 tmux。先检查:
|
|
有输出时,优先按 Ctrl+b c 新建窗口,或用以下命令切换会话:
|
|
attach 后画面尺寸不正常
同一会话连接了尺寸不同的终端时,显示区域可能受较小客户端影响。可在恢复时断开其他客户端:
|
|
查看现有客户端:
|
|
快捷键没有反应
依次检查:
- 是否先按前缀并松开;
- 前缀是否已在配置中修改;
- 终端或远程桌面是否截获组合键;
- 是否处于嵌套 tmux;
- 当前绑定是否被插件覆盖。 显示所有真实绑定:
|
|
从 shell 查询分屏绑定:
|
|
误关闭面板或会话
tmux 没有通用的撤销关闭功能。关闭前应确认没有未保存的编辑器、交互任务或未写入文件的输出。使用 tee 保存日志,可以降低误关面板后的损失。
安全关闭与清理
只结束一个会话:
|
|
保留 work,结束其他会话:
|
|
结束当前用户的整个 tmux server:
|
|
kill-server 会关闭该 server 管理的全部会话及其中的进程。执行前先运行 tmux ls,确认没有仍需保留的任务。
精确指定会话、窗口和面板
tmux 命令经常使用 -t 指定目标。完整目标格式是:
|
|
例如,work:1.2 表示 work 会话中的窗口 1、面板 2。
查看当前目标:
|
|
列出所有窗口:
|
|
列出所有面板及其当前命令:
|
|
这种写法适合在多个会话之间排查任务位置,也适合脚本只操作指定面板,避免误关其他终端。
目标可以省略部分字段。当前会话中的窗口 2 可写成 :2,当前窗口中的面板 1 可写成 .1。自动化脚本中建议使用完整目标,减少当前焦点变化带来的歧义。
从 Shell 创建窗口和分屏
除了键盘快捷键,也可以直接调用 tmux 命令。向 work 会话新建窗口:
|
|
在窗口中建立左右分屏:
|
|
建立上下分屏:
|
|
创建面板时直接运行命令:
|
|
带命令的面板会在命令结束后关闭。如果希望查看最后输出,可让 shell 在命令后保留:
|
|
远程生产环境中不要把需要密码的命令直接写进 Shell 历史。使用现有认证机制,并限制日志面板只读取必要文件。
向后台会话发送命令
send-keys 可以向指定面板模拟键盘输入:
|
|
向正在运行的前台程序发送 Ctrl+c:
|
|
发送命令前先确认面板当前运行的程序:
|
|
如果输出是编辑器、数据库客户端或其他交互程序,直接发送文本可能造成数据修改。自动化时应为任务准备专用会话和固定窗口名,不要依赖临时编号。
创建后台会话并启动任务:
|
|
检查会话是否存在:
|
|
返回码为 0 表示目标会话存在。它只能说明 tmux 会话还在,不能证明脚本成功,应同时检查退出状态、日志或输出文件。
捕获面板输出用于排错
不进入会话也可以读取面板历史:
|
|
只获取最近 100 行:
|
|
保存到文件:
|
|
capture-pane 读取的是 tmux 保存的屏幕和历史内容。若程序输出超过 history-limit,更早内容已经无法恢复。
需要长期审计的任务应让程序自身写日志,而不是只依赖 tmux 历史。日志中若包含令牌、连接字符串或用户数据,还要设置合适的文件权限和保留周期。
检查会话是否仍有客户端
下面的命令可以查看哪些终端仍连接着 tmux:
|
|
如果维护窗口前需要独占会话,先通知其他使用者,再决定是否使用 attach -d 断开其客户端。
客户端列表为空不代表任务已经结束,只表示当前没有终端正在显示该会话。
常见问题
detach 会停止程序吗?
不会。Ctrl+b d 只断开客户端。程序是否继续运行,还取决于服务器是否关机、重启或由其他机制终止进程。
为什么 Ctrl+b % 输入了百分号?
通常是没有触发前缀,或把按键按成了同时组合。先按 Ctrl+b 并全部松开,再输入 %;多数键盘布局需要按 Shift+5。
为什么双引号不好按?
先触发前缀,再使用当前键盘布局对应的双引号组合,通常是 Shift+'。也可以在配置中重新绑定一个更方便的分屏键。
如何确认当前会话、窗口和面板?
|
|
输出依次是会话名、窗口编号和面板编号。
快速回顾
tmux 的结构分为三层:会话保存整套工作环境,窗口区分任务,面板负责分屏。
日常流程是用 tmux new -s 名称 创建会话,通过窗口和分屏组织任务,按 Ctrl+b d 安全离开,再用 tmux attach -t 名称 恢复。
忘记快捷键时按 Ctrl+b ? 查看当前配置中的真实绑定,比死记完整列表更可靠。