SSH 到服务器上跑个长任务,网络断了,任务没了。Tmux 就是解决这个问题的——把终端会话和窗口解绑,关了终端进程还在跑。
解决的核心问题 #
普通终端窗口和进程绑在一起。关窗口,进程就没了。SSH 断线同理。
Tmux 把会话(session)和窗口解绑:你关掉终端、断开 SSH,会话里的进程继续跑。下次接上,一切照旧。
同类工具还有 GNU Screen。Tmux 比 Screen 好用,功能也多,没什么理由选 Screen。
三层结构 #
Tmux 有三个层级,搞清楚就不会晕:
- Session(会话):最外层容器。一个 session 可以包含多个 window。detach 后 session 还在后台跑。
- Window(窗口):session 内的标签页,底部状态栏显示编号和名称。
- Pane(窗格):一个 window 内的分割区域,每个 pane 跑各自的命令。
日常使用中,一般一个项目开一个 session,里面按需要分 window 和 pane。
安装 #
|
|
会话操作 #
日常 80% 的时间就在用这几个命令:
|
|
会话快捷键:
| 快捷键 | 功能 |
|---|---|
Ctrl+b d |
分离当前会话 |
Ctrl+b s |
列出所有会话 |
Ctrl+b $ |
重命名当前会话 |
窗格(Pane)分屏 #
一个窗口切成几块,同时看多个命令的输出。
|
|
常用窗格快捷键:
| 快捷键 | 功能 |
|---|---|
Ctrl+b % |
左右分屏 |
Ctrl+b " |
上下分屏 |
Ctrl+b 方向键 |
切换窗格 |
Ctrl+b z |
全屏/还原 |
Ctrl+b x |
关闭窗格 |
Ctrl+b q |
显示窗格编号 |
Ctrl+b Ctrl+方向键 |
调整窗格大小 |
窗口(Window)管理 #
一个 session 里开多个 window,相当于终端里的标签页。
| 快捷键 | 功能 |
|---|---|
Ctrl+b c |
新建窗口 |
Ctrl+b n |
下一个窗口 |
Ctrl+b p |
上一个窗口 |
Ctrl+b 0-9 |
跳到指定编号窗口 |
Ctrl+b w |
列表选择窗口 |
Ctrl+b , |
重命名窗口 |
实际工作流 #
一个典型的开发场景:
|
|
在 Oracle 免费 VPS(https://blog.baifan.site/oracle-free-vps-guide/)上跑长任务,Tmux 基本是必须的——SSH 断了进程不能跟着断。
配合 SSH 远程开发(https://blog.baifan.site/codex-ssh-remote-development-guide/)和 VPS 术语扫盲(https://blog.baifan.site/vps-glossary-jargon-guide/),远程服务器上的基本操作就齐了。
配置文件(可选) #
默认配置够用。如果想改前缀键或加鼠标支持,创建 ~/.tmux.conf:
|
|
改完后生效:
|
|
这是个人偏好,不改也能用。多数人加一个 set -g mouse on 就够了。