Linux tmux 终端复用器完全指南:从入门到精通

Linux tmux 终端复用器完全指南:从入门到精通

Someone Lv5

一、tmux 简介

tmux(Terminal Multiplexer)是一款功能强大的终端复用器,允许用户在单个终端窗口中创建、管理和切换多个会话。对于服务器管理员和开发者来说,tmux 几乎是必备工具——它让你在 SSH 断开后依然保持任务运行,在单个窗口中同时监控多台服务器日志,还能保存和恢复完整的工作环境。

tmux 与 GNU Screen 对比

特性tmuxGNU Screen
首次发布2007 年1987 年
BSD 许可✓(开源友好)GPL
窗格(Pane)分割原生支持,灵活高效需要 layout 配置
状态栏默认带信息丰富的状态栏需手动配置 hardstatus
256 色/真彩色开箱支持需额外配置
配置文件语法清晰直观(类似 shell)复杂,大量 escape 序列
粘贴缓冲区支持多缓冲区 + 选择模式单缓冲区
脚本化布局支持 tmuxp/tmuxinator有限

二、安装 tmux

Ubuntu / Debian

1
2
sudo apt update
sudo apt install tmux -y

CentOS / RHEL

1
2
3
4
5
# CentOS 7 及以上
sudo yum install tmux -y
# 或使用 EPEL
sudo yum install epel-release -y
sudo yum install tmux -y

macOS

1
brew install tmux

验证安装

1
2
tmux -V
# 输出示例: tmux 3.4

三、核心概念与架构

tmux 采用三层架构设计,理解这三个层级是掌握 tmux 的关键:

1
2
3
4
5
6
7
8
9
10
11
12
tmux Server(守护进程)
└── Session A(会话)
├── Window 1(窗口)
│ ├── Pane 1(窗格)
│ └── Pane 2(窗格)
└── Window 2(窗口)
├── Pane 1
├── Pane 2
└── Pane 3
└── Session B(会话)
└── Window 1(窗口)
└── Pane 1
  • Server:后台守护进程,管理所有会话。当你第一次运行 tmux 时自动启动。
  • Session:一个独立的工作空间,可以包含多个窗口。每个会话都可以分离和重新连接。
  • Window:相当于标签页,同一窗口中可以横向或纵向分割成多个窗格。
  • Pane:最小的操作单元,每个窗格运行一个独立的 shell。

四、会话管理

创建会话

1
2
3
4
5
6
7
8
# 创建无名会话
tmux

# 创建命名会话(推荐)
tmux new-session -s mywork

# 简写
tmux new -s mywork

分离与重连

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 从会话中分离(快捷键:Ctrl+b d)
# 或在外部操作:
tmux detach -s mywork

# 列出所有会话
tmux ls
# 或
tmux list-sessions

# 重新连接会话
tmux attach -t mywork
# 简写
tmux a -t mywork

# 连接到最近的会话
tmux a

会话切换与删除

1
2
3
4
5
6
7
8
9
10
11
# 切换会话(在 tmux 内)
# 快捷键:Ctrl+b s(交互式选择)

# 删除会话
tmux kill-session -t mywork

# 删除所有会话(保留 Server)
tmux kill-session -a

# 删除除指定会话外的所有会话
tmux kill-session -a -t mywork

五、窗口管理

操作 快捷键 命令
创建新窗口 Ctrl+b c tmux new-window
切换到下一个窗口 Ctrl+b n
切换到上一个窗口 Ctrl+b p
切换到指定编号窗口 Ctrl+b 0-9
列出所有窗口 Ctrl+b w tmux list-windows
重命名当前窗口 Ctrl+b , tmux rename-window
关闭当前窗口 Ctrl+b & tmux kill-window
1
2
3
4
5
# 命令行窗口操作
tmux new-window -t mywork:3 -n '日志监控'
# 在 mywork 会话中创建编号 3 的窗口,名为"日志监控"

tmux rename-window -t mywork:3 '实时日志'

六、窗格管理

窗格分割是 tmux 最实用的功能之一,让你在单个窗口中并排运行多个终端。

分割窗格

1
2
3
# 当前窗口内操作(快捷键):
# 水平分割(上下排列):Ctrl+b "
# 垂直分割(左右排列):Ctrl+b %

窗格导航与调整

