Tmux 终端复用入门:SSH 断线也不丢会话
Tmux 终端复用入门:SSH 断线也不丢会话
通过 SSH 连上云服务器跑一个耗时任务,正跑到一半网络闪断,终端一关、任务也跟着没了——这种事几乎每个用过服务器的人都遇到过。Tmux 就是为解决这个问题而生的终端复用工具:它让会话在服务器后台持续运行,断线重连后能原样接回来。本文从零讲清 tmux 的安装、会话、窗口与窗格,以及几个最常用的实战场景。
一、tmux 是什么
tmux 把一个终端会话分成三层结构:
- 会话(Session):一组窗口的集合,是 tmux 管理的基本单位。会话运行在服务器后台,即使 SSH 断开也不会消失。
- 窗口(Window):会话里的一个全屏终端,类似浏览器的标签页,一个会话可以有多个窗口。
- 窗格(Pane):窗口内部再切分出的小终端,同一个窗口里可以左右或上下并排显示多个窗格。
理解这三层关系,后面的命令就都好记了:会话管“整组任务”,窗口管“分屏切换”,窗格管“同屏并排”。
tmux 的所有快捷键都以一个前缀键开头,默认是 Ctrl+b:先按 Ctrl+b,松开,再按功能键。例如分离会话是 Ctrl+b 然后按 d。
二、安装与验证
Debian / Ubuntu:
sudo apt update && sudo apt install tmux
CentOS / RHEL 8+:
sudo dnf install tmux
macOS(用 Homebrew):
brew install tmux
装好后验证版本:
tmux -V
能正常输出版本号即安装成功。国内云服务器如果 apt 源较慢,可以先换国内镜像源再安装。
三、会话:新建、分离、接回
新建一个会话并起名,是使用 tmux 最常见的起点:
tmux new -s deploy
-s deploy 是会话名,起个见名知意的名子,比如部署叫 deploy、跑训练叫 train、看日志叫 logs。
在会话里正常执行命令,比如启动一个耗时较长的备份或编译。需要临时离开时,按 Ctrl+b 再按 d(detach,分离),会话就回到后台继续跑,终端回到 SSH 登录前的状态。
查看当前所有会话:
tmux ls
输出类似 deploy: 1 windows (created ...),能看到会话名、窗口数和创建时间。
重新接回会话:
tmux attach -t deploy
attach 可以简写为 a。如果只有一个会话,直接 tmux attach 即可。接回后屏幕和离开时一模一样,正在跑的命令、输出的日志都在。
会话里的任务跑完后,在会话内执行 exit 退出 shell,会话随之结束;也可以在会话外强制关闭:
tmux kill-session -t deploy
四、窗口与窗格:一个终端当多个用
窗口操作(都在 tmux 会话内按 Ctrl+b 开头):
- 新建窗口:
Ctrl+bc - 切换到下一个窗口:
Ctrl+bn - 切换到上一个窗口:
Ctrl+bp - 按编号切换:
Ctrl+b0、1、2…… - 给当前窗口改名:
Ctrl+b,,输入新名字回车
窗格操作:
- 左右分屏:
Ctrl+b% - 上下分屏:
Ctrl+b" - 在窗格之间切换:
Ctrl+b方向键,或Ctrl+bo按顺序轮换 - 关闭当前窗格:
Ctrl+bx,按y确认(或在窗格里直接exit)
一个典型布局是:一个窗口里左右分屏,左边 tail -f 看日志,右边编辑配置文件;再开一个窗口专门跑长任务。窗口之间用 Ctrl+b n 切换,互不干扰。
五、一份够用的配置
tmux 的默认配置偏保守,很多人第一件事是打开鼠标支持:开启后可以用鼠标点选窗格、拖动调整大小、滚轮翻看历史输出。把下面这行写进家目录的 ~/.tmux.conf:
set -g mouse on
如果改完配置后想让已有的会话生效,在会话内执行:
tmux source-file ~/.tmux.conf
另一个常见改法是把前缀键从 Ctrl+b 换成 Ctrl+a(手感更顺),在配置文件中加入:
unbind C-b
set -g prefix C-a
bind C-a send-prefix
改前缀键只是个人习惯,不改也完全能用,建议先用默认键练熟基本操作再考虑定制。
六、三个实战场景
场景一:跑长任务不断线。 在服务器上编译大项目、备份数据库、下载大文件前,先 tmux new -s job,在里面启动任务,Ctrl+b d 分离。本地网络断了、电脑合盖了都没关系,任务在服务器后台继续跑;之后任何时间 tmux attach -t job 都能回来查看进度。
场景二:边看日志边改配置。 部署出问题时,一个窗口跑服务、一个窗口 tail -f 跟踪日志,再分一个窗格用编辑器改配置。日志和配置同屏对照,比来回切换 SSH 终端高效得多。
场景三:临时共享操作画面。 两个人排查同一台服务器时,一人新建会话,另一人用 tmux attach -t 接入同一个会话,双方看到的是同一个终端画面,适合远程结对排查问题。注意:这要求双方都有该服务器的登录权限,不要把会话共享给不可信的人。
七、tmux 与 nohup 的区别
很多人会问:后台运行任务用 nohup command & 不也行吗?两者定位不同:
nohup适合“启动后就不用管”的单个命令,输出重定向到文件,之后只能看文件查结果。- tmux 适合“过程中还要回来交互”的任务:能看到实时输出、能中途输入命令、能同时管理多个窗口和窗格。
简单判断:如果任务跑起来后你还需要回来敲命令、看交互式输出,用 tmux;如果只是丢一个命令让它自己跑完,用 nohup 就够了。
八、常用命令速查
| 需求 | 命令 / 快捷键 |
|---|---|
| 新建会话 | tmux new -s 名字 |
| 分离会话 | Ctrl+b d |
| 列出会话 | tmux ls |
| 接回会话 | tmux attach -t 名字 |
| 关闭会话 | tmux kill-session -t 名字 |
| 新建窗口 | Ctrl+b c |
| 切换窗口 | Ctrl+b n / p / 数字 |
| 左右分屏 | Ctrl+b % |
| 上下分屏 | Ctrl+b " |
| 切换窗格 | Ctrl+b 方向键 |
| 关闭窗格 | Ctrl+b x |
九、注意事项
- 服务器重启后 tmux 会话会丢失,因为它保存在内存里。真正重要的长期任务,建议配合 systemd 服务来跑,tmux 只负责交互式场景。
- 不要在 tmux 会话里再套一层 tmux:内外两层共用
Ctrl+b前缀键,操作会互相干扰。 - 公共服务器上用完记得分离而不是直接关终端;多人共用的机器上,会话名起得清晰一点,避免别人误关你的会话。
tmux 上手只需要记住四个动作:新建会话、分离、查看、接回,再加窗口和窗格的两组分屏键。先从“跑长任务前开个会话”这个习惯开始,断线丢任务的问题基本就不会再出现了。
- 点赞
- 收藏
- 关注作者
评论(0)