如果你经常使用终端,尤其是需要 SSH 到服务器上工作,Tmux 是一个非常值得掌握的工具。
它解决的是一个很朴素的问题:不要让所有工作都绑死在一个终端窗口里。
有了 Tmux,你可以在一个终端里同时打开多个会话、多个窗口、多个分屏。更重要的是,即使本地网络断开、SSH 断线,Tmux 里的任务也不会马上消失。重新连回服务器后,只要 attach 回原来的会话,就可以继续工作。
这篇文章不追求覆盖所有高级配置,而是整理一套最常用、最容易形成肌肉记忆的 Tmux 用法。
Tmux 是什么
Tmux 的全称是 Terminal Multiplexer,也就是终端复用器。
你可以把它理解成终端里的“工作区管理器”:
- 会话(Session):一组长期存在的终端工作环境
- 窗口(Window):一个会话里的多个终端页面
- 面板(Pane):一个窗口里的多个分屏区域
这三个概念是理解 Tmux 的关键。
比如你正在维护一个网站,可以这样安排:
- 一个 session 叫
blog - 一个 window 跑 Hugo 本地预览
- 一个 window 编辑文章
- 一个 window 查看 Git 状态
- 某个 window 再拆成左右两个 pane,一个看日志,一个跑命令
这样终端不再是一堆散乱的窗口,而是一个可以恢复、可以组织、可以长期运行的工作空间。
安装 Tmux
macOS 可以用 Homebrew 安装:
brew install tmux
Ubuntu / Debian 可以使用:
sudo apt update
sudo apt install tmux
CentOS / Rocky Linux / AlmaLinux 可以使用:
sudo dnf install tmux
安装完成后,输入下面的命令检查版本:
tmux -V
第一个 Tmux 会话
直接输入:
tmux
你会进入一个新的 Tmux 会话。此时终端底部通常会出现一条状态栏,显示当前会话、窗口编号和主机名等信息。
更推荐的方式是创建一个命名会话:
tmux new -s blog
这样以后重新连接时就很清楚这个会话是做什么的。
会话管理命令
会话适合承载一个项目、一台服务器上的一组任务,或者一个长期运行的工作现场。
| 命令 | 说明 |
|---|---|
tmux |
新建会话 |
tmux new -s 名字 |
新建命名会话 |
tmux ls |
列出所有会话 |
tmux attach -t 名字 |
连接到指定会话 |
tmux kill-session -t 名字 |
删除指定会话 |
常见使用流程如下:
tmux new -s deploy
在里面执行部署、编译、同步文件等命令。需要离开时,不要直接关闭终端,而是先 detach:
Ctrl+B d
下次回来后:
tmux attach -t deploy
如果只是想快速接回最近的一个会话,也可以使用:
tmux attach
前缀键:先按 Ctrl+B
Tmux 的快捷键都有一个共同规则:先按前缀键,再按后续键。
默认前缀键是:
Ctrl+B
比如 Ctrl+B d 的意思不是同时按三个键,而是:
- 先按住
Ctrl,再按B - 松开
- 再按
d
这个习惯一开始有点别扭,但用几天之后就会很自然。
会话快捷键
| 快捷键 | 说明 |
|---|---|
Ctrl+B d |
离开当前会话,也就是 detach |
Ctrl+B s |
切换会话 |
Ctrl+B $ |
重命名当前会话 |
其中最重要的是 Ctrl+B d。
很多人刚开始使用 Tmux 时,会直接关闭终端窗口。这样虽然有时也能保留会话,但不是一个好习惯。更稳妥的方式是用 detach 明确告诉 Tmux:我只是暂时离开,这个会话继续留着。
detach 到底是什么意思
detach 可以理解为“从当前 Tmux 会话中脱离出来”。
它不会关闭会话,也不会终止会话里正在运行的命令。你只是从这个 Tmux 工作区退回到普通终端,后台的 Tmux session 仍然存在。
比如你在服务器上运行:
tmux new -s build
npm run build
构建过程还没结束,但你现在要离开电脑,或者网络可能会断开。此时按:
Ctrl+B d
你会回到普通 shell,Tmux 会话 build 会继续留在后台。之后重新登录服务器,再执行:
tmux attach -t build
就能回到刚才那个会话。
注意区分这几个动作:
| 操作 | 结果 |
|---|---|
Ctrl+B d |
detach,只是离开会话,会话继续存在 |
exit |
退出当前 shell;如果这是窗口里的最后一个 shell,窗口可能会关闭 |
Ctrl+B x |
关闭当前面板 |
Ctrl+B & |
关闭当前窗口 |
tmux kill-session -t 名字 |
删除整个 Tmux 会话 |
所以,日常使用 Tmux 时最推荐的习惯是:临时离开用 detach,确认不需要了再 kill-session。
窗口管理
Window 可以理解为 Tmux 里的标签页。一个 session 下可以有多个 window。
| 快捷键 | 说明 |
|---|---|
Ctrl+B c |
新建窗口 |
Ctrl+B w |
列出所有窗口 |
Ctrl+B n |
下一个窗口 |
Ctrl+B p |
上一个窗口 |
Ctrl+B 数字 |
跳到第 N 个窗口 |
Ctrl+B , |
重命名当前窗口 |
Ctrl+B & |
关闭当前窗口 |
推荐给窗口起名字。比如:
editorserverlogsgitdb
重命名窗口的快捷键是:
Ctrl+B ,
命名之后,再用 Ctrl+B w 查看窗口列表时,会比默认的 bash、zsh 清楚很多。
面板管理:终端里的分屏
Pane 是 Tmux 里最常用也最直观的功能,也就是分屏。
| 快捷键 | 说明 |
|---|---|
Ctrl+B % |
左右分屏 |
Ctrl+B " |
上下分屏 |
Ctrl+B 方向键 |
切换面板 |
Ctrl+B z |
当前面板全屏 / 还原 |
Ctrl+B x |
关闭当前面板 |
Ctrl+B Space |
切换面板布局 |
比如在一个项目里,我通常会这样拆:
- 左边编辑文件
- 右上运行服务
- 右下查看日志
左右分屏:
Ctrl+B %
上下分屏:
Ctrl+B "
如果某个面板临时需要看全屏,比如日志太长,可以使用:
Ctrl+B z
再按一次 Ctrl+B z 就会恢复原来的布局。
复制模式:在 Tmux 里滚动和复制
如果你在普通终端里习惯用鼠标滚动,进入 Tmux 后可能会发现滚动行为不太一样。这时需要使用复制模式。
| 快捷键 | 说明 |
|---|---|
Ctrl+B [ |
进入复制模式,可以滚动翻页 |
q |
退出复制模式 |
Space |
开始选择文本 |
Enter |
复制选中文本 |
Ctrl+B ] |
粘贴 |
基本流程是:
- 按
Ctrl+B [进入复制模式 - 用方向键、PageUp、PageDown 移动
- 按
Space开始选择 - 移动光标选中文本
- 按
Enter复制 - 按
Ctrl+B ]粘贴
如果你配置了 vi 模式,复制模式里的移动会更接近 Vim,比如使用 h、j、k、l 移动。这属于后续进阶内容,刚开始不必强求。
一个实用的 Tmux 工作流
假设我们要在服务器上维护一个网站,可以这样开始:
tmux new -s web
第一个窗口用来编辑或查看代码:
Ctrl+B ,
把窗口命名为:
code
新建第二个窗口:
Ctrl+B c
命名为:
server
在里面启动服务或运行构建命令:
npm run dev
再新建第三个窗口,命名为 logs,用于查看日志:
tail -f app.log
如果要临时离开服务器:
Ctrl+B d
下次重新登录服务器后:
tmux attach -t web
你会回到之前的现场,窗口、分屏、运行中的命令都还在。
新手最应该记住的 10 个快捷键
刚开始不用记太多,先把下面 10 个练熟就够了:
| 快捷键 / 命令 | 用途 |
|---|---|
tmux new -s 名字 |
新建命名会话 |
tmux ls |
查看会话列表 |
tmux attach -t 名字 |
回到指定会话 |
Ctrl+B d |
离开会话 |
Ctrl+B c |
新建窗口 |
Ctrl+B w |
查看窗口列表 |
Ctrl+B % |
左右分屏 |
Ctrl+B " |
上下分屏 |
Ctrl+B 方向键 |
切换面板 |
Ctrl+B z |
当前面板全屏 / 还原 |
这 10 个命令掌握以后,Tmux 已经可以覆盖大部分日常使用场景。
常见问题
关闭终端后任务还在吗?
如果任务是在 Tmux 会话里启动的,通常还在。
重新登录服务器后,执行:
tmux ls
找到对应会话,再执行:
tmux attach -t 会话名
为什么按快捷键没反应?
最常见原因是没有先按前缀键。比如新建窗口不是直接按 c,而是先按 Ctrl+B,松开后再按 c。
另一个原因是终端或远程环境拦截了某些按键。遇到这种情况,可以先确认普通的 Ctrl+B d 是否可用。
Tmux 和 nohup 有什么区别?
nohup 更像是让单个命令在后台继续跑,适合简单任务。
Tmux 则是保留整个终端工作环境,适合需要反复查看、交互、切换窗口和分屏的场景。
简单说:
- 只想让一个命令不断运行:可以用
nohup - 想保留一整个终端工作现场:用
tmux
一个服务器上可以开多个 Tmux 会话吗?
可以,而且很推荐。
例如:
tmux new -s blog
tmux new -s api
tmux new -s deploy
不同项目分成不同 session,管理起来更清楚。
总结
Tmux 最有价值的地方,不只是“终端分屏”,而是让终端工作变得可恢复、可组织、可长期运行。
如果你只是偶尔用命令行,Tmux 可能不是必须的。但只要你经常 SSH 到服务器、跑长任务、看日志、部署项目,Tmux 很快就会变成离不开的工具。
建议从这几个动作开始练:
- 每个项目都用
tmux new -s 项目名创建独立会话 - 离开服务器前用
Ctrl+B ddetach - 用窗口区分
code、server、logs - 用面板同时查看命令输出和日志
- 遇到长输出时用
Ctrl+B [进入复制模式查看
先把这些基础动作变成习惯,再考虑改前缀键、开鼠标模式、配置主题和插件。Tmux 的核心能力不在配置文件里,而在你愿意把终端工作流组织起来。