tmux核心是通过会话持久化使进程脱离SSH生命周期,关键流程为“建命名会话→分离→按名重连”;配置自动继承当前路径、排查socket失效与权限问题是保障稳定性的重点。

Linux 中使用 Tmux 管理持久化终端会话,核心是让命令运行脱离 SSH 连接生命周期——断网、关终端、休眠都不影响进程继续执行。关键不在“怎么分屏”,而在于“建会话→分离→重连”这一闭环。
创建带名字的会话,别用默认编号
直接运行 tmux 会新建一个编号为 0 的会话,但多个会话混在一起时极易搞错。推荐始终命名:
-
tmux new -s deploy—— 创建名为 deploy 的会话,适合部署任务 -
tmux new -s logs -c /var/log—— 同时指定起始目录,进会话就直接在日志目录下 - 名字只用小写字母、数字、短横线(如
prod-api),避免空格和下划线,防止 shell 展开出错
分离会话后,随时用名字重新连接
在会话中按 Ctrl+b d(先松开再按 d),看到 [detached] 就成功了。此时会话仍在后台运行,但你已回到普通 shell。
- 查有哪些会话:
tmux ls,输出类似deploy: 1 windows (created ...),冒号前就是会话名 - 重新进入:
tmux attach -t deploy—— 必须带-t和准确名字,大小写敏感 - 别用
tmux attach不加参数,它连的是最近一次的会话,生产环境容易连错
让新窗口自动继承当前路径
默认情况下,按 Ctrl+b c 新建窗口,工作目录总会跳回 ~,对运维很不友好。解决方法只需一行配置:
- 编辑
~/.tmux.conf,加入:bind c new-window -c '#{pane_current_path}' - 保存后执行:
tmux source-file ~/.tmux.conf立即生效 - 注意:不是
-c $PWD,因为$PWD是启动 tmux 时的路径,而#{pane_current_path}是实时的、当前窗格所在目录
排查“tmux ls 看不到会话”的常见原因
如果 tmux ls 无输出,但 ps aux | grep 'tmux: server' 能看到进程,说明 server 还在,只是会话被清空了;如果连 server 都没了,会话状态就彻底丢失。
- 先检查磁盘空间:
df -h /tmp,tmux socket 默认存在/tmp/tmux-$(id -u)/,/tmp满会导致无法创建会话 - 确认用户一致:root 启的会话,不能用普通用户直接
attach;需sudo -u root tmux attach -t xxx - 别重装或重启服务器——只要 server 进程还在,
tmux new -s xxx就能立刻恢复工作台











