tmux 终端使用
tmux 终端使用
在 AutoDL 等云服务器上跑实验时,最崩溃的莫过于本地网络突然闪断,导致跑了一半的脚本直接被终止。tmux (Terminal Multiplexer) 就是为了解决这个问题而生的。它可以让你的任务在后台持续运行,随时随地重新连接查看进度。
核心概念:为什么需要 tmux?
当你通过 SSH 或 Jupyter 终端连接到 AutoDL 时,你启动的进程是依附于当前终端会话的。终端一关,进程就死。tmux 可以在服务器端创建一个持久化的虚拟终端。即使你的电脑关机、断网,tmux 里的实验依然在服务器上稳稳地跑着。
安装 tmux
在 AutoDL 服务器里运行:
1 | apt update |
看到类似:
1 | tmux 3.2a |
就说明安装成功。
🚀 极简工作流 (只需记住这 4 条命令)
日常使用只需掌握以下四步,就能应付 99% 的场景:
1. 新建并进入会话 (Session)
强烈建议给会话起个有意义的名字,方便后续区分不同的实验。
1 | tmux new -s dolos_exp |
此时你已经进入了 tmux 的虚拟终端,可以像平时一样激活环境、运行特征提取或模型训练的脚本了。比如直接在这里执行你的 OpenFace 相关指令。
解释:
1 | new = 新建会话 |
进入 tmux 后,就像普通终端一样运行命令:
2. 离开会话 (Detach) - 让程序在后台跑
当你的代码开始运行后,你想关掉电脑去干别的,只需按下快捷键:
先按 Ctrl + b (松开),然后按 d (detach)。
此时你会退回到原来的真实终端,提示 [detached],但 tmux 里的任务仍在后台满载运行。
在 tmux 里面按:
1 | Ctrl + B |
松开,然后按:
1 | D |
这叫 detach,意思是“退出会话但不关闭程序”。你会回到普通终端,实验仍然在后台继续跑。
3. 查看后台有哪些会话
当你重新连上 AutoDL 时,想看看有哪些任务在跑:
1 | tmux ls |
4. 重新连回会话 (Attach) - 查看进度
找到你想看的会话名字(例如 dolos_exp),将其恢复到前台:
1 | tmux attach -t dolos_exp |
⌨️ 进阶快捷键:多窗口与滚动查看日志
在 tmux 中,所有的快捷键操作都需要先按一个**前缀键 (Prefix)**,默认是 **Ctrl + b**。
1. 查看历史输出(极其重要!)
在 tmux 里,默认情况下你无法直接用鼠标滚轮向上翻看历史运行日志。
- 进入滚动模式:按
Ctrl + b,松开后按[ - 现在你可以用键盘的上下方向键,或者
Page Up / Page Down来自由翻看历史输出了。 - 退出滚动模式:按
q或Esc。
2. 屏幕分屏 (Panes)
想在一块屏幕上边看 GPU 占用率(watch -n 1 nvidia-smi),边看代码日志输出?
- 左右分屏:
Ctrl + b,松开后按% - 上下分屏:
Ctrl + b,松开后按" - 在分屏间切换光标:
Ctrl + b,松开后按方向键↑ ↓ ← → - 关闭当前光标所在的分屏:直接输入
exit或按Ctrl + d
🗑️ 清理与退出
在 tmux 里,想停止当前实验:
1 | Ctrl + C |
如果想关闭整个 tmux 会话:
1 | exit |
如果你在真实的终端里,想直接杀掉名为 dolos_exp 的后台会话:
1 | tmux kill-session -t dolos_exp |
实战小贴士:AutoDL 官方镜像默认已预装 tmux。无论是通过本地 SSH 工具(如 Xshell、Termius)还是网页版的 JupyterLab Terminal,都可以直接零配置无缝使用。
杀掉所有 tmux 会话:
1 | tmux kill-server |
慎用,会把所有 tmux 里的任务都停掉。
开启“全能鼠标模式” (支持滚轮翻页)
开启鼠标模式后,你可以直接用鼠标滚轮上下滚动查看历史输出,也可以直接鼠标点击切换分屏、拖拽调整分屏大小。
临时开启(当前会话生效)
- 在
tmux会话中,按下前缀键 **Ctrl + b**,松开。 - 按下
:(进入命令行模式,底部会变黄或出现提示符)。 - 输入
set -g mouse on,然后回车。
现在你就可以直接滚动鼠标滚轮来翻看上方的日志了(滚动时会自动进入查看模式,按q退出回到最新输出)。
永久开启(推荐,一劳永逸)
为了让你以后每次进 tmux 都不用重新敲命令,把它写进配置文件里:
先创建配置文件:
1 | cat > ~/.tmux.conf <<'EOF' |
让配置生效:
1 | tmux source-file ~/.tmux.conf |
如果运行失败上面的tmux source-file ~/.tmux.conf代码,出现下面报错,
error connecting to /tmp/tmux-0/default (No such file or directory)
的原因非常简单:
因为你当前根本没有在 tmux 会话(Session)里面。
tmux source-file 命令的作用是让当前正在运行的 tmux 实例重新加载配置文件。如果你直接在普通的终端(比如 AutoDL 的标准 JupyterLab 终端或普通 SSH 窗口)里运行它,它找不到正在运行的 tmux 服务,就会报这个错。
不过别担心,你的配置文件其实已经成功写入了!
如果还没进入 tmux,也没关系,下一次打开 tmux 会自动生效。
📋复制与粘贴的终极奥义
在 tmux 中复制粘贴有两个完全不同的场景,最核心的秘诀在于 Shift 键。
场景一:把 AutoDL 里的代码/报错,复制到你自己的电脑上(最常用)
痛点:开启了 mouse on 之后,你会发现直接用鼠标选中文本,一旦松手选择就消失了,根本没法 Ctrl+C 复制到本地。
解决方案:按住 Shift 键!
- 复制:按住键盘上的
Shift键不放,然后用鼠标去选中文本。此时系统会绕过 tmux 的拦截,调用你本地终端的原始选中功能。选中后,直接使用本地的复制快捷键(Win:Ctrl+Insert或 右键复制,Mac:Cmd+C)。 - 粘贴:想把本地代码粘贴到 tmux 里,同样按住
Shift键,然后点击鼠标右键进行粘贴(或者Shift+Insert/Cmd+V)。
场景二:在 tmux 的不同分屏内部互相复制粘贴 (纯键盘流)
如果你只是想把左边分屏的一段路径,复制到右边分屏,不需要经过本地电脑的剪贴板,可以使用 tmux 内置的复制模式:
- 进入复制模式:按
Ctrl + b,松开后按[(右上角会出现行号指示器)。 - 移动光标:用方向键移动到你要复制的开头位置。
- 开始选择:按下 **空格键 (Space)**,然后用方向键移动光标,选中你需要的文本(文本会高亮)。
- 确认复制:按下 **回车键 (Enter)**。高亮消失,文本已经保存在 tmux 的内部剪贴板了,同时自动退出了复制模式。
- 粘贴:切换到你想粘贴的地方,按
Ctrl + b,松开后按 **]**,内容就粘贴出来了。
总结:开启 set -g mouse on 获得滚轮自由,配合 Shift 键实现本地与服务器的无缝复制粘贴,这两个技巧能解决 tmux 90% 的使用痛点。