操作 快捷键
切换到上/下/左/右窗格 Ctrl+b ↑/↓/←/→
循环切换窗格 Ctrl+b o
显示窗格编号 Ctrl+b q
调整窗格大小 Ctrl+b Ctrl+↑/↓/←/→
关闭当前窗格 Ctrl+b x
将窗格全屏/恢复 Ctrl+b z
交换窗格位置 Ctrl+b { }(左花括号向前,右花括号向后)

窗格布局

1
2
3
4
5
6
7
8
9
# 切换预设布局
# Ctrl+b Space 或 Ctrl+b Alt+1~5

# 五种预设布局:
# even-horizontal — 水平均分
# even-vertical — 垂直均分
# main-horizontal — 主窗格在顶部
# main-vertical — 主窗格在左侧
# tiled — 平铺

快速创建三列布局

1
2
3
4
5
6
# 1. Ctrl+b "  水平分割(得到上下两个窗格)
# 2. Ctrl+b ↑ 切换到上方窗格
# 3. Ctrl+b % 垂直分割(得到左右两个窗格)
# 4. Ctrl+b ↓ 切换到下方窗格
# 5. Ctrl+b % 垂直分割(得到左右两个窗格)
# 结果:上1个窗格,下2个窗格

七、复制模式与滚动

tmux 默认没有原生滚轮支持,需要进入复制模式才能回滚查看历史输出。

1
2
3
4
5
6
7
8
9
10
11
# 进入复制模式
# Ctrl+b [(或 Ctrl+b PageUp)

# 复制模式内操作:
# 方向键/PageUp/PgDn — 滚动
# 空格键 — 开始选择文本
# Enter — 复制选择的内容
# q — 退出复制模式

# 粘贴最后一次复制的内容
# Ctrl+b ]

启用鼠标滚动(推荐)

~/.tmux.conf 中添加:

1
set -g mouse on

启用后即可使用鼠标滚轮直接滚动查看历史输出,拖拽窗格分割线调整大小,点击切换窗格。

八、配置 tmux

tmux 的配置文件是 ~/.tmux.conf(或 ~/.config/tmux/tmux.conf)。

基础配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# ~/.tmux.conf

# 设置前缀键为 Ctrl+a(类似 screen 用户习惯)
# 不习惯可以注释掉,默认 Ctrl+b
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 启用鼠标支持
set -g mouse on

# 设置默认终端为 256 色
set -g default-terminal "screen-256color"
# 支持真彩色
set -ga terminal-overrides ",*256col*:Tc"

# 开启 UTF-8
set -g status-utf8 on

# 窗口编号从 1 开始
set -g base-index 1
setw -g pane-base-index 1

# 历史缓冲区大小(行数)
set -g history-limit 10000

# 重新加载配置文件
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

快捷键自定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 垂直/水平分割快捷键(更直观)
bind | split-window -h # Ctrl+b | 垂直分割
bind - split-window -v # Ctrl+b - 水平分割

# 使用 vim 方式切换窗格
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 使用 Shift 方向键调整窗格大小
bind -r H resize-pane -L 2
bind -r J resize-pane -D 2
bind -r K resize-pane -U 2
bind -r L resize-pane -R 2

状态栏自定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 状态栏颜色
set -g status-bg colour235
set -g status-fg colour250

# 左侧显示会话名
set -g status-left "#[fg=green] #S "

# 右侧显示系统信息(需安装 tmux-mem-cpu-load)
# set -g status-right "#[fg=cyan]%Y-%m-%d %H:%M "

# 状态栏刷新间隔(秒)
set -g status-interval 5

# 窗口状态样式
setw -g window-status-current-style "fg=black,bg=yellow"
setw -g window-status-style "fg=colour250,bg=colour235"

# 启用活动监控提醒
setw -g monitor-activity on
set -g visual-activity on

完整配置文件(推荐)

将以上所有配置段合并到 ~/.tmux.conf 即可获得一个功能完备的 tmux 工作环境。配置后执行 tmux source-file ~/.tmux.conf 或按 Ctrl+b r 重新加载。

九、进阶用法

命令模式

在 tmux 内按 Ctrl+b : 进入命令模式,可直接输入任何 tmux 命令:

1
2
3
4
# 命令模式示例
new-window -n system-monitor
split-window -h
rename-session dashboard

