tmux完整使用指南
tmux 完整使用指南
tmux(Terminal MUltipleXer)是一个终端复用器,允许你在一个终端窗口里同时运行多个会话,并在断开 SSH 后让程序继续在后台运行。
一、核心概念
理解这三层结构是掌握 tmux 的关键:
Server(服务器)
└── Session(会话) ← 一个独立工作区,断开 SSH 后仍存活
└── Window(窗口) ← 相当于浏览器的标签页
└── Pane(面板) ← 窗口内的分屏区域
为什么要用 tmux?
- SSH 断开后进程继续运行(不用 nohup 或 screen)
- 一个终端同时看多个程序的输出
- 随时"接回"之前的工作现场
二、安装
# Ubuntu / Debian
sudo apt update && sudo apt install tmux -y
# CentOS / RHEL
sudo yum install tmux -y
# macOS
brew install tmux
# 验证安装
tmux -V
三、前缀键(Prefix Key)
tmux 所有快捷键都需要先按前缀键,默认是 Ctrl + b。
操作方式:
1. 按住 Ctrl,同时按 b,然后松开
2. 再按目标键
文档中写法:
prefix代表Ctrl+b
四、快速上手:挂后台运行 OpenCode
这是最常用场景,直接从这里开始:
# 1. 创建一个名为 opencode 的新会话
tmux new -s opencode
# 2. 在会话里启动 opencode(或任何程序)
opencode
# 3. 将会话放到后台(detach),程序继续运行
# 按 prefix,再按 d
Ctrl+b → d
# 4. 现在可以安全断开 SSH,opencode 仍在跑
# 5. 重新连接服务器后,接回会话
tmux attach -t opencode
# 或简写
tmux a -t opencode
五、会话管理(Session)
创建会话
tmux # 创建匿名会话
tmux new # 同上
tmux new -s work # 创建名为 work 的会话
tmux new -s work -d # 创建后直接放后台(不进入)
切换/接入会话
tmux ls # 列出所有会话
tmux attach # 接入最近的会话
tmux attach -t work # 接入名为 work 的会话
tmux a -t 0 # 接入编号为 0 的会话
会话内快捷键
| 快捷键 | 功能 |
|---|---|
prefix d |
Detach(放后台),会话继续运行 |
prefix s |
列出所有会话(交互选择) |
prefix $ |
重命名当前会话 |
prefix ( |
切换到上一个会话 |
prefix ) |
切换到下一个会话 |
删除会话
tmux kill-session -t work # 删除名为 work 的会话
tmux kill-server # 杀掉所有会话(谨慎)
六、窗口管理(Window)
窗口相当于浏览器的标签页,一个会话可以有多个窗口。
窗口快捷键
| 快捷键 | 功能 |
|---|---|
prefix c |
新建窗口 |
prefix , |
重命名当前窗口 |
prefix & |
关闭当前窗口(会确认) |
prefix n |
切换到下一个窗口 |
prefix p |
切换到上一个窗口 |
prefix 0~9 |
直接跳转到对应编号的窗口 |
prefix w |
列出所有窗口(交互选择) |
prefix f |
搜索窗口名称 |
窗口状态栏说明
底部状态栏显示当前所有窗口,* 表示当前窗口,- 表示上一个访问的窗口:
[opencode] 0:bash 1:opencode* 2:monitor-
七、面板管理(Pane)
面板是在一个窗口内分割出多个终端区域。
分屏快捷键
| 快捷键 | 功能 |
|---|---|
prefix % |
垂直分割(左右两个面板) |
prefix " |
水平分割(上下两个面板) |
prefix x |
关闭当前面板(会确认) |
prefix z |
最大化/还原当前面板 |
prefix q |
显示面板编号(快速跳转) |
prefix { |
将当前面板向左移 |
prefix } |
将当前面板向右移 |
面板切换
| 快捷键 | 功能 |
|---|---|
prefix 方向键 |
切换到对应方向的面板 |
prefix o |
顺序循环切换面板 |
prefix ; |
切换到上一个活跃面板 |
面板大小调整
按住 prefix 后,再按住 Alt + 方向键(不需要松开 Alt):
prefix,然后按住 Alt + 上/下/左/右
或者使用命令模式(prefix : 进入):
resize-pane -D 5 # 向下扩展 5 行
resize-pane -U 5 # 向上扩展 5 行
resize-pane -L 5 # 向左扩展 5 列
resize-pane -R 5 # 向右扩展 5 列
八、命令模式
按 prefix : 进入命令模式(类似 vim 的 : 命令行):
:new-session -s myname # 新建会话
:rename-session newname # 重命名会话
:kill-session # 关闭当前会话
:split-window -h # 水平分割(= prefix %)
:split-window -v # 垂直分割(= prefix ")
:setw synchronize-panes on # 同步输入到所有面板(批量操作多台服务器时很有用)
:setw synchronize-panes off # 关闭同步
九、复制模式(Copy Mode)
可以在 tmux 中滚动查看历史输出并复制文本。
进入/退出复制模式
| 操作 | 说明 |
|---|---|
prefix [ |
进入复制模式 |
q 或 Esc |
退出复制模式 |
prefix ] |
粘贴复制的内容 |
复制模式内的操作(默认 emacs 风格)
| 按键 | 功能 |
|---|---|
方向键 / Page Up / Page Down |
滚动 |
Ctrl + b |
向上翻页 |
Ctrl + f |
向下翻页 |
g |
跳到最顶部 |
G |
跳到最底部 |
Ctrl + s |
向下搜索 |
Space |
开始选择 |
Enter |
复制选中内容,退出复制模式 |
十、配置文件 ~/.tmux.conf
tmux 支持通过 ~/.tmux.conf 自定义行为,修改后用 prefix r 重载(需要先配置重载快捷键)。
推荐配置(适合开发用途)
# 创建或编辑配置文件
nano ~/.tmux.conf
粘贴以下内容:
# ===== 前缀键改为 Ctrl+a(更顺手,可选)=====
# unbind C-b
# set -g prefix C-a
# bind C-a send-prefix
# ===== 基础设置 =====
set -g default-terminal "screen-256color" # 256 色支持
set -g history-limit 50000 # 滚动历史增加到 5 万行
set -g mouse on # 开启鼠标支持(可用鼠标滚动、点击切换面板)
set -g base-index 1 # 窗口编号从 1 开始(不从 0)
setw -g pane-base-index 1 # 面板编号也从 1 开始
set -g renumber-windows on # 关闭窗口后自动重新编号
# ===== 快捷键增强 =====
# 用 prefix r 重载配置文件
bind r source-file ~/.tmux.conf \; display "配置已重载!"
# 用 | 和 - 来分屏(更直观)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %
# 新建窗口时保持当前路径
bind c new-window -c "#{pane_current_path}"
# 用 Alt+方向键 切换面板(不需要按 prefix)
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# ===== 状态栏美化 =====
set -g status-style bg=colour235,fg=colour136
set -g status-left "#[fg=colour2][#S] " # 左侧显示会话名
set -g status-right "#[fg=colour244]%Y-%m-%d %H:%M" # 右侧显示时间
set -g status-right-length 50
set -g window-status-current-style fg=colour166,bold
# ===== 复制模式改为 vim 风格(可选)=====
# setw -g mode-keys vi
修改后,在 tmux 内按 prefix r 重载,或者重启 tmux。
十一、实用工作流
场景一:运行 OpenCode 并挂后台
# 创建专用会话
tmux new -s opencode
# 进入项目目录并启动
cd ~/my-project
opencode
# 放后台(detach)
Ctrl+b d
# 之后随时接回
tmux attach -t opencode
场景二:同时监控日志 + 操作终端
tmux new -s monitor
# 分割出上下两个面板
prefix "
# 上面面板:查看日志
tail -f /var/log/nginx/access.log
# 切换到下面面板
prefix 方向键↓
# 下面面板:正常操作
ls -la
场景三:多个项目同时进行
# 创建多个会话
tmux new -s project-a -d
tmux new -s project-b -d
tmux new -s monitor -d
# 查看所有会话
tmux ls
# 在会话间跳转
tmux attach -t project-a
prefix s # 列出所有会话,方向键选择,Enter 确认
场景四:在不同服务器上用同一套会话名
养成统一命名习惯,不管在哪台服务器:
tmux new -s main # 主工作区
tmux new -s logs # 日志监控
tmux new -s deploy # 部署操作
十二、常用命令速查表
终端命令(tmux 外)
| 命令 | 说明 |
|---|---|
tmux |
新建匿名会话 |
tmux new -s name |
新建命名会话 |
tmux ls |
列出所有会话 |
tmux attach -t name |
接入会话 |
tmux kill-session -t name |
删除会话 |
tmux kill-server |
杀掉所有会话 |
快捷键速查(prefix = Ctrl+b)
| 快捷键 | 说明 |
|---|---|
| 会话 | |
prefix d |
Detach(放后台) |
prefix s |
切换会话 |
prefix $ |
重命名会话 |
| 窗口 | |
prefix c |
新建窗口 |
prefix , |
重命名窗口 |
prefix n/p |
下一个/上一个窗口 |
prefix 0-9 |
直接跳转窗口 |
prefix w |
窗口列表 |
prefix & |
关闭窗口 |
| 面板 | |
prefix % |
左右分屏 |
prefix " |
上下分屏 |
prefix 方向键 |
切换面板 |
prefix z |
最大化/还原面板 |
prefix x |
关闭面板 |
prefix q |
显示面板编号 |
| 其他 | |
prefix [ |
进入复制/滚动模式 |
prefix ? |
查看所有快捷键 |
prefix : |
进入命令模式 |
十三、常见问题
Q: 连接断开后,会话还在吗?
A: 只要你用的是 detach(prefix d)放后台,或者 SSH 意外断开,会话都会继续在服务器上运行。重新 SSH 连接后用 tmux attach 接回即可。
Q: 为什么复制出来的内容乱码或有换行问题?
A: 确认 tmux 版本是否支持 set -g mouse on,某些老版本写法不同。或者直接用鼠标选中文字再右键复制。
Q: 如何在多个面板里同时执行同一条命令(比如批量操作多台服务器)?
A: 进入命令模式执行 :setw synchronize-panes on,之后在任意面板输入的命令会同步发送到所有面板。完成后执行 :setw synchronize-panes off 关闭。
Q: 前缀键 Ctrl+b 按起来太麻烦,能改吗?
A: 可以,把 ~/.tmux.conf 里前缀键那段取消注释,改成 Ctrl+a(screen 的习惯),然后重载配置。
Q: tmux 和 screen 有什么区别?
A: screen 更老,功能更简单;tmux 功能更丰富(分屏、脚本化、配置灵活),现代 Linux 优先推荐 tmux。
十四、进阶技巧
启动时自动恢复会话(tmux-resurrect 插件)
# 安装 tpm(tmux 插件管理器)
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-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
run '~/.tmux/plugins/tpm/tpm'
# 重载配置后,按 prefix I 安装插件
安装后:
- prefix Ctrl+s 手动保存所有会话
- prefix Ctrl+r 手动恢复
- 开启 continuum 后每 15 分钟自动保存,重启服务器后自动恢复
用脚本一键搭建工作环境
#!/bin/bash
# startup.sh - 一键启动工作环境
SESSION="work"
# 如果会话已存在,直接接入
tmux has-session -t $SESSION 2>/dev/null
if [ $? -eq 0 ]; then
tmux attach -t $SESSION
exit 0
fi
# 新建会话,第一个窗口:opencode
tmux new-session -d -s $SESSION -n opencode
tmux send-keys -t $SESSION:1 "cd ~/my-project && opencode" Enter
# 新建第二个窗口:日志监控
tmux new-window -t $SESSION -n logs
tmux send-keys -t $SESSION:2 "tail -f /var/log/syslog" Enter
# 新建第三个窗口:空的操作终端
tmux new-window -t $SESSION -n shell
tmux select-window -t $SESSION:3
# 接入会话
tmux attach -t $SESSION
chmod +x startup.sh
./startup.sh