tmux 使用指南
技术 · 2026-09-24
核心用途:让程序在 SSH 断开后继续运行。tmux 会话由服务器托管,与本地电脑和 SSH 连接完全解耦——断网、合上笔记本、直接关掉终端窗口,任务都不受影响。
一、会话管理(最常用)
| 命令 | 作用 |
|---|---|
tmux new -s 名字 | 新建一个命名会话 |
tmux ls | 列出所有会话 |
tmux attach -t 名字 | 接入指定会话(回到现场) |
tmux attach | 接入最近使用的会话 |
tmux kill-session -t 名字 | 关闭指定会话 |
tmux kill-server | 关闭所有会话 |
离开会话的两种方式:
| 操作 | 效果 |
|---|---|
按 Ctrl+B 再按 D(detach) | 正常退出,会话和里面的程序继续在后台跑 |
| 直接断开 SSH / 关终端 | 效果同上,无需任何操作 |
第二天回来:
tmux attach -t overnight # 接回会话,一切原样
二、快捷键速查
所有快捷键都要先按前缀键 Ctrl+B,松开后再按后续键。
会话
| 按键 | 作用 |
|---|---|
Ctrl+B D | 分离(detach),回到终端但保留会话 |
Ctrl+B S | 交互式列出并切换会话 |
Ctrl+B $ | 重命名当前会话 |
窗口(一个会话里的多个"标签页")
| 按键 | 作用 |
|---|---|
Ctrl+B C | 新建窗口 |
Ctrl+B 数字 | 切换到第 N 个窗口 |
Ctrl+B N / P | 下一个 / 上一个窗口 |
Ctrl+B , | 重命名当前窗口 |
Ctrl+B & | 关闭当前窗口 |
面板(一个窗口内分屏)
| 按键 | 作用 |
|---|---|
Ctrl+B % | 左右分屏 |
Ctrl+B " | 上下分屏 |
Ctrl+B 方向键 | 在面板间移动光标 |
Ctrl+B X | 关闭当前面板(需确认按 Y) |
Ctrl+B Z | 当前面板全屏 / 恢复(适合看长日志) |
Ctrl+B 空格 | 切换面板布局 |
三、查看历史输出(滚动)
终端里鼠标滚轮默认不能回看 tmux 的历史输出,需要进入复制模式:
- 按
Ctrl+B[进入复制模式(左上角出现[0/xxx]字样) - 用
↑↓或PgUpPgDn翻页查看历史 - 按
Q退出复制模式
一劳永逸的办法:开启鼠标支持(见第五节配置),之后可直接用滚轮翻页、点击切换面板。
四、配合 Claude Code 跑夜间任务
标准流程:
tmux new -s overnight # 1. 新建会话
claude # 2. 在 tmux 里启动 Claude Code
# 3. 一次性把任务交代清楚,然后 Ctrl+B D 离开(或直接断开 SSH)
# 4. 睡觉 💤
tmux attach -t overnight # 5. 第二天回来验收
夜间无人值守的三个要点:
- 权限确认会卡住任务——启动时用
claude --dangerously-skip-permissions全程放行(适合干净环境),或提前用/permissions配置好允许列表;文件编辑可按Shift+Tab切到 auto-accept - 任务描述一次写全——目标、约束、验收标准说清楚,并注明「拿不准的地方记录下来继续推进,不要停下来等待」
- 要求写进度日志——比如「每完成一步追加到 progress.md」,早上看一眼就知道夜里发生了什么
五、推荐配置(可选)
写入 ~/.tmux.conf(没有就新建),对现有会话执行 Ctrl+B : 输入 source-file ~/.tmux.conf 生效:
# 开启鼠标:滚轮翻历史、点击切面板、拖拽调分屏
set -g mouse on
# 历史回滚行数调大(默认 2000 太少)
set -g history-limit 50000
# 从第 1 个窗口开始编号(默认从 0)
set -g base-index 1
setw -g pane-base-index 1
# 256 色支持
set -g default-terminal "tmux-256color"
六、常见问题
Q:怎么判断我现在是不是在 tmux 里?
终端底部有一条绿色状态栏就是;或者执行 echo $TMUX,有输出即在 tmux 中。
Q:attach 时报错 no session?
执行 tmux ls 看看有没有存活会话。服务器重启后 tmux 会话会全部丢失(tmux 不持久化,重启后需要重新开会话、重新跑任务)。
Q:会话里的任务到底还在跑吗?
tmux ls 能看到会话就还在。attach 回去直接看现场最直观。
Q:不小心把整个会话关了,任务还能找回吗?
不能。kill-session / exit 会终止里面的所有程序。离开时请用 detach(Ctrl+B D)而不是关掉窗口里的 shell。