概述
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 断线不再是噩梦。试试看,一旦习惯了会话持久化的感觉,就再也回不去了。
你的终端工作流里还有什么神器?分享出来互相学习。