同步窗格输入

1
2
3
4
5
# 启用/禁用同步输入模式
# Ctrl+b : set-window-option synchronize-panes

# 或绑定快捷键(添加到 ~/.tmux.conf)
bind S set-window-option synchronize-panes \; display "Sync: #{?synchronize-panes,ON,OFF}"

启用后,在当前窗口的所有窗格中键入的内容将同时发送到每个窗格。非常适合同时在多台服务器上执行相同命令。

会话分组

1
2
3
4
5
# 创建一个连接到同一会话的新窗口(组会话)
tmux new-session -t mywork -s mywork-group

# 两个会话共享同一个窗口,但可以拥有独立的当前窗格
# 适用于多显示器协作场景

脚本化 tmux 布局

使用 Shell 脚本一键创建开发环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash
# 文件: dev-session.sh

SESSION="dev"

tmux new-session -d -s $SESSION

# 窗口1: 代码编辑器
tmux rename-window -t $SESSION:1 'editor'
tmux send-keys -t $SESSION:1 'cd ~/projects/myapp && vim .' C-m

# 窗口2: 编译运行
tmux new-window -t $SESSION -n 'build'
tmux send-keys -t $SESSION:2 'cd ~/projects/myapp && npm run dev' C-m

# 窗口3: Git 管理
tmux new-window -t $SESSION -n 'git'
tmux send-keys -t $SESSION:3 'cd ~/projects/myapp && git status' C-m

# 窗口4: 日志监控 - 分三栏
tmux new-window -t $SESSION -n 'logs'
tmux split-window -h
tmux split-window -v
tmux send-keys -t $SESSION:4.1 'tail -f /var/log/nginx/access.log' C-m
tmux send-keys -t $SESSION:4.2 'tail -f /var/log/nginx/error.log' C-m
tmux send-keys -t $SESSION:4.3 'dmesg -w' C-m

# 回到第一个窗口
tmux select-window -t $SESSION:1

# 连接到会话
tmux attach -t $SESSION

将此脚本保存为 dev-session.sh,运行 chmod +x dev-session.sh && ./dev-session.sh 即可一键启动完整开发环境。

使用 tmuxp(推荐)

tmuxp 是一个 Python 工具,用 YAML 文件定义 tmux 会话布局:

1
pip install tmuxp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ~/.tmuxp/dev.yaml
session_name: dev
windows:
- window_name: editor
panes:
- cd ~/projects/myapp && vim .
- window_name: build
panes:
- cd ~/projects/myapp && npm run dev
- window_name: git
panes:
- cd ~/projects/myapp && lazygit
- window_name: logs
layout: even-horizontal
panes:
- tail -f /var/log/nginx/access.log
- tail -f /var/log/nginx/error.log

启动:tmuxp load dev

十、实战场景

场景一:远程服务器管理

1
2
3
4
5
6
# 连接服务器后立即创建 tmux 会话
ssh user@server -t 'tmux new-session -A -s main'
# -A:如果会话存在则附加,否则创建

# 在 tmux 内工作,即使网络断开(SSH 超时)
# 重新连接后执行 tmux attach

场景二:多服务器批量操作

1
2
3
4
5
6
7
# 1. 创建一个新窗口
# Ctrl+b c
# 2. 水平分割成两个窗格
# Ctrl+b %
# 3. 在每个窗格 SSH 到不同服务器
# 4. 启用同步输入:Ctrl+b : set-window-option synchronize-panes
# 5. 执行命令,所有服务器同步运行

场景三:监控仪表板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建监控会话
tmux new-session -d -s monitor
tmux rename-window '系统监控'
tmux split-window -h
tmux split-window -v -p 40
tmux select-pane -t 1
tmux split-window -v

# 在每个窗格启动监控工具
tmux send-keys -t 1 'htop' C-m
tmux send-keys -t 2 'watch -n 2 "df -h"' C-m
tmux send-keys -t 3 'journalctl -f -u nginx' C-m
tmux send-keys -t 4 'iftop' C-m

tmux attach -t monitor

场景四:持久化工作环境

tmux 会话默认持久化运行——即使关闭终端窗口、退出 SSH 或重启本地机器,tmux 会话中的所有进程继续在后台运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 在服务器上创建 tmux 会话运行长时间任务
tmux new-session -s long-running

