如何使用 tmux 終端機復用器:安裝、工作階段、視窗、面板與分離附著
安裝 tmux,用工作階段、視窗和面板管理終端機任務,分離後行程繼續,隨時 attach 回來。
SSH 进服务器跑长任务、本地开多个终端标签,断线或关視窗就会丢进程。tmux 是终端复用器:在一个 SSH 连接里开多个視窗和面板,分離后进程继续跑,随时再附著回来。
搜索 tmux 安裝 工作階段 視窗 面板 分離 附著 的人,通常要的是:装好、建工作階段、分屏、记住分離/附著,以及一份能用的基础設定。下面按官方手册 man tmux 与 tmux wiki 写可核对步骤。
tmux 解决什么问题
工作階段在后台继续跑
按 Ctrl+b 再按 d 分離(detach),编译、日志 tail、数据库迁移不会随 SSH 断开而停。
視窗 + 面板,一屏多任务
一个工作階段里多个視窗(window)像标签页;每个視窗再拆成左右/上下面板(pane),对照日志与 shell 不用切标签。
可脚本化、可持久命名
tmux new -s deploy 给工作階段起名;tmux ls 列出;tmux attach -t deploy 回到现场。团队共用 jump host 时常用。
在 macOS 与 Linux 安裝
-
1
macOS:Homebrew
运行
brew install tmux,确认tmux -V有版本号。Apple Silicon 与 Intel 包名相同;若需真彩色,tmux 3.0+ 已内置,旧版需查发行版说明。 -
2
Debian / Ubuntu
sudo apt update && sudo apt install tmux。LTS 仓库版本略旧但够用;要最新特性可从源码或第三方 PPA 安裝,以当前发行版文档为准。 -
3
Fedora / Arch 等
Fedora:
sudo dnf install tmux。Arch:sudo pacman -S tmux。装完直接输入tmux会进入带状态栏的新工作階段。 -
4
第一次进入与退出
裸跑
tmux会创建编号工作階段。退出整个工作階段:在 shell 里exit直到面板关完,或tmux kill-session。仅暂时离开用 detach(见下文),不要直接关 SSH。
工作階段:新建、列出、附著
tmux 层级是 server → session → window → pane。常用命令在 tmux 外也能跑:
# 新建命名工作階段
tmux new -s dev
# 列出工作階段
tmux ls
# 附著到已有工作階段
tmux attach -t dev
# 简写
tmux a -t dev
# 在工作階段内分離(进程继续)
# 按键:Ctrl+b 然后 d
已有工作階段时 tmux new -s foo 会报错;改用 tmux new -s foo -A(3.2+)存在则 attach,或先 tmux has-session -t foo 2>/dev/null || tmux new -s foo。
視窗与面板:默认前缀 Ctrl+b
tmux 先按前缀键(默认 Ctrl+b),再按命令键。下面「前缀」均指 Ctrl+b。
| 按键(前缀后) | 作用 | 场景 |
|---|---|---|
c |
新建視窗 | 开一条新 shell 线 |
n / p |
下一 / 上一視窗 | 在視窗间切换 |
0–9 |
跳到编号視窗 | 状态栏左侧编号 |
% |
左右分屏 | 日志 + 命令行对照 |
" |
上下分屏 | 监控 + 编辑 |
| 方向键 | 在面板间移动焦点 | 多面板协作 |
x |
关闭当前面板 | 确认提示 y/n |
d |
分離工作階段 | SSH 断开前必做 |
? |
列出所有快捷键 | 忘记按键时 |
基础設定 ~/.tmux.conf
在用户目录创建 ~/.tmux.conf,保存后执行 tmux source-file ~/.tmux.conf 或重开 tmux 生效:
# 把前缀改成 Ctrl+a(与 GNU screen 类似,可选)
# unbind C-b
# set -g prefix C-a
# bind C-a send-prefix
# 鼠标滚轮与点击切换面板(tmux 2.1+)
set -g mouse on
# 历史行数,方便 scrollback 查日志
set -g history-limit 50000
# 視窗/面板从 1 开始编号(可选)
set -g base-index 1
setw -g pane-base-index 1
# 256 色 / truecolor(终端需支持)
set -g default-terminal "tmux-256color"
改前缀后,下文所有「前缀 + 键」都要换成新前缀。官方选项说明见 man tmux 的 OPTIONS 段。
tmux 不是 shell 替代品,而是终端里的「工作階段管理器」。shell 仍是 bash/zsh/fish;tmux 管視窗生命周期与断线恢复。
- attach 报 no sessions
- 工作階段已被 kill 或 tmux server 重启。用
tmux ls确认;需要持久任务请配合 systemd、cron 或 detach 而非杀工作階段。 - 颜色/字体乱码
- 检查
TERM、default-terminal与 SSH 远端 locale。本地终端与远端 tmux 都需支持 UTF-8。 - 与 tmux 内 vim/nvim 冲突
- 前缀与 vim 快捷键可能重叠。可设
setw -g mode-keys vi并在 vim 里用:set termguicolors,或使用 vim-tmux-navigator 等插件(按各自文档設定)。
远程结对时,终端里对齐命令行很快;若要共享白板或语音,可从 wbroom 首页 开浏览器房间,步骤见 建立與加入房間。
还想核对的问题
tmux 和 screen 有什么区别?
两者都是终端复用器。tmux 視窗/面板模型更现代、脚本接口更一致(tmux list-windows 等),新教程多指向 tmux;老系统若只带 screen 仍可用 screen -S / screen -r 完成类似 detach/attach。
能否开机自动建工作階段?
可以。用 systemd user unit、.bashrc 里 tmux attach -t main || tmux new -s main,或部署工具里的 tmux 配方。注意别把多个 SSH 都 attach 到同一工作階段造成输入冲突。
多个用户能共享一个 tmux 工作階段吗?
同一 Unix 用户下可以多人 attach 同一 session(例如共用 deploy 用户)。不同用户需相同权限与 socket 路径;生产环境更常见的是各开各工作階段,用共享终端记录或配对工具协作。
如何彻底结束 tmux?
工作階段内 exit 所有 pane 会关視窗;最后一个視窗关闭会结束 session。或 tmux kill-session -t 名称。要停整个 tmux server:tmux kill-server(会结束所有工作階段)。