tmux 安装与使用教程:SSH 断开后任务继续运行,终端分屏与多窗口管理

前言

通过 SSH 连接远程 Linux 服务器时,经常会遇到以下问题:

  • SSH 连接意外断开后,正在运行的程序也随之退出;
  • 同时查看日志、运行脚本和监控 GPU 时,需要打开很多终端窗口;
  • 希望在服务器上保留当前工作现场,稍后重新连接后继续操作;
  • 想在一个终端中同时管理多个任务。

这时可以使用 tmux

tmux 是一个终端复用器。它可以在一个终端中创建多个窗口和分屏,并允许任务在后台持续运行。即使 SSH 连接断开,只要服务器没有重启,tmux 中运行的程序通常仍然会继续执行。

本文将介绍:

  1. 如何安装 tmux;
  2. 没有 Root 权限时如何安装;
  3. tmux 的基本概念;
  4. 如何创建、退出和重新进入会话;
  5. 如何分屏和切换窗口;
  6. 快捷键究竟应该怎样按;
  7. 如何开启鼠标滚动;
  8. 一套适合日常使用的配置;
  9. 常见问题及解决方法。

一、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 提供了将 libeventncurses 和 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

注意,不是同时按下 Ctrlbd

正确操作过程是:

  1. 按住 Ctrl
  2. 按一下 b
  3. 松开所有按键;
  4. 再按一下 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

这段配置解决了几个常见问题:

  1. 可以使用鼠标点击和滚轮;
  2. 可以保存更多历史输出;
  3. Copy Mode 支持 Vim 风格按键;
  4. 新建 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 是非常值得掌握的基础工具。

相关推荐
YJlio1 小时前
《Sysinternals实战指南》16.5 Ctrl2Cap 工具详解:把 Caps Lock 变成 Ctrl 的键盘改造与回退方法
linux·运维·服务器·网络·python·学习·计算机外设
l'm coming1 小时前
[linux]内核启动加载驱动文件的流程
linux·arm开发·驱动开发·嵌入式
一拳一个娘娘腔2 小时前
CVE-2026-31431 — “Copy Fail“ 深度拆解
linux·安全
麦麦麦当劳大王2 小时前
Linux SSH服务端配置指南
linux·运维·服务器·ssh
Yiyaoshujuku3 小时前
化学谱图数据API接口,数据字段一览!
linux·服务器·前端
__Witheart__3 小时前
make menuconfig 使用全流程
linux·ubuntu·rockchip
2601_951645783 小时前
Linux 编程语言全解析:C、C++、Python、Go、Rust 谁更强?
linux·python·go·c·编程语言
阿坤带你走近大数据3 小时前
Linux中管道符的作用
java·linux·服务器
Fcy6483 小时前
Linux下 进程信号初识和信号的产生
linux·运维·信号的产生