tmux 完整使用指南

tmux(Terminal MUltipleXer)是一个终端复用器,允许你在一个终端窗口里同时运行多个会话,并在断开 SSH 后让程序继续在后台运行。


一、核心概念

理解这三层结构是掌握 tmux 的关键:

Server(服务器)
└── Session(会话)        ← 一个独立工作区,断开 SSH 后仍存活
    └── Window(窗口)     ← 相当于浏览器的标签页
        └── Pane(面板)   ← 窗口内的分屏区域

为什么要用 tmux?
- SSH 断开后进程继续运行(不用 nohupscreen
- 一个终端同时看多个程序的输出
- 随时"接回"之前的工作现场


二、安装

# 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 [ 进入复制模式
qEsc 退出复制模式
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: 只要你用的是 detachprefix 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
文章作者: tutu
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 TutuのBlog
喜欢就支持一下吧