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 | |
创建会话
1 | |
这将创建一个名为 mysession 的新会话。
分离会话(任务继续运行)
按下键盘:
1 | |
这将 “detach” 当前 tmux 会话,任务仍继续运行。
查看当前会话
1 | |
恢复会话
1 | |
如果你忘了会话名,可以先 tmux ls 查看。
关闭会话
1 | |
或在 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 中运行 exit 或 Ctrl + d |
🧰 通用增强功能
| 操作 | 命令 / 快捷键 |
|---|---|
| 进入复制/滚动模式 | Ctrl + b 然后 [ |
| 滚动查看历史输出 | 在复制模式中使用方向键 / PageUp/PageDown |
| 复制选中内容 | 在复制模式中 Space 开始选择,Enter 复制 |
| 粘贴 | Ctrl + b 然后 ] |
5. tmux 层级结构图
tmux 层级结构图:Session / Window / Pane
在 tmux 中,结构可以理解为 3 层嵌套关系:
1 | |
📌 各个组件定义
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 | |
✨ 总结
tmux 是远程开发过程中不可或缺的工具之一,它相比 nohup 拥有更丰富的交互性和可控性,尤其适合科研、数据挖掘等需长时间训练和调试的场景。