tmux 终端复用完全指南:SSH 远程会话的瑞士军刀

目录

一、为什么需要 tmux

SSH 远程连接服务器时,最怕遇到两件事:断网关窗口。一旦连接中断,你正在运行的程序、轻狂积累的输出、前景未明的任务——全都灰飞烟灭。

tmux(Terminal Multiplexer,终端复用器)就是来解决这个问题的。它允许你在一个终端里创建多个"虚拟终端",断开连接后会话依然存活,重新连接可以无缝恢复。

一句话总结:tmux = 分屏 + 会话持久化 + 后台运行 + 多人共享,四个能力合而为一。

1.1 核心概念:Session / Window / Pane

tmux 的架构分为三层:

Session(会话)
最顶层容器,一个会话包含多个窗口。断开 SSH 后会话保留在后台运行。
Window(窗口)
相当于一个终端标签页,可包含多个窗格。可用 Ctrl-b w 切换。
Pane(窗格)
一个窗口内的水平或垂直分割区域,每个窗格运行一个独立的 shell 进程。
Server / Client
tmux 以服务进程运行,客户端附加到会话。多个客户端可同时查看同一个会话。

1.2 tmux vs screen vs Terminator

特性 tmux GNU Screen Terminator
会话持久化 ✅ 原生支持 ✅ 原生支持 ❌ 依赖终端
分屏能力 ✅ 水平/垂直自由分 ✅ 水平/垂直 ✅ GUI 分屏
状态栏定制 ✅ 高度可定制 ⚠️ 有限 ✅ GUI 配置
插件生态 ✅ TPM 插件管理器 ❌ 无 ❌ 无
多客户端共享 ✅ 支持 ⚠️ 有限 ❌ 不支持
Vi/Emacs 键位 ✅ 均可 ⚠️ 仅 Emacs N/A

选型建议:现代 Linux 服务器首选 tmux(功能最全、插件最丰富);嵌入式或极简环境用 screen(大多数系统预装);本地 GUI 桌面可选 TerminatorKitty

二、安装与基础操作

# Debian/Ubuntu sudo apt install tmux # CentOS/RHEL sudo yum install tmux # macOS brew install tmux # 验证版本 tmux -V

安装后直接输入 tmux 即可启动,看到底部绿色状态栏即为成功。

2.1 前缀键:C-b 的由来与自定义

tmux 所有快捷键都以 前缀键 开头,默认是 Ctrl-b(简写 C-b)。意思是:先按 Ctrl+b,松手,再按具体命令键。

C-b 被许多软件占用(如浏览器后退)。强烈建议将前缀键改为 Ctrl-aCtrl-j,使用体验大幅提升。

# 在 ~/.tmux.conf 中添加(最推荐的配置) set -g prefix C-a # 改前缀键为 Ctrl-a unbind C-b # 解绑默认的 Ctrl-b set -g base-index 1 # 窗口编号从 1 开始(而非 0) set -g pane-base-index 1 # 窗格编号也从 1 开始 set -g mouse on # 启用鼠标操作(点击选择窗格/调整大小) set -g history-limit 50000# 保存 5 万行历史记录 set -sg escape-time 0 # 消除 Esc 键延迟(Vim 用户必备)

修改配置后无需重启,执行 tmux source ~/.tmux.conf 重新加载即可。

三、会话管理

3.1 创建与附加

# 启动命名会话(推荐) tmux new -s dev # 创建名为 dev 的会话 # 启动无名会话(系统自动命名) tmux new # 附加到已有会话 tmux attach -t dev # 附加到 dev tmux a -t dev # 简写形式 # 直接进入最近使用的会话 tmux attach # 或 tmux a

3.2 分离与后台运行

在 tmux 会话内,按下 C-a d(前缀+ d)即可分离(detach),会话进入后台保持运行。

# 在 tmux 内部 Ctrl-a d # 分离当前会话 # 从外部管理会话 tmux detach # 分离指定客户端 tmux kill-session -t dev # 关闭 dev 会话 tmux kill-server # 关闭整个 tmux 服务(慎用)

3.3 高级会话操作

# 列出所有会话 tmux ls # 或 tmux list-sessions # 重命名当前会话 Ctrl-a $ # 切换会话 Ctrl-a s # 显示会话列表并切换 # 在新窗口中打开新会话(不离开当前) tmux new -s prod -d # 后台创建 prod 会话 # 发送命令到会话而不进入 tmux send-keys -t dev 'htop' C-m