# 启动长时间任务
./big-data-processing.sh

# 按 Ctrl+b d 分离
# 关闭终端,回家吃饭

# 回来后重新连接到服务器
ssh user@server
tmux attach -t long-running
# 任务仍在运行,输出还在!

十一、常用快捷键速查

分类快捷键(前缀Ctrl+b)功能
会话Ctrl+b d分离当前会话
Ctrl+b s交互式选择会话
Ctrl+b $重命名当前会话
Ctrl+b ( )上一个/下一个会话
窗口Ctrl+b c创建新窗口
Ctrl+b n / p下一个/上一个窗口
Ctrl+b 0-9切换到指定编号窗口
Ctrl+b ,重命名当前窗口
Ctrl+b &关闭当前窗口(需确认)
窗格Ctrl+b %垂直分割窗格(左右)
Ctrl+b "水平分割窗格(上下)
Ctrl+b o循环切换窗格
Ctrl+b ↑/↓/←/→按方向切换到相邻窗格
Ctrl+b z窗格全屏/还原
Ctrl+b { / }向前/向后交换窗格
Ctrl+b Space切换布局预设
其他Ctrl+b [进入复制模式(回滚)
Ctrl+b ]粘贴缓冲区内容
Ctrl+b :进入命令模式

十二、常见问题排查

Q1: tmux 颜色显示不正常(如 vim 配色错乱)

1
2
3
4
5
6
# 在 ~/.tmux.conf 中添加:
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"

# 同时在 ~/.bashrc 中添加:
export TERM=xterm-256color

Q2: 鼠标滚轮无法滚动

1
2
3
# 确认已启用鼠标支持:
set -g mouse on
# 重新加载配置后生效

Q3: 所有会话不见了(tmux server 重启)

1
2
3
4
5
6
# tmux server 在系统重启后会丢失所有会话
# 解决方案:使用 tmux-resurrect 插件自动保存/恢复
# 在 ~/.tmux.conf 中添加:
# set -g @plugin 'tmux-plugins/tmux-resurrect'
# set -g @plugin 'tmux-plugins/tmux-continuum'
# 然后安装 TPM(Tmux Plugin Manager)

Q4: SSH 断开后无法重连

1
2
3
4
5
6
7
# 正常流程:
# 1. 重新 SSH 到服务器
# 2. 执行 tmux attach 或 tmux a
# 3. 如果提示 "no sessions",说明 Server 进程已终止

# 使用 autossh 自动重连 SSH
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" user@server

Q5: 复制粘贴失效

1
2
3
4
# tmux 的复制模式需要额外步骤
# 方法1:按住 Shift 选中文本(xterm/gnome-terminal 支持)
# 方法2:Ctrl+b [ 进入复制模式 → 空格选择 → Enter 复制 → Ctrl+b ] 粘贴
# 方法3:启用鼠标模式后,选中自动复制(需配置)

十三、推荐插件

TPM(Tmux Plugin Manager)是目前最流行的插件管理工具:

1
2
3
4
5
6
7
8
9
# 安装 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'
# run '~/.tmux/plugins/tpm/tpm'

推荐插件列表:

插件名功能
tmux-sensible一组合理的默认配置
tmux-resurrect保存/恢复整个 tmux 环境
tmux-continuum自动保存并恢复(配合 resurrect)
tmux-yank增强复制粘贴,支持系统剪贴板
tmux-cpu状态栏显示 CPU/内存负载
tmux-prefix-highlight状态栏显示当前是否按下前缀键

tmux 的学习曲线虽然比普通终端略陡峭,但一旦掌握,它将成为你日常开发运维中最高效的工具之一——从多服务器批量操作到复杂的开发环境布局,tmux 都能大幅提升工作效率。建议从基本会话管理开始,逐步掌握窗口和窗格操作,最后根据自己的工作流定制配置文件和快捷键。

本文由AI辅助生成,内容仅供参考

  • 标题: Linux tmux 终端复用器完全指南:从入门到精通
  • 作者: Someone
  • 创建于 : 2026-06-10 00:21:00
  • 更新于 : 2026-06-18 08:39:57
  • 链接: https://demo-blog.qusite.cn/2026-06-10-tmux-guide/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。