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
拥有更丰富的交互性和可控性,尤其适合科研、数据挖掘等需长时间训练和调试的场景。