tmux总结

YoungJeff
·发布于 3 个月前·
4 人看过
最近深度使用 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 dev
  • pm2 logs
  • tail -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 才真正发挥出它的价值。

运维
Linux
$ cd ..