tmux 终端复用完全指南:SSH 远程会话的瑞士军刀
📅 2026-04
⏱️ 约 15 分钟
🔧 终端 · SSH · Linux
终端
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 桌面可选 Terminator 或 Kitty。
二、安装与基础操作
# 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-a 或 Ctrl-j,使用体验大幅提升。
# 在 ~/.tmux.conf 中添加(最推荐的配置)
set -g prefix C-a
unbind C-b
set -g base-index 1
set -g pane-base-index 1
set -g mouse on
set -g history-limit 50000
set -sg escape-time 0
修改配置后无需重启,执行 tmux source ~/.tmux.conf 重新加载即可。
三、会话管理
3.1 创建与附加
# 启动命名会话(推荐)
tmux new -s dev
# 启动无名会话(系统自动命名)
tmux new
# 附加到已有会话
tmux attach -t dev
tmux a -t dev
# 直接进入最近使用的会话
tmux attach
3.2 分离与后台运行
在 tmux 会话内,按下 C-a d(前缀+ d)即可分离(detach),会话进入后台保持运行。
# 在 tmux 内部
Ctrl-a d
# 从外部管理会话
tmux detach
tmux kill-session -t dev
tmux kill-server
3.3 高级会话操作
# 列出所有会话
tmux ls
# 重命名当前会话
Ctrl-a $
# 切换会话
Ctrl-a s
# 在新窗口中打开新会话(不离开当前)
tmux new -s prod -d
# 发送命令到会话而不进入
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
# 调整窗格大小(每次移动 5 格)
Ctrl-a H
Ctrl-a J
Ctrl-a K
Ctrl-a L
# 预设布局切换
Ctrl-a M-1
Ctrl-a M-2
Ctrl-a M-3
Ctrl-a M-4
Ctrl-a M-5
# 旋转窗格
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 [
Ctrl-a PgUp
# vi 风格导航
q
j/k
h/l
w/b
0/$
Ctrl-b
Ctrl-f
/pattern
?pattern
# 选择与复制
v
V
Space
Enter
# 粘贴
Ctrl-a ]
Ctrl-a #
与系统剪贴板集成:在 ~/.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'
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
# 左模块(会话名 + 窗口列表)
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
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
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 | 退出复制模式 |