SSH 持久化最佳实践:

每次 SSH 登录后,先执行 tmux attach -t main || tmux new -s main,把工作环境固定在 tmux 会话中。即使网络断开、SSH 超时,只要服务器不停机,你的会话就在。

四、窗口与窗格管理

4.1 窗口操作快捷键

快捷键 功能 快捷键 功能
C-a c 创建新窗口 C-a w 窗口列表选择
C-a n 切换到下一个窗口 C-a p 切换到上一个窗口
C-a l 切换到上一个活跃窗口 C-a , 重命名当前窗口
C-a 0-9 跳转到指定编号窗口 C-a & 关闭当前窗口(含所有窗格)
C-a f 按名称搜索窗口

4.2 窗格分割与布局

# 分屏命令(需在 tmux 内按前缀键) Ctrl-a | # 垂直分屏(左右两栏) Ctrl-a - # 水平分屏(上下两栏) Ctrl-a o # 切换到下一个窗格 # 从外部执行分屏 tmux split-window -h # 垂直分屏 tmux split-window -v # 水平分屏 tmux split-window -v -p 30# 水平分屏,高度占 30%
# 调整窗格大小(每次移动 5 格) Ctrl-a H # 向左扩大 Ctrl-a J # 向上扩大 Ctrl-a K # 向下扩大 Ctrl-a L # 向右扩大 # 预设布局切换 Ctrl-a M-1 # even-horizontal(水平均分) Ctrl-a M-2 # even-vertical(垂直均分) Ctrl-a M-3 # main-horizontal(主窗格在上) Ctrl-a M-4 # main-vertical(主窗格在左) Ctrl-a M-5 # tiled(平铺) # 旋转窗格 Ctrl-a Space# 循环切换布局 Ctrl-a Alt+方向# 旋转当前窗格位置

4.3 窗格间跳转

Ctrl-a o # 切换到下一个窗格(循环) Ctrl-a ; # 在上一个和当前窗格之间切换 Ctrl-a Up/Down/Left/Right # 方向键切换(需配置) # 在 ~/.tmux.conf 中绑定 vi 风格导航 bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R

鼠标模式下set -g mouse on),直接点击窗格即可跳转,拖拽边框可调整大小,无需记忆快捷键。


五、复制粘贴与滚动浏览

tmux 有自己的复制模式,与系统剪贴板独立。配置正确后,可以实现跨会话、跨 tmux 实例的复制粘贴。

# 进入复制模式 Ctrl-a [ # 进入复制模式(vi 风格) Ctrl-a PgUp # 直接进入复制模式并滚动 # vi 风格导航 q # 退出复制模式 j/k # 上下行移动 h/l # 左右字符移动 w/b # 词前进/退 0/$ # 行首/行尾 Ctrl-b # 向上翻页(注意不是 Ctrl-a) Ctrl-f # 向下翻页 /pattern # 正向搜索(n 下一条) ?pattern # 反向搜索 # 选择与复制 v # 进入可视化模式(字符选择) V # 可视化行模式 Space # 开始/结束选择 Enter # 复制选中文本到 tmux 缓冲区 # 粘贴 Ctrl-a ] # 粘贴 tmux 缓冲区内容 Ctrl-a # # 粘贴上一个 paste buffer

与系统剪贴板集成:~/.tmux.conf 中添加以下配置,可以使用 -T copy-pipe 将 tmux 选择内容直接发送到系统剪贴板:

# 复制到系统剪贴板(需要 xclip 或 pbcopy) bind -T copy-mode-vi v send-keys -X begin-selection bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel bind -T copy-mode-vi Enter send-keys -X copy-selection-and-cancel

六、配置文件与主题定制

6.1 插件推荐(通过 TPM 安装)

TPM(Tmux Plugin Manager)是 tmux 官方的插件管理器,安装简单:

# 安装 TPM git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm # 在 ~/.tmux.conf 末尾添加 set -g @plugin 'tmux-plugins/tpm' set -g @plugin 'tmux-plugins/tmux-sensible' set -g @plugin 'tmux-plugins/tmux-resurrect' # 会话持久化(保存/恢复) set -g @plugin 'tmux-plugins/tmux-continuum' # 自动定期保存 tmux 环境 set -g @plugin 'tmux-plugins/tmux-yank' # 增强复制/粘贴功能 # 初始化 TPM(放在配置文件最底部) run '~/.tmux/plugins/tpm/tpm'
# 安装插件:进入 tmux 后按 Ctrl-a I(即前缀+I) # 卸载插件:从配置删除 @plugin 行,按 Ctrl-a Alt+u

