Tmux 是一个终端多路复用器(terminal multiplexer),可以在一个终端连接中管理多个独立的终端环境。它最常用来做分屏、后台运行任务、断线重连和远程服务器长期会话管理。

适用场景

  • 在一个 SSH 连接里同时查看日志、运行服务、执行命令。
  • 让构建、部署、数据处理等长任务在后台继续运行。
  • 网络断开后重新连接服务器,继续回到之前的工作现场。
  • 把一个工作区拆成多个窗口和窗格,减少频繁开关终端。

安装

Ubuntu / Debian:

1
2
sudo apt update
sudo apt install tmux

macOS:

1
brew install tmux

安装后查看版本:

1
tmux -V

核心结构

Tmux 的层级结构是:

1
2
3
4
5
6
7
8
9
10
tmux
├── session0
│ ├── window0
│ │ ├── pane0
│ │ ├── pane1
│ │ └── pane2
│ ├── window1
│ └── window2
├── session1
└── session2
  • session:一次独立工作会话,例如 devlogdeploy
  • window:会话里的一个工作窗口,类似浏览器标签页。
  • pane:窗口里的分屏区域。

可以简单理解为:

1
2
3
session = 项目工作区
window = 工作区里的标签页
pane = 标签页里的分屏终端

Prefix 前缀键

Tmux 的快捷键通常由两步组成:

  1. 先按 Prefix。
  2. 再按具体操作键。

默认 Prefix 是:

1
Ctrl + b

很多人会改成更顺手的:

1
Ctrl + a

下文统一使用 Prefix 表示你配置的前缀键。

常用命令

配置加载

1
tmux source-file ~/.tmux.conf

修改 ~/.tmux.conf 后,可以用这个命令重新加载配置。

会话操作

新建会话

1
tmux

新建一个默认会话,里面包含一个 window 和一个 pane。

1
tmux new -s dev

新建一个名为 dev 的会话。管理多个会话时,建议总是命名,例如 devlogdeploy

查看会话

1
tmux ls

查看当前所有 tmux 会话。

进入会话

1
tmux a

进入最近一次挂起的会话。

1
tmux a -t dev

进入指定名称的会话。

挂起会话

1
Prefix + d

挂起当前 session。挂起后,里面的进程仍会继续运行。

重命名会话

1
Prefix + $

重命名当前 session。

选择会话

1
Prefix + s

打开 session 列表。

列表中常用按键:

  • ArrowUp:选择上一项。
  • ArrowDown:选择下一项。
  • ArrowRight:展开当前 session/window。
  • ArrowLeft:折叠当前 session/window。

窗口操作

新建窗口

1
Prefix + c

在当前 session 中新建一个 window。

关闭窗口

1
Prefix + &

关闭当前 window,会弹出确认。

选择窗口

1
Prefix + w

打开 window 列表。

重命名窗口

1
Prefix + ,

重命名当前 window。

查找窗口

1
Prefix + f

按名称查找 window。

窗格操作

垂直分屏

1
Prefix + %

将当前 pane 左右分成两个 pane。

水平分屏

1
Prefix + "

将当前 pane 上下分成两个 pane。

关闭窗格

1
2
Ctrl + d
Prefix + x

也可以在 pane 中执行:

1
exit

关闭规则:

  • 当前 window 的所有 pane 都关闭后,window 会关闭。
  • 当前 session 的所有 window 都关闭后,session 会关闭。

全屏窗格

1
Prefix + z

将当前 pane 全屏或取消全屏。查看日志、复制长文本时很常用。

切换窗格

1
Prefix + ArrowKeys

切换到相邻 pane。

如果开启鼠标支持,也可以直接点击 pane。

调整窗格大小

按住 Prefix 的同时按方向键,可以调整 pane 分割线位置。

如果开启鼠标支持,也可以拖动 pane 之间的分割线。

移动窗格位置

1
Prefix + }

将当前 pane 向右移动。

1
Prefix + {

将当前 pane 向左移动。

复制模式

进入复制模式

1
Prefix + [

进入当前 pane 的复制模式。

1
Prefix + PgUp

进入复制模式,并向上翻阅当前 pane 的历史内容。

如果开启鼠标支持,滚轮通常也会进入复制模式并翻阅历史内容。

复制与粘贴

用鼠标选中文本后,被选中的内容会复制到 tmux 的剪贴板。

1
Prefix + ]

将 tmux 剪贴板中的内容粘贴到当前光标位置。

在 tmux 中使用终端自身的选择复制时,通常需要按住 Shift 再选中文本。这个行为在 Windows 和 Linux 终端中比较常见,macOS 终端行为可能不同。

命令行模式

1
Prefix + :

进入 tmux 命令行模式。

常用命令:

1
clear-history

清除当前 pane 的历史缓存。

推荐配置

可以在 ~/.tmux.conf 中加入下面配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 将 Prefix 从 Ctrl+b 改为 Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 开启鼠标选择、滚动、调整 pane 大小
set -g mouse on

# 从 1 开始编号,更符合日常习惯
set -g base-index 1
setw -g pane-base-index 1

# 提高历史滚动行数
set -g history-limit 50000

# 快速重载配置
bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"

配置完成后执行:

1
tmux source-file ~/.tmux.conf

常见工作流

远程服务器开发

1
tmux new -s dev

建议窗口组织:

  • editor:编辑代码。
  • server:启动服务。
  • log:查看日志。
  • shell:临时命令。

后台运行长任务

1
tmux new -s deploy

在 tmux 中执行部署或构建命令后,使用:

1
Prefix + d

挂起会话。之后重新连接:

1
tmux a -t deploy

查看日志

1
tmux new -s log

常见组合:

  • 一个 pane 执行 tail -f app.log
  • 一个 pane 执行 tail -f error.log
  • 一个 pane 执行排查命令。

排查清单

  • 找不到会话:先执行 tmux ls
  • 不知道当前在哪个会话:看 tmux 状态栏左侧 session/window 名称。
  • 鼠标滚轮不好用:确认 set -g mouse on 已加载。
  • 修改配置不生效:执行 tmux source-file ~/.tmux.conf
  • 会话误关闭:tmux 无法恢复已关闭 session,重要任务建议先挂起,不要随手 exit

速查表

操作 快捷键 / 命令
新建会话 tmux new -s <session>
查看会话 tmux ls
进入会话 tmux a -t <session>
挂起会话 Prefix + d
新建窗口 Prefix + c
窗口列表 Prefix + w
关闭窗口 Prefix + &
垂直分屏 Prefix + %
水平分屏 Prefix + "
切换窗格 Prefix + ArrowKeys
全屏窗格 Prefix + z
关闭窗格 Ctrl + dPrefix + x
进入复制模式 Prefix + [
粘贴 tmux 剪贴板 Prefix + ]
命令行模式 Prefix + :
加载配置 tmux source-file ~/.tmux.conf