tmux 用于在单终端中管理多个持久化 shell 会话,启动用 tmux new -s name,分离用 Ctrl+b d,重连用 tmux attach -t name;分屏用 Ctrl+b " 或 %,切窗用 Ctrl+b n/p 或数字,查会话用 tmux ls。

tmux 不是用来“替代终端”的,它是用来让单个终端窗口承载多个独立运行的 shell 会话,并在断连后不丢失进程——只要服务端没崩,tmux 里的命令就一直跑着。
如何启动并保持会话不中断
直接运行 tmux 就创建一个匿名会话;但生产环境建议带名字,避免后续混淆:
-
tmux new -s myproject:新建名为myproject的会话 -
Ctrl+b d(先按住Ctrl+b松开,再按d):分离当前会话,回到普通 shell,但myproject仍在后台运行 -
tmux attach -t myproject:重新接入该会话,所有命令、光标位置、滚动历史都原样恢复
常见错误是误以为关掉终端等于退出 tmux —— 实际上只要没执行 exit 或 Ctrl+d 退出 shell,或没运行 tmux kill-session,会话就一直活着。网络抖动、笔记本合盖、SSH 超时都不会杀死它。
怎么分屏、切窗口、快速跳转
tmux 的操作依赖前缀键,默认是 Ctrl+b,不是同时按,是组合触发:先按 Ctrl+b 松开,再按功能键。
- 水平分屏:
Ctrl+b "(引号键),新 pane 在下方 - 垂直分屏:
Ctrl+b %(百分号键),新 pane 在右侧 - 新建窗口:
Ctrl+b c,窗口编号从 0 开始递增 - 切换窗口:
Ctrl+b n(下一个)、Ctrl+b p(上一个),或直接Ctrl+b 0~9 - 切换 pane:
Ctrl+b o(小写 o,循环切换),或Ctrl+b →/←/↑/↓(方向键,需配置,非默认)
注意:方向键切换 pane 在较老版本 tmux(如 2.x)中默认不启用,需在 ~/.tmux.conf 加 bind-key -r vi 或显式绑定;否则只能靠 o 键轮转,容易迷路。
为什么 attach 失败或提示 no sessions
典型现象是执行 tmux attach 报错 no sessions,说明当前没有活跃会话。原因有三个:
- 根本没启动过 tmux:直接运行
tmux即可建一个 - 之前用
exit或Ctrl+d退出了最外层 shell:这会终止整个会话,tmux ls就查不到任何记录 - 用了
tmux new但没加-s,又 detach 后忘记会话名:运行tmux ls查看列表,输出类似0: 1 windows (created Tue Apr 2 17:20:12 2026),其中0就是会话 ID,可用tmux attach -t 0
别依赖记忆会话名,tmux ls 是唯一可靠入口。如果连这个都为空,那就真得重来——tmux 不保存历史会话,只管当前活着的。
自定义前缀键和基础配置避坑
很多人被 Ctrl+b 折腾到放弃,因为和 Emacs、IDE 快捷键冲突。改前缀很简单,但必须重启 tmux 才生效:
- 编辑
~/.tmux.conf,加一行:set -g prefix C-a(改成Ctrl+a) - 重载配置:
tmux source-file ~/.tmux.conf(仅对新创建的会话生效) - 已存在的会话仍用旧前缀,需先
detach再attach才能应用新设置
另一个隐形坑是:某些 SSH 客户端(如旧版 Xshell)会吞掉 Ctrl+b,表现为按了没反应。这时要么换客户端,要么改前缀,别硬扛。另外,Ctrl+b ? 是万能帮助页,所有快捷键都在里面,比查文档快得多。

