tmux-resurrect + continuum 最强组合:自动每 15 分钟保存一次 tmux 环境,服务器重启后按 Ctrl-a Ctrl-r 即可恢复所有会话、窗口、窗格布局和工作目录。

6.2 状态栏主题配置

# 状态栏基础配置 set -g status on set -g status-interval 1 # 每秒刷新状态栏 set -g status-position top # 状态栏放顶部(可选 bottom) # 左模块(会话名 + 窗口列表) set -g status-left-length 80 set -g status-left "#[fg=colour39,bold] #S #[fg=colour231]│ " # 右模块(负载 + 时间 + 日期) set -g status-right-length 80 set -g status-right "#[fg=colour231] %H:%M:%S %d/%m/%Y " # 当前窗口高亮 set -g window-status-current-format "#[fg=colour231,bg=colour39,bold] #I: #W " set -g window-status-format "#[fg=colour245] #I: #W " # 窗格边框颜色 set -g pane-border-style fg=colour240 set -g pane-active-border-style fg=colour39 # 活动窗格高亮 set -g window-style 'bg=colour235' set -g window-active-style 'bg=colour234'

七、高级技巧与实战场景

7.1 同步窗格(批量操作)

同时在多个窗格执行相同命令,是运维和开发中最实用的 tmux 功能之一。

# 开启同步(当前窗口所有窗格同步输入) Ctrl-a :setw synchronize-panes on # 关闭同步 Ctrl-a :setw synchronize-panes off # 写入配置文件,方便随时开关 bind s setw synchronize-panes

实战场景:同时在 4 台服务器执行 apt update && apt upgrade,同时查看多台机器的 htop 输出,同时在多个 Python 虚拟环境中安装依赖……一个命令,全部搞定。

7.2 共享会话(结对编程)

# 用户 A:创建共享会话 tmux -S /tmp/pair-session # 创建基于 socket 的会话 chmod 777 /tmp/pair-session # 开放读写权限 # 用户 B:附加到共享会话 tmux -S /tmp/pair-session attach

适用场景:远程 code review、技术分享演示、师生远程协作。共享会话中双方看到完全同步的内容,可同时输入(建议配合语音通话避免冲突)。

7.3 脚本化 tmux

#!/bin/bash # tmux-dev.sh:自动化创建开发环境 session="dev" tmux new-session -d -s $session -n editor # 新建会话 + 第一个窗口 tmux send-keys -t $session:editor 'cd ~/projects/api && vim' C-m tmux new-window -t $session -n server # 创建第二个窗口 tmux send-keys -t $session:server 'cd ~/projects/api && python -m http.server 8080' C-m tmux split-window -v -t $session:server # 在 server 窗口水平分屏 tmux send-keys -t $session:server.right 'cd ~/projects/api && tail -f logs/app.log' C-m tmux new-window -t $session -n db tmux send-keys -t $session:db 'mysql -u dev -p' C-m tmux select-window -t $session:editor # 默认聚焦编辑器窗口 tmux attach -t $session
# 将脚本加入 crontab,服务器重启后自动恢复开发环境 @reboot /home/user/scripts/tmux-dev.sh

八、核心速查表

会话管理

命令说明
tmux new -s name创建命名会话
tmux a -t name附加到指定会话
tmux ls列出所有会话
C-a d分离(后台保留)
C-a $重命名会话
C-a s会话选择器

窗口管理

命令说明
C-a c新建窗口
C-a 0-9跳转到指定窗口
C-a n / C-a p下一个 / 上一个窗口
C-a w窗口列表
C-a ,重命名当前窗口
C-a &关闭当前窗口

窗格管理

命令说明
C-a |垂直分屏
C-a -水平分屏
C-a o切换到下一窗格
C-a ;上一/当前窗格切换
C-a x关闭当前窗格
C-a Space循环切换布局

复制模式(vi 风格)

命令说明
C-a [进入复制模式
v可视化选择(字符)
Space开始/结束选择
Enter复制到缓冲区
C-a ]粘贴缓冲区
q退出复制模式
▲ 回到顶部