如何使用 tmux 终端复用器:安装、会话、窗口、面板与分离附着

安装 tmux,用会话、窗口和面板管理终端任务,分离后进程继续,随时 attach 回来。

SSH 进服务器跑长任务、本地开多个终端标签,断线或关窗口就会丢进程。tmux 是终端复用器:在一个 SSH 连接里开多个窗口和面板,分离后进程继续跑,随时再附着回来。

搜索 tmux 安装 会话 窗口 面板 分离 附着 的人,通常要的是:装好、建会话、分屏、记住分离/附着,以及一份能用的基础配置。下面按官方手册 man tmux 与 tmux wiki 写可核对步骤。

安装 tmux 新建会话与分屏 分离 / 再附着

tmux 解决什么问题

01

会话在后台继续跑

按 Ctrl+b 再按 d 分离(detach),编译、日志 tail、数据库迁移不会随 SSH 断开而停。

02

窗口 + 面板,一屏多任务

一个会话里多个窗口(window)像标签页;每个窗口再拆成左右/上下面板(pane),对照日志与 shell 不用切标签。

03

可脚本化、可持久命名

tmux new -s deploy 给会话起名;tmux ls 列出;tmux attach -t deploy 回到现场。团队共用 jump host 时常用。

在 macOS 与 Linux 安装

  1. 1

    macOS:Homebrew

    运行 brew install tmux,确认 tmux -V 有版本号。Apple Silicon 与 Intel 包名相同;若需真彩色,tmux 3.0+ 已内置,旧版需查发行版说明。

  2. 2

    Debian / Ubuntu

    sudo apt update && sudo apt install tmux。LTS 仓库版本略旧但够用;要最新特性可从源码或第三方 PPA 安装,以当前发行版文档为准。

  3. 3

    Fedora / Arch 等

    Fedora:sudo dnf install tmux。Arch:sudo pacman -S tmux。装完直接输入 tmux 会进入带状态栏的新会话。

  4. 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(会结束所有会话)。

开始一场会议