tmux 终端复用神器:断线重连不掉线的终极方案

概述

SSH 连到 VPS 上跑任务,结果网络一抖,连接断了,所有正在运行的进程全部被杀死。这种崩溃经历,每个运维和开发者都踩过。

tmux 就是来解决这个问题的。它像一个容器,把你的终端会话包在里面。即使 SSH 断开,里面的程序照样跑。重新连上后,一键恢复,一切如初。

它还能在一个窗口里开多个面板,左右分屏、上下分屏随便切。配合 .tmux.conf 配置文件,你的终端体验直接拉满。

准备工作

你需要以下条件:

  • 一台 Linux VPS(Ubuntu 20.04+、Debian 11+、CentOS 8+ 均可)
  • SSH 终端访问权限
  • root 或 sudo 权限
  • 约 1MB 磁盘空间

步骤

第一步:安装 tmux

Ubuntu / Debian 系统:

sudo apt update
sudo apt install -y tmux

CentOS / RHEL 系统:

sudo yum install -y tmux

macOS 用户用 Homebrew:

brew install tmux

安装完检查一下版本:

tmux -V

输出类似 tmux 3.3a 就说明装好了。

第二步:创建第一个会话

直接输入 tmux 回车,你就进入了 tmux 的世界。屏幕底部会出现一条绿色状态栏,显示当前会话名和时间。

创建一个命名会话更方便管理:

tmux new -s webserver

-s 后面的 webserver 是会话名,你自己定。起个有意义的名字,以后好找。

第三步:理解 tmux 的三层结构

tmux 有三层概念,搞清楚它们就掌握了核心逻辑:

  • 会话(Session):最外层,相当于一个独立的终端环境。一个会话可以包含多个窗口。
  • 窗口(Window):类似浏览器的标签页。一个窗口占满整个屏幕。
  • 面板(Pane):窗口里的分屏区域。一个窗口可以有多个面板,左右或上下排列。

第四步:常用操作

tmux 的所有操作都以 Ctrl+b 为前缀键。按完 Ctrl+b 后再按后面的快捷键。

创建新窗口:

Ctrl+b 然后 c

切换窗口:

Ctrl+b 然后 数字键(1, 2, 3...)

拆分面板(左右分屏):

Ctrl+b 然后 %

上下分屏:

Ctrl+b 然后 "

在面板之间切换:

Ctrl+b 然后方向键(上/下/左/右)

调整面板大小:

Ctrl+b 然后 Ctrl+方向键

退出当前面板(不是退出 tmux):

Ctrl+b 然后 d

这个操作叫 detach,意思是"脱离当前会话但保持运行"。你的程序还在后台跑着。

第五步:恢复会话

之前用 Ctrl+b d 脱离的会话,随时可以恢复:

# 列出所有会话
tmux ls

# 恢复某个会话
tmux attach -t webserver

tmux ls 会列出所有活跃会话及其编号。attach -t 后面跟会话名或编号都行。

第六步:自定义配置文件

~/.tmux.conf 当作你的 tmux 专属配置文件。创建它:

nano ~/.tmux.conf

写入这些基础配置:

# 修改前缀键为 Ctrl+a(更符合习惯)
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 面板分割时保持当前路径
set -g pane-base-index 1
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"

# 启用鼠标支持
set -g mouse on

# 状态栏美化
set -g status-style "bg=#1a1b26,fg=#a9b1d6"
set -g status-left "#[fg=#1a1b26,bg=#7aa2f7,bold] tmux "
set -g status-right "%Y-%m-%d %H:%M"

# 增加历史缓冲区
set -g history-limit 50000

改完配置后重新加载:

tmux source-file ~/.tmux.conf

注意:重新加载只对新会话生效。旧会话要完全退出重建才能应用新配置。

第七步:高级技巧——会话共享

想让别人远程看你终端的操作?或者协作调试?tmux 支持实时共享:

# 在当前 tmux 会话中创建 socket
tmux new-session -d -s shared
tmux pipe-pane -o "cat > /tmp/tmux-share-$USER" -t shared

# 让伙伴连接(他们需要在本地也装 tmux)
tmux attach -t shared

更简单的方式是用 tmux join-pane 功能,两个终端连同一个会话,就能看到对方的操作。

第八步:设置 tmux 开机自启(可选)

如果你希望每次 SSH 进来自动进入 tmux:

echo 'exec tmux' >> ~/.bashrc

这样每次登录都会直接进入 tmux 会话,不用再手动输入命令。

验证

用以下方法确认 tmux 正常工作:

# 检查安装
tmux -V

# 创建测试会话
tmux new -s test-verify

# 在里面运行一个长时间任务
sleep 3600 &

# 按 Ctrl+b d 脱离会话

# 重新连接
tmux attach -t test-verify

# 检查进程还在不在
jobs

如果 jobs 命令显示 sleep 进程仍在运行,说明 tmux 的会话持久化功能完全正常。

也可以用 tmux ls 查看当前所有活跃会话列表。

常见问题

问:tmux 和 screen 有什么区别?

screen 是老牌终端复用工具,但 tmux 更现代。tmux 支持更丰富的配置、更好的分屏管理、插件生态也更活跃。新项目推荐直接用 tmux。

问:快捷键冲突怎么办?

如果 Ctrl+b 和你的编辑器快捷键冲突,改一下前缀键就行。在 .tmux.conf 里加一行:

set -g prefix C-a
unbind C-b
bind C-a send-prefix

改成 Ctrl+a 作为前缀。

问:tmux 里复制粘贴怎么用?

tmux 默认不支持鼠标复制。开启鼠标模式后可以像普通终端一样选中文本。如果需要纯键盘复制:

Ctrl+b 然后 [  # 进入复制模式
方向键移动光标
Enter 开始选择
Ctrl+b 然后 ]  # 粘贴

问:会话太多怎么清理?

# 结束指定会话
tmux kill-session -t webserver

# 结束所有会话
tmux kill-server

问:tmux 支持 Windows 吗?

支持。Windows 10/11 的 WSL 或 Git Bash 里都可以装。直接用 winget install tmux 也能装。


tmux 是每个经常操作 Linux 服务器的人必装的工具。装好之后你会发现,SSH 断线不再是噩梦。试试看,一旦习惯了会话持久化的感觉,就再也回不去了。

你的终端工作流里还有什么神器?分享出来互相学习。

这篇文章对你有帮助吗?