Linux tmux 终端复用器完全指南:从入门到精通
一、tmux 简介
tmux(Terminal Multiplexer)是一款功能强大的终端复用器,允许用户在单个终端窗口中创建、管理和切换多个会话。对于服务器管理员和开发者来说,tmux 几乎是必备工具——它让你在 SSH 断开后依然保持任务运行,在单个窗口中同时监控多台服务器日志,还能保存和恢复完整的工作环境。
tmux 与 GNU Screen 对比
| 特性 | tmux | GNU 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
| sudo yum install tmux -y
sudo yum install epel-release -y sudo yum install tmux -y
|
macOS
验证安装
三、核心概念与架构
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
|
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 kill-session -t mywork
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 '日志监控'
tmux rename-window -t mywork:3 '实时日志'
|
六、窗格管理
窗格分割是 tmux 最实用的功能之一,让你在单个窗口中并排运行多个终端。
分割窗格
窗格导航与调整
| 操作 |
快捷键 |
| 切换到上/下/左/右窗格 |
Ctrl+b ↑/↓/←/→ |
| 循环切换窗格 |
Ctrl+b o |
| 显示窗格编号 |
Ctrl+b q |
| 调整窗格大小 |
Ctrl+b Ctrl+↑/↓/←/→ |
| 关闭当前窗格 |
Ctrl+b x |
| 将窗格全屏/恢复 |
Ctrl+b z |
| 交换窗格位置 |
Ctrl+b { }(左花括号向前,右花括号向后) |
窗格布局
快速创建三列布局:
七、复制模式与滚动
tmux 默认没有原生滚轮支持,需要进入复制模式才能回滚查看历史输出。
启用鼠标滚动(推荐)
在 ~/.tmux.conf 中添加:
启用后即可使用鼠标滚轮直接滚动查看历史输出,拖拽窗格分割线调整大小,点击切换窗格。
八、配置 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
|
set -g prefix C-a unbind C-b bind C-a send-prefix
set -g mouse on
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
set -g status-utf8 on
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 bind - split-window -v
bind h select-pane -L bind j select-pane -D bind k select-pane -U bind l select-pane -R
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 "
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
|
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
SESSION="dev"
tmux new-session -d -s $SESSION
tmux rename-window -t $SESSION:1 'editor' tmux send-keys -t $SESSION:1 'cd ~/projects/myapp && vim .' C-m
tmux new-window -t $SESSION -n 'build' tmux send-keys -t $SESSION:2 'cd ~/projects/myapp && npm run dev' C-m
tmux new-window -t $SESSION -n 'git' tmux send-keys -t $SESSION:3 'cd ~/projects/myapp && git status' C-m
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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
| ssh user@server -t 'tmux new-session -A -s main'
|
场景二:多服务器批量操作
场景三:监控仪表板
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 new-session -s long-running
./big-data-processing.sh
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
| set -g default-terminal "tmux-256color" set -ga terminal-overrides ",*256col*:Tc"
export TERM=xterm-256color
|
Q2: 鼠标滚轮无法滚动
Q3: 所有会话不见了(tmux server 重启)
Q4: SSH 断开后无法重连
1 2 3 4 5 6 7
|
autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" user@server
|
Q5: 复制粘贴失效
十三、推荐插件
TPM(Tmux Plugin Manager)是目前最流行的插件管理工具:
1 2 3 4 5 6 7 8 9
| git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
|
推荐插件列表:
| 插件名 | 功能 |
| tmux-sensible | 一组合理的默认配置 |
| tmux-resurrect | 保存/恢复整个 tmux 环境 |
| tmux-continuum | 自动保存并恢复(配合 resurrect) |
| tmux-yank | 增强复制粘贴,支持系统剪贴板 |
| tmux-cpu | 状态栏显示 CPU/内存负载 |
| tmux-prefix-highlight | 状态栏显示当前是否按下前缀键 |
tmux 的学习曲线虽然比普通终端略陡峭,但一旦掌握,它将成为你日常开发运维中最高效的工具之一——从多服务器批量操作到复杂的开发环境布局,tmux 都能大幅提升工作效率。建议从基本会话管理开始,逐步掌握窗口和窗格操作,最后根据自己的工作流定制配置文件和快捷键。
本文由AI辅助生成,内容仅供参考