如何使用 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(会结束所有会话)。