Tmux 实用指南
Tmux 是终端复用器。它在远程机器上运行一个 tmux server,把工作组织成 session → window → pane。例如,vps-maintenance session 可以有一个运行 shell 与 journalctl 的窗口,再加一个运行 watch 或 docker stats 的监控窗口。
SSH 断线时,tmux session 仍在 VPS 上;重新 SSH 后可以 attach 回去。它适合升级、构建、日志观察和较长的迁移,但不能替代备份或第二条 SSH 路径。
先记住前缀键
默认前缀是 Ctrl-b。多数快捷键不是同时按三个键,而是:
- 按住
Ctrl并点一下b; - 松开;
- 再按功能键,例如
d。
后文写成 Ctrl-b d。
最小可用流程
[REMOTE: VPS]
# 新建命名会话
tmux new -s maintenance
# 在 tmux 内正常工作
sudo apt update
# Ctrl-b d:detach,任务继续运行
# 在普通 shell 中列出并恢复
tmux ls
tmux attach -t maintenance
一个很实用的幂等入口是:
tmux new-session -A -s maintenance
会话存在就 attach,不存在就创建。
窗口和分屏
建议给窗口起用途明确的名字,如 deploy、logs、monitor,而不是同时开七个都叫 bash 的窗口。
查看历史输出
终端滚轮在 tmux 中不一定直接查看历史。按:
Ctrl-b [
进入 copy mode,用方向键、Page Up/Page Down 或 Vim 风格键移动,按 q退出。只想快速查看日志时,也可以让工具直接控制输出:
journalctl -u docker -n 200 --no-pager
docker compose logs --tail 200
Ctrl-Z、detach 和退出的区别
误按 Ctrl-Z 后先看:
jobs -l
fg %1 # 把编号 1 的 job 恢复到前台
# 或 bg %1 # 放到后台继续,但日志和生命周期仍属于该 shell
长期任务更适合一开始就在 tmux 内运行,而不是临时依赖 bg。
日常 VPS 布局建议
tmux new -s ops
deploy窗口:进入/srv/<service>运行 Compose。logs窗口:docker compose logs -f --tail 100。health窗口:watch -n 2 'docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'。
不用一直保留所有窗口。一个 session 中留下清晰的当前任务,比把 tmux 变成终端阁楼更有价值。
常见问题
no sessions:会话已结束或从未创建,用tmux new -s <name>。sessions should be nested with care:已经在 tmux 内又运行 tmux;先看$TMUX,通常不需要嵌套。- attach 提示会话已连接:可用
tmux attach -d -t <name>先踢掉旧客户端再连接。 - 任务仍因重启消失:tmux只抵抗 SSH 断线,不抵抗 VPS 重启;常驻服务应由 Docker restart policy 或 systemd 管理。
- 不知道自己在哪:
tmux display-message -p '#S:#I.#P'显示 session、window、pane。
结束会话
优先在各 pane 中正常结束程序并输入 exit。明确要终止整个会话时:
tmux kill-session -t maintenance
这会终止该会话内的进程,执行前应先确认目标名称。