创建tmux持久化对话
# 问题描述
有一个需要运行很长时间的程序,但是vscode的ssh有时候会断联,因此需要使用tmux进行持久化会话
# 命令描述(AI版)
tmux 是 Linux 云服务器开发中必备的神器。它允许你在一个终端窗口里管理多个会话,最关键的是:当你关闭本地电脑或 SSH 断开时,服务器上的任务依然会在后台继续运行(比如编译代码、跑 GDB 调试、训练模型)。
为了让你快速上手,我将 tmux 的命令分为 Shell 命令行操作(在终端敲)和 快捷键操作(进入 tmux 后按)两类。
# 1. 核心概念与“前缀键”
在 tmux 中,所有快捷键都需要先按 Ctrl + b(默认前缀键),松开后再按其他功能键。
# 2. 会话管理(最常用,必须掌握)
会话(Session)是 tmux 的顶层容器,相当于一个独立的“工作台”。
| 功能 | Shell 命令行(终端敲) | 快捷键(tmux 内部) |
|---|---|---|
| 新建会话 | tmux new -s 会话名 | - |
| 列出所有会话 | tmux ls | Ctrl+b 然后 s(弹出选择列表) |
| 连接/进入会话 | tmux attach -t 会话名 | - |
| 断开当前会话(让任务后台跑) | - | Ctrl+b 然后 d |
| 杀死指定会话 | tmux kill-session -t 会话名 | - |
| 重命名当前会话 | tmux rename-session 新名字 | Ctrl+b 然后 $ |
💡 场景模拟:连上服务器,敲
tmux new -s gdb_debug,然后跑你的 GDB 调试。突然有事要关电脑,按Ctrl+b d断开。回家后连上服务器,敲tmux attach -t gdb_debug,一切照旧。
# 3. 窗口管理(类似浏览器标签页)
一个会话里可以有多个窗口(Window),适合不同任务(一个写代码,一个看日志)。
| 功能 | 快捷键(tmux 内部) |
|---|---|
| 新建窗口 | Ctrl+b 然后 c |
| 切换到下一个/上一个窗口 | Ctrl+b 然后 n(Next)/ p(Previous) |
| 窗口列表 | Ctrl+b 然后 w |
| 重命名当前窗口 | Ctrl+b 然后 ,(逗号) |
| 关闭当前窗口 | Ctrl+b 然后 &(需按 y 确认) |
| 快速跳到指定编号窗口(如 0-9) | Ctrl+b 然后 0(数字键) |
# 4. 窗格管理(分屏,最实用)
这是调试(GDB)和看日志时最高频的操作,可以像 IDE 一样把屏幕切分成多块。
| 功能 | 快捷键(tmux 内部) |
|---|---|
| 当前窗格垂直切分(左右分屏) | Ctrl+b 然后 % |
| 当前窗格水平切分(上下分屏) | Ctrl+b 然后 "(双引号) |
| 切换活动窗格(光标跳转) | Ctrl+b 然后 方向键(↑↓←→) |
| 关闭当前窗格(退出该终端) | Ctrl+b 然后 x(需按 y 确认) 或直接敲 exit |
| 最大化当前窗格(再按一次恢复) | Ctrl+b 然后 z(Zoom) |
| 将当前窗格变成独立窗口 | Ctrl+b 然后 !(感叹号) |
| 调整窗格大小(按住前缀键+方向) | Ctrl+b 然后 Ctrl+方向键 |
# 5. 复制模式与滚动(看日志必备)
默认 tmux 只能用鼠标滚轮(如果开启),也可以用键盘翻页。
| 功能 | 快捷键(tmux 内部) |
|---|---|
| 进入复制/滚动模式(Vim 风格) | Ctrl+b 然后 [ |
| 翻页 | 进入模式后按 PageUp / PageDown 或 ↑ / ↓ |
| 退出复制/滚动模式 | q |
# 6. 命令模式(底层操作)
如果你发现快捷键不够用,可以像 Vim 一样进入命令行模式。
- 操作:按
Ctrl+b然后:(冒号)。 - 常用命令:
set -g mouse on(开启鼠标支持,点选窗格和滚动)setw -g mode-keys vi(让滚动模式支持 vi 键位j/k)
# 7. 自动化脚本(非交互式发送命令)
如果你想让 tmux 自动执行命令(比如启动 GDB 并加载脚本),可以在 Shell 中使用:
# 在名为 "debug" 的会话的 0 号窗格中执行 "gdb ./aes_example"
tmux send-keys -t debug:0 "gdb ./aes_example" C-m
2
(C-m 代表回车键)
# 🔧 强烈建议的优化配置
默认的 Ctrl+b 比较远,且不支持鼠标。编辑 ~/.tmux.conf 文件(没有就新建),加入以下内容,能极大提升体验:
# 将前缀键改为 Ctrl + a(左手不离键盘,类似 screen)
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# 开启鼠标支持(可以直接鼠标点击切换窗格、拖动调整大小)
set -g mouse on
# 窗口编号从 1 开始(更符合直觉)
set -g base-index 1
setw -g pane-base-index 1
# 重新加载配置(不用重启 tmux):按前缀键后输入 :source-file ~/.tmux.conf
2
3
4
5
6
7
8
9
10
11
12
13
# 速查记忆卡(打印在脑里)
| 你想做什么 | 快捷键 |
|---|---|
| 断开后台运行 | Ctrl + b → d |
| 垂直分屏 | Ctrl + b → % |
| 水平分屏 | Ctrl + b → " |
| 切换窗格 | Ctrl + b → 方向键 |
| 新建窗口 | Ctrl + b → c |
| 看历史输出 | Ctrl + b → [(然后按上下翻) |
如果你是第一次用,建议先开一个 tmux 随便练练分屏,按 Ctrl+b d 退出重连,理解“挂起”的概念后,你就会发现再也离不开它了。在调试 aes_example 时,你可以上半屏跑 GDB,下半屏用 tail -f 看日志,效率翻倍。