适用范围:tmux 3.2+、Linux 服务器、SSH 远程维护、Docker/系统服务排查、长时间命令执行。
写法原则:优先采用 tmux 官方手册和当前主流用法,避开旧教程里已经不推荐或容易踩坑的配置。
一、tmux 是什么h2
tmux 是 terminal multiplexer,终端复用器。
它解决的不是“终端好不好看”的问题,而是:
- SSH 断开后任务不要跟着死。
- 一个 SSH 窗口里同时管理多个 shell、日志、编辑器、监控命令。
- 离开电脑后,回来可以继续原来的终端现场。
- 多台设备连接同一台服务器时,可以重新接回原来的工作环境。
典型场景:
ssh user@servertmux new -As main然后你在里面执行升级、编译、下载、Docker 部署、日志观察。即使 SSH 断开,tmux session 里的程序仍然留在服务器上。重新 SSH 回来后:
tmux attach -t main即可回到原来的界面。
tmux 不等于后台任务管理器。长期服务应该交给 systemd、Docker、supervisor 等管理;tmux 适合临时维护、调试、交互式任务、长时间命令观察。
二、tmux 的核心模型h2
理解 tmux 只需要记住四个概念:
tmux server└── session 会话 └── window 窗口 └── pane 面板2.1 serverh3
tmux 启动后会在后台运行一个 tmux server。所有 session、window、pane 都由这个 server 管理。
一般用户不用手动管理 server。只有在配置彻底乱了、需要完全重启 tmux 时,才会用:
tmux kill-server注意:kill-server 会杀掉所有 tmux session,里面运行的任务也会结束。不要随便用。
2.2 sessionh3
session 是工作区。
建议按用途命名:
tmux new -s maintmux new -s dockertmux new -s deploytmux new -s logs不要长期用默认的 0、1、2,否则多个会话后很难区分。
2.3 windowh3
window 类似浏览器标签页。
一个 session 里可以有多个 window。例如:
main session├── 1:shell├── 2:docker├── 3:logs└── 4:edit2.4 paneh3
pane 是一个 window 里的分屏区域。
适合临时对照:
左边:编辑配置右上:查看日志右下:执行测试命令pane 不宜无限分。超过 3~4 个 pane 可读性会下降,这时更适合新建 window。
三、安装与版本检查h2
Debian / Ubuntuh3
sudo apt updatesudo apt install -y tmuxRocky / Alma / CentOS / Fedorah3
sudo dnf install -y tmux旧 CentOS 可能是:
sudo yum install -y tmuxArch Linuxh3
sudo pacman -S tmuxmacOSh3
brew install tmux检查版本h3
tmux -V建议使用 tmux 3.2 或更新版本。很多现代配置,比如 terminal-features、copy-command,都是 tmux 3.2+ 更合适。
如果系统仓库版本太老,不要盲目套新配置。先确认:
tmux -V四、最常用的 tmux 命令h2
4.1 创建或进入一个 sessionh3
最推荐的日常命令:
tmux new -As main含义:
new:创建 session-s main:session 名叫 main-A:如果 main 已存在,就直接 attach 进去;如果不存在,就创建
这比下面两步更适合日常使用:
tmux new -s maintmux attach -t main4.2 查看已有 sessionh3
tmux ls或:
tmux list-sessions4.3 进入指定 sessionh3
tmux attach -t main如果同一个 session 已经被别的客户端占用,并且你希望把旧客户端踢掉:
tmux attach -d -t main这在你换电脑、换终端、SSH 断开后重新连接时很常用。
4.4 退出但保留 sessionh3
在 tmux 里面按:
Ctrl-b d含义:
Ctrl-b是默认 prefixd是 detach
detach 后,你会回到普通 shell,但 tmux 里的程序仍在后台运行。
4.5 关闭当前 pane / window / sessionh3
关闭当前 pane:
Ctrl-b x关闭当前 window:
Ctrl-b &关闭指定 session:
tmux kill-session -t main关闭全部 tmux:
tmux kill-serverkill-server 是核按钮,少用。
五、prefix 键:tmux 操作入口h2
tmux 默认 prefix 是:
Ctrl-b大部分 tmux 快捷键都是:
先按 Ctrl-b松开再按一个命令键不是同时按三个键。
例如新建 window:
Ctrl-b c意思是:
- 按住 Ctrl,按 b。
- 松开。
- 按 c。
六、必会快捷键h2
6.1 session 相关h3
| 操作 | 快捷键 |
|---|---|
| detach 当前 session | Ctrl-b d |
| 选择 session | Ctrl-b s |
| 重命名 session | Ctrl-b $ |
6.2 window 相关h3
| 操作 | 快捷键 |
|---|---|
| 新建 window | Ctrl-b c |
| 关闭 window | Ctrl-b & |
| 重命名 window | Ctrl-b , |
| 下一个 window | Ctrl-b n |
| 上一个 window | Ctrl-b p |
| 选择 window 列表 | Ctrl-b w |
| 切到编号 0~9 的 window | Ctrl-b 0 ~ Ctrl-b 9 |
| 回到上一个 active window | Ctrl-b l |
6.3 pane 相关h3
| 操作 | 快捷键 |
|---|---|
| 左右分屏 | Ctrl-b % |
| 上下分屏 | Ctrl-b " |
| 切换 pane | Ctrl-b 方向键 |
| 切到下一个 pane | Ctrl-b o |
| 显示 pane 编号 | Ctrl-b q |
| 关闭当前 pane | Ctrl-b x |
| 当前 pane 最大化/还原 | Ctrl-b z |
| 自动重新排列布局 | Ctrl-b Space |
Ctrl-b z 很重要。分屏多了以后,临时放大当前 pane 看日志、编辑文件非常实用。
七、命令模式h2
按:
Ctrl-b :进入 tmux 命令行。
例如重新加载配置:
source-file ~/.tmux.conf或者:
set -g mouse on很多 tmux 命令既可以在 shell 里执行,也可以在 tmux 命令模式里执行。
shell 里:
tmux set -g mouse ontmux 命令模式里:
set -g mouse on八、推荐的日常工作流h2
8.1 登录服务器后固定进入 mainh3
ssh user@servertmux new -As main这是最稳妥、最通用的方式。
如果你经常忘,可以加一个 alias:
alias ta='tmux new -As main'写入:
nano ~/.bashrc或 zsh:
nano ~/.zshrc添加:
alias ta='tmux new -As main'alias tls='tmux ls'生效:
source ~/.bashrc或:
source ~/.zshrc以后直接:
ta8.2 维护 Docker 服务h3
建议一个 session 叫 docker:
tmux new -As dockerwindow 规划:
1:shell 普通命令2:compose docker compose 操作3:logs docker logs -f4:monitor htop / btop / watch创建 window:
Ctrl-b cCtrl-b ,然后重命名为 logs、compose 等。
8.3 长时间命令h3
比如:
rsync -avh /data/ user@backup:/data/或:
docker compose pulldocker compose up -d放在 tmux 里执行。不要直接裸跑在普通 SSH 终端里。
8.4 看日志h3
docker logs -f container_name或:
journalctl -u nginx -f建议放在单独 window,不要和编辑配置挤在一个 pane 里。
九、复制、滚动和搜索h2
9.1 进入 copy modeh3
Ctrl-b [进入后可以用方向键、PageUp、PageDown 滚动历史输出。
退出 copy mode:
q或:
Esc9.2 使用 vi 风格复制h3
建议开启 vi mode:
setw -g mode-keys vi之后:
Ctrl-b [进入 copy mode。- 用方向键或 vi 键移动。
- 按
Space开始选择。 - 移动光标选择文本。
- 按
Enter复制。 Ctrl-b ]粘贴到 tmux pane。
9.3 搜索历史输出h3
进入 copy mode 后:
Ctrl-b [搜索:
/输入关键词后回车。
继续找下一个:
n反向搜索:
?十、鼠标支持h2
现代 tmux 可以开启鼠标:
set -g mouse on开启后可以:
- 鼠标点击切换 pane
- 拖动 pane 边框调整大小
- 鼠标滚轮查看历史
- 点击状态栏切换 window
但要注意:开启 tmux mouse 后,终端自己的鼠标选择可能会被 tmux 接管。
常见绕过方式:
- Linux 终端:按住
Shift再用鼠标选择 - iTerm2:通常按住
Option - 不同终端行为可能不同
如果你更习惯用终端原生复制,可以不开 mouse。
十一、剪贴板:现代配置方法h2
tmux 的剪贴板是最容易被旧教程误导的地方。
现在建议分两类处理。
11.1 只在 tmux 内复制粘贴h3
最简单,不需要额外配置:
Ctrl-b [Space 选择Enter 复制Ctrl-b ] 粘贴这只在 tmux 内部有效。
11.2 复制到系统剪贴板h3
现代 tmux 有两条路线:
- OSC 52:通过终端支持把内容写入本机系统剪贴板。
- 外部命令:Linux 用
xsel、xclip、wl-copy,macOS 用pbcopy。
如果你主要是 SSH 到服务器,优先考虑 OSC 52,因为它不依赖服务器上的图形环境。
推荐基础配置:
set -s set-clipboard external如果终端支持 OSC 52,这通常就够。
如果 tmux 检查不到 clipboard 能力,可以查:
tmux info | grep Ms如果显示 missing,并且你用的是 tmux 3.2+,可以按你的外层终端 TERM 添加:
set -as terminal-features ',xterm-256color:clipboard'先在 tmux 外面查:
echo $TERM假设外面是 xterm-256color,才写上面的配置。不要无脑复制别人的 TERM。
11.3 Linux 桌面环境下的外部命令h3
X11:
sudo apt install -y xseltmux 3.2+:
set -s copy-command 'xsel -ib'Wayland:
sudo apt install -y wl-clipboard配置:
set -s copy-command 'wl-copy'macOS:
set -s copy-command 'pbcopy'如果使用 copy-command,并且你的终端也支持 OSC 52,可能出现重复或冲突。二选一即可。使用外部命令时可以关掉 OSC 52:
set -s set-clipboard off十二、色彩、True Color 和 TERMh2
这部分不要乱配。
12.1 tmux 内部 TERMh3
推荐:
set -g default-terminal "tmux-256color"这比老教程里的 screen-256color 更适合现代终端和现代应用,尤其是 Neovim、复杂 TUI、斜体、增强按键等场景。
但有一个前提:目标系统的 terminfo 里必须有 tmux-256color。
检查:
infocmp tmux-256color >/dev/null && echo OK || echo MISSING如果 MISSING,先安装 ncurses terminfo,或者临时退回:
set -g default-terminal "screen-256color"12.2 True Color / RGBh3
tmux 3.2+ 推荐:
set -as terminal-features ',xterm-256color:RGB'这里的 xterm-256color 应该替换为你 tmux 外面的 TERM:
echo $TERM例如外面是 wezterm,就不要照抄 xterm-256color。应按实际情况配置。
不要再优先使用旧教程里的:
set -ga terminal-overrides ",*:Tc"terminal-overrides 不是不能用,而是对 tmux 3.2+ 来说,terminal-features 更清晰、更现代。
十三、推荐 .tmux.confh2
下面是一份克制、现代、适合服务器的配置。
创建:
subl ~/.tmux.conf如果服务器没有 Sublime,就用:
nano ~/.tmux.conf内容:
##### 基础行为 #####
# 使用现代 tmux terminfo;如果服务器缺少 tmux-256color,再改为 screen-256colorset -g default-terminal "tmux-256color"
# True Color。这里假设 tmux 外层 TERM 是 xterm-256color;请按 echo $TERM 调整set -as terminal-features ',xterm-256color:RGB'
# 开启鼠标:可点击 pane、调整大小、滚轮查看历史set -g mouse on
# vi 风格 copy modesetw -g mode-keys vi
# 更大的历史滚动缓存set -g history-limit 50000
# 从 1 开始编号,比 0 更直观set -g base-index 1setw -g pane-base-index 1
# 新建 window/pane 时自动重新编号,避免 1 3 5 这种空洞set -g renumber-windows on
# 降低 Esc 延迟;本机或高速 SSH 可以设很低,网络差可改大一点set -sg escape-time 10
# 开启焦点事件,Neovim 等程序可感知终端焦点变化set -g focus-events on
##### 窗口与 pane 操作 #####
# 更直观的分屏快捷键:| 左右分屏,- 上下分屏bind | split-window -hbind - split-window -v
# 保留当前路径新建 pane/windowbind c new-window -c "#{pane_current_path}"bind '"' split-window -v -c "#{pane_current_path}"bind % split-window -h -c "#{pane_current_path}"bind | split-window -h -c "#{pane_current_path}"bind - split-window -v -c "#{pane_current_path}"
# r 重新加载配置bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"
# h/j/k/l 切换 pane,适合习惯 Vim 的用户bind h select-pane -Lbind j select-pane -Dbind k select-pane -Ubind l select-pane -R
# H/J/K/L 调整 pane 大小bind -r H resize-pane -L 5bind -r J resize-pane -D 5bind -r K resize-pane -U 5bind -r L resize-pane -R 5
##### 复制模式 #####
# vi 模式下按 v 开始选择,y 复制bind -T copy-mode-vi v send -X begin-selectionbind -T copy-mode-vi y send -X copy-selection-and-cancel
##### 状态栏:简洁实用 #####
set -g status onset -g status-interval 5set -g status-position bottom
set -g status-left-length 40set -g status-left '#[bold] #S #[default]'
set -g status-right-length 80set -g status-right ' %Y-%m-%d %H:%M '
setw -g window-status-format ' #I:#W 'setw -g window-status-current-format ' #I:#W* '加载配置:
tmux source-file ~/.tmux.conf如果涉及 default-terminal、terminal-features、set-clipboard 这类底层终端能力,建议完全退出 tmux 后重启:
tmux kill-servertmux new -As main注意:tmux kill-server 会结束所有 tmux 里的程序。先确认没有重要任务。
十四、是否要改 prefixh2
很多教程会建议把 prefix 从 Ctrl-b 改成 Ctrl-a:
set -g prefix C-aunbind C-bbind C-a send-prefix这不是必须。
建议:
- 新手先用默认
Ctrl-b - 如果你以前用 GNU screen,或者觉得
Ctrl-b难按,再改Ctrl-a - 不要刚开始就照抄一堆陌生键位,否则排错很痛苦
如果你想让 Ctrl-a 和 Ctrl-b 都能用:
set -g prefix C-abind C-b send-prefixbind C-a send-prefix但长期看,保留一个主 prefix 更干净。
十五、TPM 插件管理器:可选,不是必需h2
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'
# TPM 初始化,必须放在配置文件底部run '~/.tmux/plugins/tpm/tpm'加载配置:
tmux source-file ~/.tmux.conf安装插件:
Ctrl-b I更新插件:
Ctrl-b U卸载不再配置的插件:
Ctrl-b Alt-u建议少装插件。优先掌握 tmux 原生命令和配置。插件越多,跨服务器迁移越麻烦。
比较实用的插件:
set -g @plugin 'tmux-plugins/tmux-sensible'set -g @plugin 'tmux-plugins/tmux-resurrect'tmux-resurrect 可以保存和恢复 tmux 布局,但不要误以为它能可靠恢复所有程序状态。对于数据库、Docker、系统服务,仍然应该交给服务管理器。
十六、不建议继续照抄的旧写法h2
16.1 老式 copy mode 绑定h3
旧教程可能有:
bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'这属于旧版本写法。tmux 2.4 之后 copy mode key table 方式变了。现代配置应使用:
bind -T copy-mode-vi y send -X copy-selection-and-canceltmux 3.2+ 要统一外部复制命令,用:
set -s copy-command 'xsel -ib'16.2 老式样式配置h3
旧教程可能写:
set -g status-fg whiteset -g status-bg blackset -g mode-fg yellowset -g mode-bg blue现代写法应使用 *-style:
set -g status-style fg=white,bg=blackset -g mode-style fg=yellow,bg=blue16.3 无脑 default-terminal xterm-256colorh3
不要在 tmux 里这样写:
set -g default-terminal "xterm-256color"tmux 内部的 TERM 应该描述 tmux 提供的终端能力,而不是假装自己是外层终端。现代优先:
set -g default-terminal "tmux-256color"不兼容时再退回:
set -g default-terminal "screen-256color"16.4 无脑 terminal-overrides ",*:Tc"h3
旧写法:
set -ga terminal-overrides ",*:Tc"现代 tmux 3.2+ 更推荐:
set -as terminal-features ',xterm-256color:RGB'并且应根据 tmux 外层的 echo $TERM 调整,不要对所有终端 * 一刀切。
16.5 把 tmux 当成服务守护工具h3
不要用 tmux 长期托管正式服务,例如:
tmux new -s app 'python app.py'这适合临时调试,不适合生产。
正式服务应该用:
- systemd
- Docker Compose
- supervisor
- pm2
- Kubernetes
tmux 负责交互式维护,不负责服务生命周期。
十七、常见问题排查h2
17.1 no sessionsh3
说明当前没有 tmux session。
创建一个:
tmux new -As main17.2 SSH 断了,回来怎么恢复h3
重新登录服务器:
ssh user@servertmux lstmux attach -t main如果只想一条命令:
tmux new -As main17.3 进入 tmux 后颜色不对h3
先查 tmux 版本:
tmux -V查外层 TERM:
echo $TERM在 tmux 内查:
echo $TERM推荐配置:
set -g default-terminal "tmux-256color"set -as terminal-features ',xterm-256color:RGB'如果系统没有 tmux-256color:
infocmp tmux-256color没有就先改成:
set -g default-terminal "screen-256color"17.4 鼠标复制不好用h3
如果开启了:
set -g mouse ontmux 会接管鼠标。可以:
- 按住
Shift再选择 - 或关闭 mouse:
set -g mouse off17.5 pane 太多看不清h3
用:
Ctrl-b z放大当前 pane。
或者把不同任务拆成不同 window,而不是堆在一个 window 里。
17.6 配置改了不生效h3
普通配置可以:
tmux source-file ~/.tmux.conf或在 tmux 里:
Ctrl-b :source-file ~/.tmux.conf底层终端能力相关配置,建议重启 tmux server:
tmux kill-servertmux new -As main前提是确认没有重要任务。
17.7 不小心卡住或乱了h3
先尝试 detach:
Ctrl-b d然后重新 attach:
tmux attach -d -t main不要第一反应就 kill-server。
十八、推荐别名h2
写入 ~/.bashrc 或 ~/.zshrc:
alias ta='tmux new -As main'alias tls='tmux ls'alias tat='tmux attach -t'alias tks='tmux kill-session -t'用法:
tatlstat dockertks logs如果你经常按项目创建 session,可以用函数:
tnew() { name="${1:-main}" tmux new -As "$name"}用法:
tnewtnew dockertnew deploy十九、脚本化创建工作区h2
如果你经常固定开几个窗口,可以写脚本。
例如 ~/bin/tmux-main:
#!/usr/bin/env bashset -euo pipefail
SESSION="main"
tmux has-session -t "$SESSION" 2>/dev/null && { tmux attach -t "$SESSION" exit 0}
tmux new-session -d -s "$SESSION" -n shell
tmux new-window -t "$SESSION:" -n dockertmux new-window -t "$SESSION:" -n logstmux new-window -t "$SESSION:" -n monitor
tmux send-keys -t "$SESSION:monitor" "htop" C-m
tmux select-window -t "$SESSION:1"tmux attach -t "$SESSION"授权:
chmod +x ~/bin/tmux-main运行:
tmux-main这个脚本的逻辑是:
- 如果
main已存在,直接进入。 - 如果不存在,创建
shell/docker/logs/monitor几个 window。 - 在 monitor window 自动运行
htop。 - 进入 session。
二十、最小学习路径h2
如果你只想快速上手,先记这几个:
tmux new -As main # 创建或进入 maintmux ls # 查看 sessiontmux attach -t main # 进入 maintmux attach -d -t main # 踢掉旧客户端并进入快捷键:
Ctrl-b d detachCtrl-b c 新建 windowCtrl-b , 重命名 windowCtrl-b n 下一个 windowCtrl-b p 上一个 windowCtrl-b % 左右分屏Ctrl-b " 上下分屏Ctrl-b 方向键 切换 paneCtrl-b z 放大/还原 paneCtrl-b [ 滚动/复制模式Ctrl-b ] 粘贴 tmux buffer日常使用原则:
- SSH 到服务器后先进入 tmux。
- 长时间命令必须放 tmux 里。
- session 按用途命名。
- window 按任务拆分。
- pane 只做临时对照,不要无限分屏。
- 服务交给 systemd/Docker,tmux 只做维护现场。
- 配置从少到多,不要一开始复制复杂主题和插件。