tmux总结
最近深度使用 tmux 的一些总结
——从一个刚深入使用 tmux 的开发者视角出发
最近一段时间在服务器上开发、部署和排查问题的频率明显变高:
SSH 经常断开、服务需要长期运行、日志要随时查看。
在这种场景下,我开始真正深度使用 tmux,而不是只把它当作一个“分屏工具”。
用了一段时间之后,最大的感受是:
tmux 管理的不是命令,而是工作结构和上下文。
这篇文章记录我作为一个刚深度接触 tmux 的开发者,对 tmux 核心概念
Session / Window / Pane 的理解,以及一些非常高频的使用方式和体会。
tmux 的核心三层结构
tmux 的整体设计非常清晰,可以用下面这张结构来理解:
Session(会话)
└── Window(窗口)
└── Pane(面板)
一开始我也怀疑过:
“是不是只用 Pane 就够了?”
真正用下来才发现,这三层并不是多余的,而是刻意划分出来的职责层级。
Session:项目级工作空间
Session 是什么?
Session 是 tmux 的最外层单位,可以理解为一个长期存在的工作环境。
我的使用习惯逐渐变成:
一个项目 = 一个 Session
例如:
tmux new -s frevana
tmux new -s wordpress
即使 SSH 断开、终端关闭,只要 Session 还在,
整个工作现场(窗口、分屏、命令输出)都能完整恢复。
常用 Session 命令
tmux new -s dev # 新建 session
tmux ls # 列出所有 session
tmux attach -t dev # 进入 session
tmux kill-session -t dev # 关闭 session
常用快捷键
Ctrl + b d # detach:断开连接,但 session 不会退出
这是 tmux 最核心、也最让人安心的能力。
Window:功能级分类,而不是分屏
初期常见的误区
刚开始用 tmux 时,我几乎只用一个 Window,然后不断分 Pane:
- 一个 Window
- 五六个 Pane
- 靠记忆区分每个 Pane 在干什么
结果就是:
Pane 一多,思路立刻变乱。
后来的理解
后来才意识到,Window 的意义不是“显示”,而是:
对任务进行功能层面的分类
我现在通常这样用:
Window: web
Window: api
Window: log
Window: deploy
只要按下 Ctrl + b w,
当前 Session 的整体结构就一目了然。
常用 Window 快捷键
Ctrl + b c # 新建 window
Ctrl + b w # 列出所有 window(非常常用)
Ctrl + b 0~9 # 切换到指定编号 window
Ctrl + b n # 下一个 window
Ctrl + b p # 上一个 window
Ctrl + b , # 重命名 window
Window 的命令行方式
tmux list-windows
tmux list-windows -t frevana
Pane:真正执行命令的地方
Pane 的定位
Pane 才是真正敲命令、跑程序的地方:
yarn devpm2 logstail -f error.log
我现在的原则是:
只有需要“同时盯着”的命令,才放在同一个 Window 的 Pane 里。
例如:
左 Pane:yarn dev
右 Pane:pm2 logs
常用 Pane 快捷键
Ctrl + b % # 垂直分屏
Ctrl + b " # 水平分屏
Ctrl + b ↑↓←→ # 在 pane 之间切换
Ctrl + b o # 顺序切换 pane
Ctrl + b x # 关闭当前 pane
Ctrl + b z # 最大化 / 还原 pane(非常好用)
Pane 为什么没有“列表快捷键”?
这是我刚开始非常困惑的一点。
后来才理解:
- Window 是逻辑单位,需要“列表”
- Pane 是空间单位,更强调“位置”
tmux 给 Pane 的方式是:
Ctrl + b q
短暂显示所有 Pane 的编号,然后可以快速跳转。
Pane 能不能取代 Window?
技术上:可以
实际使用:非常不推荐
我自己的体会是:
Pane 解决“并排看”,
Window 解决“怎么分类”。
当任务一多,只用 Pane 很快会失控。
tmux 并不会列出“命令列表”
这一点也很重要。
Window 和 Pane:
- 不知道你执行了哪些命令
- 不关心命令语义
- 只负责维护终端画面状态
tmux 的职责边界大致是:
tmux → 终端画布与结构
shell → 命令执行
系统 → 进程管理
理解这一点后,对 tmux 的预期会非常清晰。
我现在比较稳定的使用结构
Session:项目
Window :功能
Pane :具体命令
一个真实的使用示例:
Session: frevana
├─ Window: web
│ ├─ Pane: yarn dev
│ └─ Pane: pm2 logs web
├─ Window: api
│ ├─ Pane: yarn start
│ └─ Pane: curl test
└─ Window: deploy
└─ Pane: ./deploy.sh
我每天都会用到的 tmux 快捷键
Ctrl + b d # detach session
Ctrl + b c # 新建 window
Ctrl + b w # window 列表
Ctrl + b % # 垂直分屏
Ctrl + b " # 水平分屏
Ctrl + b z # pane 最大化
Ctrl + b q # pane 编号提示
Ctrl + b [ # 复制 / 滚动模式
最后的一个总结
在真正长期使用 tmux 之前,我一直以为它只是一个“高级分屏工具”。
现在的感受是:
tmux 更像是服务器上的 IDE
它不帮你记住命令,
而是帮你保留“我正在做什么”的上下文。
当你开始用 Session 管项目、
用 Window 管结构、
用 Pane 跑命令时,
tmux 才真正发挥出它的价值。