tmux 是一个终端复用器(terminal multiplexer)。简单说,它可以让你在一个 SSH/终端连接里同时运行多个终端,并且即使 SSH 断开,程序也能继续运行。
如果你经常用 SSH + Linux 服务器,tmux 非常值得掌握。
核心概念
tmux 可以理解成三层:
text
tmux Server
└── Session(会话)
├── Window(窗口)
│ ├── Pane(窗格)
│ └── Pane
└── Window
例如:
text
Session: work
├── Window 0: editor
│ ├── vim
│ └── shell
├── Window 1: server
│ └── ./server
└── Window 2: logs
└── tail -f app.log
最常用的就是:
- Session:一个完整的工作环境
- Window:类似浏览器 Tab
- Pane:一个窗口里面再切分终端
安装
Ubuntu / Debian
bash
sudo apt install tmux
CentOS / RHEL
bash
sudo yum install tmux
或者:
bash
sudo dnf install tmux
macOS
bash
brew install tmux
检查:
bash
tmux -V
启动 tmux
直接:
bash
tmux
或者给 Session 起名字:
bash
tmux new -s work
推荐养成给 Session 命名的习惯。
例如:
bash
tmux new -s server
进入后,你看到的仍然是普通 Shell。
tmux 快捷键的核心规则
tmux 默认快捷键前缀是:
text
Ctrl-b
也就是先按:
text
Ctrl-b
然后松开,再按第二个键。
例如:
text
Ctrl-b c
表示:
- 按
Ctrl-b - 松开
- 按
c
这是 tmux 最重要的使用规则。
最常用快捷键
Session
创建 Session
bash
tmux new -s work
查看 Session
bash
tmux ls
或者:
bash
tmux list-sessions
进入已有 Session
bash
tmux attach -t work
简写:
bash
tmux a -t work
如果只有一个 Session:
bash
tmux a
临时退出 Session
按:
text
Ctrl-b d
这里的 d 是 detach。
注意:
Ctrl-b d不会关闭程序。
例如:
bash
tmux new -s work
# 启动程序
./server
# 按 Ctrl-b d
此时 SSH 可以断开,./server 仍然运行。
以后重新连接服务器:
bash
tmux a -t work
就能回到原来的环境。
Window:创建多个终端
创建新 Window:
text
Ctrl-b c
c = create。
查看 Window:
text
Ctrl-b w
切换到下一个:
text
Ctrl-b n
n = next。
切换到上一个:
text
Ctrl-b p
p = previous。
直接跳到某个 Window:
text
Ctrl-b 0
Ctrl-b 1
Ctrl-b 2
例如:
text
Ctrl-b 2
进入第 2 个 Window。
Window 重命名
当前 Window 重命名:
text
Ctrl-b ,
例如改成:
text
server
推荐:
text
Window 0: editor
Window 1: server
Window 2: logs
这样工作时非常清晰。
Pane:分屏
这是 tmux 最好用的功能之一。
上下分屏
text
Ctrl-b "
得到:
text
┌──────────────────┐
│ │
├──────────────────┤
│ │
└──────────────────┘
左右分屏
text
Ctrl-b %
得到:
text
┌─────────┬─────────┐
│ │ │
│ │ │
└─────────┴─────────┘
Pane 之间切换
最简单:
text
Ctrl-b ↑
Ctrl-b ↓
Ctrl-b ←
Ctrl-b →
也可以使用:
text
Ctrl-b o
循环切换 Pane。
调整 Pane 大小
可以按:
text
Ctrl-b Ctrl-↑
Ctrl-b Ctrl-↓
Ctrl-b Ctrl-←
Ctrl-b Ctrl-→
调整当前 Pane 大小。
如果你的终端/键盘对这些组合支持不好,也可以直接使用 tmux 命令:
text
Ctrl-b :
然后输入:
bash
resize-pane -U 5
例如:
bash
resize-pane -D 5
resize-pane -L 5
resize-pane -R 5
关闭 Window / Pane
关闭当前 Pane:
bash
exit
或者:
text
Ctrl-d
关闭当前 Window 的所有 Pane 后,Window 也会消失。
也可以使用:
text
Ctrl-b &
关闭当前 Window。
关闭当前 Pane:
text
Ctrl-b x
tmux 会询问:
text
kill-pane? (y/n)
输入:
text
y
一个非常实用的 SSH 工作流程
假设你有一台 Linux 服务器。
第一次登录:
bash
ssh user@server
创建:
bash
tmux new -s work
然后分成三个 Window。
Window 0:代码
text
Ctrl-b c
运行:
bash
vim .
Window 1:运行程序
text
Ctrl-b c
运行:
bash
./server
Window 2:查看日志
text
Ctrl-b c
运行:
bash
tail -f app.log
此时:
text
work
├── 0: editor
├── 1: server
└── 2: logs
然后:
text
Ctrl-b d
退出 tmux。
甚至可以直接关闭 SSH:
bash
exit
第二天重新登录:
bash
ssh user@server
然后:
bash
tmux a -t work
之前的环境全部还在。
一个更舒服的布局
例如开发服务器时,可以这样:
text
┌──────────────────────────────┐
│ │
│ vim │
│ │
├────────────────┬─────────────┤
│ │ │
│ shell │ logs │
│ │ │
└────────────────┴─────────────┘
创建:
bash
tmux new -s dev
然后:
text
Ctrl-b %
左右分屏。
进入左边:
text
Ctrl-b ←
再:
text
Ctrl-b "
就可以得到类似:
text
┌───────────────┬──────────────┐
│ │ │
│ │ │
│ │ │
├───────────────┤ │
│ │ │
│ │ │
└───────────────┴──────────────┘
查看所有 Session
bash
tmux ls
例如:
text
work: 3 windows
server: 2 windows
test: 1 windows
进入:
bash
tmux a -t server
Session 之间切换
在 tmux 内:
text
Ctrl-b s
会显示 Session 列表:
text
0: work
1: server
2: test
选择即可。
也可以:
text
Ctrl-b (
上一个 Session。
text
Ctrl-b )
下一个 Session。
查看快捷键
忘记快捷键的时候:
text
Ctrl-b ?
tmux 会显示完整快捷键列表。
这是非常重要的一个快捷键。
退出帮助:
text
q
tmux 命令行
按:
text
Ctrl-b :
进入 tmux command prompt。
例如:
text
Ctrl-b :
然后:
bash
new-window
或者:
bash
split-window -h
其中:
text
-h
表示水平分割(左右)。
text
-v
表示垂直分割(上下)。
最值得记住的 15 个快捷键
如果你不想一次学太多,先记下面这些:
| 快捷键 | 功能 |
|---|---|
Ctrl-b d |
Detach,退出 Session |
Ctrl-b c |
创建 Window |
Ctrl-b n |
下一个 Window |
Ctrl-b p |
上一个 Window |
Ctrl-b 0~9 |
切换 Window |
Ctrl-b , |
重命名 Window |
Ctrl-b % |
左右分屏 |
Ctrl-b " |
上下分屏 |
Ctrl-b ↑↓←→ |
切换 Pane |
Ctrl-b o |
下一个 Pane |
Ctrl-b x |
关闭 Pane |
Ctrl-b & |
关闭 Window |
Ctrl-b w |
查看 Window |
Ctrl-b s |
查看 Session |
Ctrl-b ? |
查看帮助 |
tmux 常用命令速查
创建 Session
bash
tmux new -s name
查看 Session
bash
tmux ls
连接 Session
bash
tmux attach -t name
删除 Session
bash
tmux kill-session -t name
删除所有 Session
bash
tmux kill-server
⚠️ 这个会关闭当前 tmux server 下的所有 Session。
tmux 的真正价值
如果只把 tmux 当成「分屏工具」,其实有点低估它了。
它最核心的价值是:
text
SSH
│
▼
tmux Session
│
├── 程序
├── Shell
├── 日志
└── 编辑器
SSH 连接只是"进入 tmux 的入口"。
即使:
text
SSH 断开
↓
tmux Session 仍然存在
↓
程序继续运行
↓
重新 SSH
↓
tmux attach
↓
恢复现场
这也是为什么服务器开发、运维、跑长期任务时,tmux 非常常见。
建议你先练这套
不要试图一次记住所有命令,先实际执行:
bash
tmux new -s demo
然后依次练:
text
Ctrl-b c # 新 Window
Ctrl-b c # 再新一个
Ctrl-b 0 # 回到第一个
Ctrl-b % # 左右分屏
Ctrl-b o # 切换 Pane
Ctrl-b " # 上下分屏
Ctrl-b d # 离开
然后:
bash
tmux ls
tmux a -t demo