前言
通过 SSH 连接远程 Linux 服务器时,经常会遇到以下问题:
- SSH 连接意外断开后,正在运行的程序也随之退出;
- 同时查看日志、运行脚本和监控 GPU 时,需要打开很多终端窗口;
- 希望在服务器上保留当前工作现场,稍后重新连接后继续操作;
- 想在一个终端中同时管理多个任务。
这时可以使用 tmux。
tmux 是一个终端复用器。它可以在一个终端中创建多个窗口和分屏,并允许任务在后台持续运行。即使 SSH 连接断开,只要服务器没有重启,tmux 中运行的程序通常仍然会继续执行。
本文将介绍:
- 如何安装 tmux;
- 没有 Root 权限时如何安装;
- tmux 的基本概念;
- 如何创建、退出和重新进入会话;
- 如何分屏和切换窗口;
- 快捷键究竟应该怎样按;
- 如何开启鼠标滚动;
- 一套适合日常使用的配置;
- 常见问题及解决方法。
一、tmux 是什么?
普通 SSH 连接中,终端程序通常直接依附于当前 SSH 会话:
text
本地终端
└── SSH 连接
└── Python 脚本、训练任务、日志查看程序
如果 SSH 连接断开,前台程序可能一起退出。
使用 tmux 后,结构变成:
text
本地终端
└── SSH 连接
└── tmux 客户端
└── tmux 后台会话
├── Python 脚本
├── 日志查看程序
└── GPU 监控程序
此时可以暂时离开 tmux 会话,甚至关闭 SSH 连接。稍后重新登录服务器,再进入原来的 tmux 会话即可恢复工作现场。
二、安装 tmux
1. Ubuntu / Debian
有管理员权限时,执行:
bash
sudo apt update
sudo apt install tmux -y
2. CentOS / RHEL
部分旧版本系统使用:
bash
sudo yum install tmux -y
较新的系统可以使用:
bash
sudo dnf install tmux -y
3. Arch Linux
bash
sudo pacman -S tmux
4. macOS
已经安装 Homebrew 时:
bash
brew install tmux
5. 检查安装结果
bash
tmux -V
输出类似:
text
tmux 3.6
说明安装成功。
三、没有 Root 权限时如何安装 tmux?
学校服务器、实验室服务器和计算集群通常不会给普通用户 Root 权限。此时可以通过 conda 安装 tmux。
方法 1:直接安装到当前 conda 环境
bash
conda install conda-forge::tmux -y
检查是否成功:
bash
tmux -V
方法 2:创建单独的工具环境
如果不希望修改已有的 Python 或深度学习环境,可以单独创建一个工具环境:
bash
conda create -n tools -c conda-forge tmux -y
conda activate tools
tmux -V
以后使用 tmux 前先激活:
bash
conda activate tools
方法 3:使用镜像源安装
服务器访问 conda-forge 较慢时,可以显式指定镜像:
bash
conda install \
-c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge \
tmux -y
方法 4:遇到 HTTP error 怎么办?
如果安装时出现:
text
An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
可以先清理索引缓存:
bash
conda clean -i
然后重新安装:
bash
conda install conda-forge::tmux -y
查看当前配置的 channel:
bash
conda config --show channels
如果没有 conda-forge,可以添加:
bash
conda config --add channels conda-forge
也可以只在本次安装时临时指定:
bash
conda install -c conda-forge tmux -y
方法 5:源码安装到个人目录
如果系统没有 tmux,无法使用 sudo,conda 也不可用,还可以将 tmux 编译安装到个人目录:
bash
$HOME/local
tmux 源码编译通常需要:
text
gcc 或 clang
make
pkg-config
yacc 或 bison
libevent
ncurses
官方 Wiki 提供了将 libevent、ncurses 和 tmux 安装到 ~/local 的完整方案。对于普通用户,优先推荐 conda;只有 conda 不可用时,再考虑源码安装。
四、tmux 的三个核心概念
tmux 中有三个层级:
text
Session:会话
└── Window:窗口
└── Pane:窗格,也就是分屏
1. Session:会话
一个 Session 可以理解为一个完整的后台工作区。
例如:
bash
tmux new -s work
表示创建名为 work 的会话。
2. Window:窗口
一个 Session 可以包含多个 Window,类似浏览器中的多个标签页。
例如:
text
Window 1:运行程序
Window 2:查看日志
Window 3:监控 GPU
Window 4:执行 Git 命令
3. Pane:窗格
每个 Window 可以继续拆分成多个 Pane。
例如:
text
┌────────────────────┬────────────────────┐
│ 运行程序 │ 查看日志 │
├────────────────────┼────────────────────┤
│ 查看 GPU │ 执行其他命令 │
└────────────────────┴────────────────────┘
五、创建第一个 tmux 会话
创建一个名为 work 的会话:
bash
tmux new -s work
进入后,终端看起来与平时基本相同。底部通常会出现一条状态栏。
现在可以正常运行命令,例如:
bash
python train.py
或者:
bash
tail -f logs/train.log
六、离开 tmux,但让任务继续运行
这是 tmux 最重要的操作。
在 tmux 中按:
text
Ctrl-b
松开
d
这叫作 detach。
注意,不是同时按下 Ctrl、b 和 d。
正确操作过程是:
- 按住
Ctrl; - 按一下
b; - 松开所有按键;
- 再按一下
d。
退出后会看到类似提示:
text
[detached (from session work)]
此时 tmux 内部的程序仍在后台运行,可以安全关闭 SSH 连接。
七、重新进入 tmux 会话
重新登录服务器后,先查看已有会话:
bash
tmux ls
输出可能类似:
text
work: 1 windows (created Wed Jun 10 12:30:00 2026)
重新进入:
bash
tmux attach -t work
可以简写为:
bash
tmux a -t work
如果服务器上只有一个 tmux 会话,也可以直接运行:
bash
tmux a
八、删除 tmux 会话
删除指定会话:
bash
tmux kill-session -t work
删除所有 tmux 会话:
bash
tmux kill-server
注意:删除会话会终止其中运行的程序。使用前先确认没有重要任务仍在执行。
九、tmux 快捷键应该怎样操作?
tmux 默认使用:
text
Ctrl-b
作为前缀键。
几乎所有快捷键都要分两步输入:
text
第一步:按 Ctrl-b
第二步:松开后,再按目标按键
例如:
text
Ctrl-b
松开
d
表示离开当前 tmux 会话,但保持任务后台运行。
十、分屏操作
1. 左右分屏
快捷键:
text
Ctrl-b %
实际按法:
text
第一步:按住 Ctrl,再按一下 b
第二步:松开 Ctrl 和 b
第三步:按 Shift-5
因为 % 通常通过:
text
Shift + 5
输入。
分屏后的效果:
text
┌────────────────────┬────────────────────┐
│ │ │
│ │ │
│ │ │
└────────────────────┴────────────────────┘
2. 上下分屏
快捷键:
text
Ctrl-b "
实际按法:
text
第一步:按住 Ctrl,再按一下 b
第二步:松开 Ctrl 和 b
第三步:按 Shift-'
其中 ' 是单引号键,通常位于回车键附近。
分屏后的效果:
text
┌─────────────────────────────────────────┐
│ │
├─────────────────────────────────────────┤
│ │
└─────────────────────────────────────────┘
3. 切换到下一个 Pane
text
Ctrl-b
松开
o
4. 按方向切换 Pane
text
Ctrl-b
松开
← / → / ↑ / ↓
5. 显示 Pane 编号
text
Ctrl-b
松开
q
每个 Pane 会短暂显示编号。随后按下对应数字,即可切换到目标 Pane。
6. 临时放大当前 Pane
text
Ctrl-b
松开
z
再次执行即可恢复。
这个功能很适合临时查看较长的日志或输出。
7. 关闭当前 Pane
在目标 Pane 中输入:
bash
exit
也可以按:
text
Ctrl-d
十一、窗口管理
如果分屏太多,一个界面会变得拥挤。此时可以新建 Window。
1. 新建 Window
text
Ctrl-b
松开
c
2. 切换到下一个 Window
text
Ctrl-b
松开
n
3. 切换到上一个 Window
text
Ctrl-b
松开
p
4. 查看 Window 列表
text
Ctrl-b
松开
w
5. 按编号切换 Window
例如切换到编号为 1 的 Window:
text
Ctrl-b
松开
1
Window 编号通常从 0 开始。
十二、一个常见的日常使用布局
创建会话:
bash
tmux new -s dev
首先左右分屏:
text
Ctrl-b
松开
Shift-5
再将左侧或右侧继续上下分屏:
text
Ctrl-b
松开
Shift-'
可以形成如下布局:
text
┌─────────────────────────┬─────────────────────────┐
│ 运行脚本 │ tail -f logs/train.log │
│ │ 查看日志 │
├─────────────────────────┼─────────────────────────┤
│ watch -n 2 nvidia-smi │ 执行其他命令 │
│ 查看 GPU 状态 │ │
└─────────────────────────┴─────────────────────────┘
常用监控命令:
bash
watch -n 2 nvidia-smi
查看日志:
bash
tail -f logs/train.log
查看 CPU 和内存:
bash
htop
如果系统没有 htop,可以使用:
bash
top
十三、如何浏览 tmux 中的历史输出?
在普通终端中,可以直接使用鼠标滚轮浏览历史输出。
进入 tmux 后,滚轮行为可能发生变化。最稳定的方法是进入 Copy Mode。
1. 进入 Copy Mode
text
Ctrl-b
松开
[
2. 浏览历史输出
进入 Copy Mode 后,可以使用:
text
↑ / ↓ 上下移动
PageUp / PageDown 上下翻页
鼠标滚轮 滚动历史
q 退出 Copy Mode
3. 使用 Vim 风格按键
在配置中启用 Vim 风格:
bash
set-window-option -g mode-keys vi
之后在 Copy Mode 中可以使用:
text
k 向上移动
j 向下移动
u 向上翻半页
d 向下翻半页
g 跳到顶部
G 跳到底部
q 退出
十四、开启鼠标操作
tmux 默认不一定启用鼠标支持。
临时开启:
bash
tmux set -g mouse on
开启后,可以:
- 使用鼠标点击切换 Pane;
- 拖动 Pane 边界调整大小;
- 使用滚轮浏览历史输出。
永久开启:
bash
echo 'set -g mouse on' >> ~/.tmux.conf
重新加载配置:
bash
tmux source-file ~/.tmux.conf
按住 Shift 临时使用终端原生鼠标行为
开启 tmux 鼠标模式后,tmux 会接收点击、拖动和滚轮等鼠标事件。
如果希望临时绕过 tmux,使用终端模拟器自身的文本选择或滚动功能,可以尝试按住:
text
Shift
再拖动鼠标或使用滚轮。
不同终端模拟器的表现可能有所差异。
十五、推荐的 ~/.tmux.conf 配置
在用户主目录创建配置文件:
bash
cat > ~/.tmux.conf <<'EOF'
# 开启鼠标操作
set -g mouse on
# 增加历史缓冲区
set -g history-limit 100000
# Copy Mode 使用 Vim 风格快捷键
set-window-option -g mode-keys vi
# 新建 Pane 时继承当前目录
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
EOF
重新加载配置:
bash
tmux source-file ~/.tmux.conf
这段配置解决了几个常见问题:
- 可以使用鼠标点击和滚轮;
- 可以保存更多历史输出;
- Copy Mode 支持 Vim 风格按键;
- 新建 Pane 后会停留在当前目录,而不是回到用户主目录。
十六、常用命令速查表
Session 管理
bash
tmux new -s work # 创建名为 work 的会话
tmux ls # 查看已有会话
tmux attach -t work # 重新进入 work 会话
tmux a -t work # attach 的简写
tmux kill-session -t work # 删除 work 会话
tmux kill-server # 删除全部会话
Pane 操作
text
Ctrl-b % 左右分屏
Ctrl-b " 上下分屏
Ctrl-b o 切换到下一个 Pane
Ctrl-b 方向键 按方向切换 Pane
Ctrl-b q 显示 Pane 编号
Ctrl-b z 放大或还原当前 Pane
Ctrl-b [ 进入 Copy Mode
Ctrl-d 关闭当前 Pane
Window 操作
text
Ctrl-b c 新建 Window
Ctrl-b n 下一个 Window
Ctrl-b p 上一个 Window
Ctrl-b w 查看 Window 列表
Ctrl-b 数字 切换到指定编号的 Window
后台运行
text
Ctrl-b d 离开 tmux,但保持程序后台运行
十七、常见问题
问题 1:执行 tmux attach -t work 时提示找不到会话
报错可能类似:
text
no sessions
或者:
text
can't find session: work
先检查:
bash
tmux ls
如果没有任何会话,需要重新创建:
bash
tmux new -s work
问题 2:按 Ctrl-b % 没有反应
不要直接按数字 5。
正确操作是:
text
按住 Ctrl,再按 b
松开
按 Shift-5
第三步必须输入 %。
问题 3:按 Ctrl-b " 没有反应
正确操作是:
text
按住 Ctrl,再按 b
松开
按 Shift-'
第三步必须输入双引号 "。
问题 4:分屏后新 Pane 回到了用户主目录
默认情况下,新 Pane 不一定继承当前目录。
在 ~/.tmux.conf 中加入:
bash
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
然后重新加载:
bash
tmux source-file ~/.tmux.conf
问题 5:鼠标滚轮无法浏览历史输出
先开启鼠标模式:
bash
tmux set -g mouse on
如果仍然不符合预期,进入 Copy Mode:
text
Ctrl-b
松开
[
然后使用滚轮、方向键或 PageUp 浏览历史输出。
按:
text
q
退出 Copy Mode。
问题 6:关闭 SSH 后任务还是退出了
确认在关闭 SSH 前执行的是:
text
Ctrl-b
松开
d
不要在程序仍运行时直接输入:
bash
exit
也不要执行:
bash
tmux kill-session
detach 只是暂时离开;kill-session 会真正终止会话。
问题 7:服务器重启后 tmux 会话消失了
tmux 可以避免 SSH 断开导致任务退出,但无法让程序跨越服务器重启继续运行。
服务器重启后,内存中的 tmux 会话和程序都会终止。
十八、最小够用操作流程
第一次使用 tmux,只需要记住以下命令:
bash
tmux new -s work
进入后,记住以下快捷键:
text
Ctrl-b % 左右分屏
Ctrl-b " 上下分屏
Ctrl-b o 切换 Pane
Ctrl-b z 放大或还原 Pane
Ctrl-b [ 浏览历史输出
Ctrl-b d 离开 tmux,但保持任务运行
重新登录服务器后:
bash
tmux attach -t work
掌握这些操作,就足以应对大多数远程服务器使用场景。
结语
tmux 的价值并不只是终端分屏。
它真正解决的是远程服务器开发中的几个高频痛点:
- SSH 断开后任务继续运行;
- 多个终端任务集中管理;
- 日志、程序和资源监控同时显示;
- 随时离开并恢复工作现场;
- 减少重复配置和重新运行任务的成本。
对于经常使用 Linux 服务器、远程训练模型、运行长时间脚本或维护后端服务的用户,tmux 是非常值得掌握的基础工具。