系列:Linux 命令基础
- Tmux 入门教程:让 SSH 断线和多任务终端不再中断
- Tree 命令教程:快速查看和导出目录结构
- Linux 搜索命令教程:find、grep、locate、rg 应该怎么选
- Linux 压缩与解压命令教程:tar、zip、gzip、xz、zstd 一次讲清
- Linux 文本处理命令教程:cat、less、head、tail、wc、sort、uniq
- Linux 权限命令教程:chmod、chown、umask
- Linux 进程查看与管理:ps、top、htop、kill、jobs
- Linux 网络排查命令:ss、curl、dig、ping、traceroute
- systemctl 与 journalctl 入门:管理服务和查看日志
- rsync 使用指南:服务器文件同步与备份
- Linux 服务器安全基础:SSH、用户权限、防火墙和 fail2ban
- 线上问题排查流程:日志、端口、进程、磁盘、网络怎么一步步看
- 深入浅出:Linux 树状目录神器 tree 命令的安装与使用指南
- Linux 系统 Vim 编辑器终极指南:从入门到精通
- SSH 隧道实战:本地转发、远程转发和动态转发
- SSH Config 使用指南:别名、跳板机与多服务器管理
背景
当你在服务器上部署项目、查看日志、运行 Docker 服务或使用 Claude Code / Codex 时,常会遇到几个问题:
- SSH 网络短暂断开后,正在运行的命令也跟着中断;
- 一个终端窗口只能做一件事,查看日志、编辑配置、执行命令需要频繁切换;
- 重新登录服务器后,找不到刚才的工作现场。
tmux 是一个终端复用工具。它可以在一台服务器上创建多个可持续运行的终端会话,并把一个终端划分为多个窗口和面板。
最实用的能力是:SSH 断开不等于任务停止。只要 tmux 会话仍在运行,重新连接服务器后就可以继续回到原来的工作环境。
本文以 Debian / Ubuntu 服务器为例,讲清楚 tmux 的安装、基础操作、远程使用方式和常见问题。
步骤
1. 安装 tmux
Debian / Ubuntu 可以直接使用 apt 安装:
sudo apt updatesudo apt install -y tmux确认是否安装成功:
tmux -V如果终端输出类似下面的版本号,说明安装完成:
tmux 3.x其他常见系统的安装命令如下:
# Fedora / Rocky Linux / AlmaLinuxsudo dnf install -y tmux
# CentOS 7sudo yum install -y tmux
# macOS(已安装 Homebrew)brew install tmuxWindows 用户建议先安装并使用 WSL,再在 WSL 的 Linux 环境中安装 tmux。
2. 先理解 tmux 的三个核心概念
tmux 的操作对象可以理解为三层:
- Session(会话):一个独立的工作空间,例如一个项目或一台服务器的运维环境;
- Window(窗口):会话中的标签页;
- Pane(面板):一个窗口内部切分出的多个终端区域。
下面是一个常见结构:
tmux server└── Session: project-api ├── Window 1: editor │ ├── Pane 1: 编辑代码 │ └── Pane 2: 运行后端服务 └── Window 2: logs └── Pane 1: 查看 Docker / Nginx 日志日常使用时,可以把一个项目对应一个 Session,把不同任务拆到不同 Window,再用 Pane 同时查看多个命令输出。
3. 创建第一个 tmux 会话
创建一个名为 dev 的会话:
tmux new -s dev进入 tmux 后,终端底部通常会出现状态栏,显示当前会话名、窗口编号和时间。
tmux 默认使用:
Ctrl-b作为前缀键。后续大部分快捷键都需要先按一次 Ctrl-b,松开后再按功能键。
例如,分离会话的快捷键是:
Ctrl-b,然后按 d也可以写成:
Ctrl-b d按下后会回到普通 Shell,但 tmux 中正在运行的任务不会停止。
4. 查看、进入和关闭会话
查看当前机器上的 tmux 会话:
tmux ls也可以使用:
tmux list-sessions重新进入名为 dev 的会话:
tmux attach -t dev简写:
tmux a -t dev当机器上只有一个会话时,可以直接执行:
tmux a关闭指定会话:
tmux kill-session -t dev关闭所有 tmux 会话和 tmux 服务:
tmux kill-servertmux kill-server 会终止所有 tmux 内运行的任务,生产服务器上不要随意执行。
5. 使用窗口:把不同任务分开
在 tmux 内创建新窗口:
Ctrl-b c在窗口之间切换:
Ctrl-b n # 下一个窗口Ctrl-b p # 上一个窗口Ctrl-b 0 # 切换到编号为 0 的窗口Ctrl-b 1 # 切换到编号为 1 的窗口重命名当前窗口:
Ctrl-b ,例如,你可以把窗口命名为:
apilogsdatabasedeploy也可以在命令行中直接创建带名称的窗口:
tmux new-window -t dev -n logs适合把项目开发、服务日志、数据库连接和部署命令分到不同窗口中管理。
6. 使用分屏:一个窗口同时看多个终端
在当前窗口中上下分屏:
Ctrl-b "在当前窗口中左右分屏:
Ctrl-b %切换到相邻面板:
Ctrl-b 方向键例如:
Ctrl-b ←Ctrl-b →Ctrl-b ↑Ctrl-b ↓关闭当前面板:
exit或者:
Ctrl-b x调整面板大小:
Ctrl-b Ctrl-方向键例如按住 Ctrl-b 后连续按 Ctrl-Left,可以缩小或扩大相邻面板。
一个很实用的布局是:
┌───────────────────────┬───────────────────────┐│ 编辑代码 / Claude Code │ 后端服务日志 │├───────────────────────┼───────────────────────┤│ Docker 状态 / 数据库 │ 临时执行命令 │└───────────────────────┴───────────────────────┘7. 在 SSH 服务器上正确使用 tmux
远程服务器是 tmux 最常见的使用场景。
先连接服务器:
ssh user@your-server-ip进入服务器后创建会话:
tmux new -s server-work然后在 tmux 内运行任务,例如:
docker compose logs -fpython main.pynpm run dev即使本地网络断开、关闭 SSH 客户端,tmux 会话通常仍会在服务器上继续运行。
下次重新连接服务器后,恢复现场:
ssh user@your-server-iptmux attach -t server-work推荐按项目或用途命名会话:
tmux new -s monitoringtmux new -s blogtmux new -s ai-terminaltmux new -s homelab这样即使服务器上有多个项目,也能快速定位工作环境。
8. 快速进入或创建会话
每次都执行“先判断会话是否存在,再创建或进入”比较麻烦。可以使用下面这条命令:
tmux new-session -A -s dev参数含义:
-A:会话已存在时直接进入,不存在时才创建-s:指定会话名称因此,日常进入项目环境只需要:
tmux new-session -A -s project-name例如:
tmux new-session -A -s api-service这也是最推荐记住的一条 tmux 命令。
9. 复制、滚动和查看历史输出
tmux 默认可以保留一定数量的终端历史输出。
进入复制模式:
Ctrl-b [进入后可以使用方向键、PageUp、PageDown 浏览历史内容。
退出复制模式:
q搜索内容:
Ctrl-b [/输入关键字后按 Enter为了保留更多日志历史,可以在 ~/.tmux.conf 中增加:
set -g history-limit 50000修改配置后,在 tmux 内执行:
Ctrl-b :source-file ~/.tmux.conf或者直接在 Shell 中执行:
tmux source-file ~/.tmux.conf10. 编写一个适合开发与运维的基础配置
创建或编辑 tmux 配置文件:
nano ~/.tmux.conf写入以下配置:
# 开启鼠标支持:可点击窗口、选择面板、拖动调整分屏大小set -g mouse on
# 增加终端历史输出行数,便于回看日志set -g history-limit 50000
# 窗口和面板从 1 开始编号,更符合日常使用习惯set -g base-index 1setw -g pane-base-index 1
# 新窗口自动沿用当前路径bind c new-window -c "#{pane_current_path}"
# 新面板自动沿用当前路径bind '"' split-window -v -c "#{pane_current_path}"bind % split-window -h -c "#{pane_current_path}"
# 使用 | 和 - 作为更直观的分屏快捷键bind | split-window -h -c "#{pane_current_path}"bind - split-window -v -c "#{pane_current_path}"
# 使用 r 重新加载 tmux 配置bind r source-file ~/.tmux.conf \; display-message "tmux config reloaded"
# 状态栏刷新间隔set -g status-interval 5保存后重新加载:
tmux source-file ~/.tmux.conf之后可直接使用:
Ctrl-b |进行左右分屏,使用:
Ctrl-b -进行上下分屏。
注意:配置中的
bind '"'和bind %保留了 tmux 默认分屏方式,因此旧习惯不会失效。
11. 一个完整的开发工作流示例
假设你正在开发一个 FastAPI 项目,可以按下面的方式组织 tmux:
tmux new-session -A -s api-project进入后创建四个面板:
┌────────────────────┬────────────────────┐│ uv run main.py │ git status │├────────────────────┼────────────────────┤│ docker compose logs│ Claude Code / shell│└────────────────────┴────────────────────┘每个面板分别运行:
# 面板 1:启动后端uv run main.py# 面板 2:查看 Git 状态watch -n 3 git status --short# 面板 3:查看容器日志docker compose logs -f# 面板 4:执行临时命令、运行 AI 编程工具或处理部署任务需要离开时:
Ctrl-b d第二天继续开发时:
tmux new-session -A -s api-project项目环境就会恢复到之前的会话中。
常见问题
1. SSH 断开后,为什么 tmux 里的任务还在运行?
tmux 运行在服务器本机,而不是运行在你的 SSH 客户端中。
SSH 只是连接到服务器并显示 tmux 的画面。网络断开时,tmux 会话依然由服务器进程维持,所以重新连接后可以继续进入原来的 Session。
但需要注意:服务器重启、tmux 服务被杀掉,或会话中的程序本身异常退出时,任务仍然会停止。
2. 执行 tmux a 报错或无法进入正确会话怎么办?
先查看全部会话:
tmux ls然后指定会话名进入:
tmux attach -t session-name例如:
tmux attach -t monitoring如果显示没有任何 session,说明当前没有正在运行的 tmux 会话,需要重新创建:
tmux new -s monitoring3. 为什么分离后重新连接显示 “sessions should be nested with care”?
这通常表示:你已经在一个 tmux 会话里,又尝试进入另一个 tmux 会话。
例如,本地终端已经运行 tmux,然后 SSH 到远程服务器后又执行 tmux attach。
这并不一定是错误,但快捷键会有冲突。需要把前缀键传递给内部 tmux 时,可以按两次前缀键:
Ctrl-b Ctrl-b第一组会被外层 tmux 识别,第二组会发送给内层 tmux。
更简单的做法是:本地和远程都使用 tmux 时,尽量明确知道自己当前处于哪一层,并避免频繁嵌套。
4. 鼠标滚轮不能滚动历史日志怎么办?
先确认配置中已经开启鼠标:
set -g mouse on然后重新加载配置:
tmux source-file ~/.tmux.conf如果仍然无法滚动,可以进入复制模式后查看:
Ctrl-b [不同终端模拟器、SSH 客户端和 Windows 终端对鼠标滚轮的处理可能略有差异,但复制模式是通用方案。
5. tmux 会话会自动退出怎么办?
当 Session 中最后一个窗口和最后一个 Shell 都退出时,tmux 会话会结束。
最常见的原因是误执行:
exit或者关闭了唯一的窗口。
正常离开 tmux 应该使用:
Ctrl-b d这是“分离会话”,不会终止其中运行的任务。
6. tmux 能替代 systemd、Docker 或 Supervisor 吗?
不能完全替代。
tmux 适合人工交互式任务,例如开发、排查故障、临时运行服务、查看日志和保持 SSH 工作现场。
长期运行的生产服务仍然应该使用更合适的进程管理方式:
Web 服务:systemd / Docker Compose / Kubernetes后台任务:systemd / Supervisor / Celery日志收集:Loki / ELK / OpenSearch 等tmux 更像是运维和开发人员的“持久化终端工作台”。
总结
tmux 的核心价值不是复杂的快捷键,而是把终端从“一次性的 SSH 窗口”变成“可恢复的工作环境”。
日常只需要先掌握这几项:
tmux new -s name 创建会话tmux new-session -A -s name 进入或创建会话tmux ls 查看会话tmux a -t name 恢复会话Ctrl-b d 分离会话Ctrl-b c 创建窗口Ctrl-b " / Ctrl-b % 上下 / 左右分屏Ctrl-b 方向键 切换面板对于需要长期 SSH 管理服务器、开发多个项目、运行日志监控或使用 AI 编程工具的场景,tmux 是非常值得尽早养成习惯的基础工具。
如果你在服务器上部署服务,可以继续看 Docker 安装与使用教程:从零部署第一个容器服务;排查项目目录时,Tree 命令教程:快速查看和导出目录结构 也很常用。快捷键和配置细节建议参考 tmux 官方 Wiki。