tmux终端详解!

前言

在日常科研和开发中,我们经常需要在远程服务器上运行长时间的任务,例如有时候进行编译,或者下载大文件需要比较长的时间,一般情况下是下班之后直接运行希望第二天早上过来运行完成,这样就不用耽误工作时间。但是网络有时候不稳定,可能在半夜会出现连接断掉的情况,一旦连接断掉,我们所执行的程序也就中断,我们当然可以写一个脚本后台运行,但是还是不方便。

一个稳定可靠、便捷高效的终端复用工具显得尤为重要。么有没有一种工具可以解决这样的问题呢。这就是我们这里要提到的tmux了。其实类似tmux的工具还有很多。例如gnu screen等。tmux刚好可以解决我们描述的问题,当我们在tmux中工作的时候,即使关掉SecureCRT的连接窗口,再次连接,进入tmux的会话我们之前的工作仍然在继续。本文将系统介绍 tmux 的作用及其与 nohup 的区别,附上常用命令清单,帮助你更高效地管理远程任务。


1. 什么是 tmux?

tmux(terminal multiplexer)是一个终端复用器,它允许用户在同一个 SSH 会话中:

  • 创建多个终端窗口和分屏
  • 在后台运行任务
  • 保持会话持续不断,即使断开网络也能重新连接

简而言之,tmux 是一个让你 “一次登录,永久在线” 的工具。


2. tmux 与 nohup 的区别

特性 tmux nohup
会话持久性 是,支持会话管理 是,但需配合 & 手动后台执行
多窗口/分屏 支持,类似 IDE 分屏体验 不支持
实时交互 支持,任务输出可交互查看和调试 不支持,仅将输出写入文件
查看历史输出 支持滚动查看历史 依赖输出文件(nohup.out
使用复杂度 中等,命令较多但逻辑清晰 低,语法简单
推荐场景 多任务并行、需要交互或调试的长时间任务 简单命令行程序、无需交互的脚本任务

简言之,nohup 更像是 “fire-and-forget”,而 tmux 是一个功能完整的会话管理器,更像是 “fire-and-control”。

(“fire-and-forget” 是一个来自军事领域的术语,原意是指导弹发射后无需继续控制,自动追踪目标完成任务。引申到计算机和编程语境里,它的意思是:“一旦启动(fire),就不管它了(forget)。”)


3. 如何在服务器使用 tmux?

安装(如未安装)

1
2
3
4
5
# Ubuntu / Debian
sudo apt install tmux

# CentOS / RHEL
sudo yum install tmux

创建会话

1
tmux new -s mysession

这将创建一个名为 mysession 的新会话。

分离会话(任务继续运行)

按下键盘:

1
Ctrl + b 然后按 d

这将 “detach” 当前 tmux 会话,任务仍继续运行。

查看当前会话

1
tmux ls

恢复会话

1
tmux attach -t mysession

如果你忘了会话名,可以先 tmux ls 查看。

关闭会话

1
exit

或在 tmux 中直接关闭最后一个终端窗口。


4. tmux 常用命令汇总表

下面是一个 按层级结构整理的 tmux 快捷键和命令表,清晰地区分了 会话(Session)窗口(Window)窗格(Pane) 三个层级的常用操作,重复项合并优化,便于查阅和记忆。


🧱 层级结构速览

graph TD
  Session["🧭 Session(会话)"]
  Window["🪟 Window(窗口)"]
  Pane["📑 Pane(窗格)"]
  Session --> Window
  Window --> Pane

🧭 会话(Session)操作

操作 命令 / 快捷键
创建新会话 tmux new -s <name>tmux(无名会话)
断开当前会话 Ctrl + b 然后 d(detach)
查看会话列表 tmux ls
恢复指定会话 tmux attach -t <name>
重命名会话 tmux rename-session -t old new
关闭当前会话 所有窗口关闭后自动退出,或使用 tmux kill-session -t <name>

🪟 窗口(Window)操作

操作 命令 / 快捷键
创建新窗口 Ctrl + b 然后 c
切换窗口 Ctrl + b 然后 数字键 / n(下一个) / p(上一个)
查看窗口列表 Ctrl + b 然后 w
重命名当前窗口 Ctrl + b 然后 ,
关闭当前窗口 关闭该窗口中所有 pane(exit or Ctrl + d
强制关闭窗口 tmux kill-window -t <window-index>

📑 窗格(Pane)操作

操作 命令 / 快捷键
垂直分割窗格 Ctrl + b 然后 "
水平分割窗格 Ctrl + b 然后 %
在窗格间切换 Ctrl + b 然后方向键
调整窗格大小 Ctrl + b 然后按住 Ctrl + 方向键
关闭当前窗格 在 pane 中运行 exitCtrl + d

🧰 通用增强功能

操作 命令 / 快捷键
进入复制/滚动模式 Ctrl + b 然后 [
滚动查看历史输出 在复制模式中使用方向键 / PageUp/PageDown
复制选中内容 在复制模式中 Space 开始选择,Enter 复制
粘贴 Ctrl + b 然后 ]

5. tmux 层级结构图


tmux 层级结构图:Session / Window / Pane

在 tmux 中,结构可以理解为 3 层嵌套关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
+--------------------+
| Session: mysession|
| |
| +--------------+ |
| | Window 0 |<-----------------------------+
| | | |
| | +----+ +----+| Ctrl + b + % 或 " 分割 pane |
| | |pane| |pane|| |
| | +----+ +----+| |
| +--------------+ |
| |
| +--------------+ |
| | Window 1 |<---- Ctrl + b + c 新建窗口 |
| | | |
| | +----------+ | |
| | | single | | |
| | | pane | | |
| | +----------+ | |
| +--------------+ |
+--------------------+

📌 各个组件定义

1. Session(会话)

  • tmux 的顶层单位;
  • 一个会话可以包含多个窗口;
  • 可以通过 tmux new -s name 创建;
  • 可断开(detach)、恢复(attach)、杀掉(kill);
  • 一般一个项目、一个任务建议一个 session,便于管理。

2. Window(窗口)

  • 类似于一个“标签页”;
  • 一个 session 中可以有多个 window;
  • 每个 window 中可以包含一个或多个 pane;
  • 使用 Ctrl + b 然后 c 新建,n/p 或数字键切换。

3. Pane(窗格)

  • 是 window 中的分屏区域;
  • 用来实际执行命令;
  • 支持水平 % 或垂直 " 分割;
  • 使用方向键、Ctrl + b + o 切换,Ctrl + d 关闭。

✅ 层级总结

级别 包含关系 示例命令
Session 包含多个 Window tmux new -s <name>
Window 包含多个 Pane Ctrl + b 然后 c
Pane 实际终端操作区域 Ctrl + b 然后 %"

💡 推荐习惯:

  • 给 session 起明确名字(如 projectA);
  • 用 window 区分不同任务(如训练/调试/测试);
  • 用 pane 分屏处理多个相关命令(如 htop系统资源占用情况、tail查看日志输出、运行命令等)。
1
2
3
4
5
htop # 查看系统资源占用情况

tail app.log # 查看日志默认最后10行

tail -f app.log # -f 选项表示持续输出新日志

✨ 总结

tmux 是远程开发过程中不可或缺的工具之一,它相比 nohup 拥有更丰富的交互性和可控性,尤其适合科研、数据挖掘等需长时间训练和调试的场景。


tmux终端详解!
https://chengz23.github.io/2025/04/22/tmux介绍/
作者
chengz23
发布于
2025年4月22日
许可协议