Tmux 终端复用器:SSH 断线任务不中断

zheng头像
zheng 2026-07-26 15:00
楼主

## 痛点

你是不是经常遇到这种情况:SSH 连上服务器,正跑着一个长时间任务(比如 `apt upgrade`、大文件下载、数据库迁移),突然网络断了一下——任务没了,前功尽弃。

Tmux 就是解决这个问题的神器。它让你的终端会话独立于 SSH 连接运行,断线了任务继续跑,重新连上还能恢复现场。

## 安装和基础概念

```bash
# Debian/Ubuntu
sudo apt install tmux

# Alpine
sudo apk add tmux

# macOS
brew install tmux
```

Tmux 的核心概念:
- **Session(会话)**:一个独立的工作环境
- **Window(窗口)**:类似浏览器标签页
- **Pane(窗格)**:窗口内的分屏

## 常用命令速查

**会话管理:**

```bash
tmux new -s mysession # 创建命名会话
tmux ls # 列出所有会话
tmux attach -t mysession # 重新接入会话
tmux kill-session -t mysession # 杀死会话
```

**在 tmux 内的快捷键(默认前缀 Ctrl+b):**

| 快捷键 | 功能 |
|--------|------|
| Ctrl+b d | 脱离会话(后台运行) |
| Ctrl+b c | 新建窗口 |
| Ctrl+b n/p | 切换下一个/上一个窗口 |
| Ctrl+b w | 列出所有窗口 |
| Ctrl+b % | 垂直分屏 |
| Ctrl+b " | 水平分屏 |
| Ctrl+b 方向键 | 切换窗格 |
| Ctrl+b [ | 进入滚动模式 |
| Ctrl+b x | 关闭当前窗格 |

## 实战场景

**场景1:跑长时间任务**

```bash
# SSH 登录后
tmux new -s update
sudo apt update && sudo apt upgrade -y
# 按 Ctrl+b d 脱离,可以断开 SSH
# 第二天重新登录
tmux attach -t update
# 可以看到任务已完成或继续运行中
```

**场景2:多窗口工作流**

```bash
tmux new -s work
# 窗口0:编辑代码
vim app.py
# Ctrl+b c 新建窗口1
# 窗口1:运行服务
python app.py
# Ctrl+b c 新建窗口2
# 窗口2:查看日志
tail -f /var/log/app.log
# Ctrl+b n/p 在窗口间切换
```

**场景3:SSH 多服务器管理**

```bash
tmux new -s servers
# Ctrl+b % 垂直分屏
# 左边窗格:连服务器A
ssh server-a
# Ctrl+b → 切换到右边
# 右边窗格:连服务器B
ssh server-b
# 现在可以同时监控两台服务器
```

## 美化与配置

在 `~/.tmux.conf` 中配置:

```bash
# 修改前缀键为 Ctrl+a(更顺手)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 鼠标支持
set -g mouse on

# 从 1 开始编号窗口
set -g base-index 1

# 状态栏美化
set -g status-bg black
set -g status-fg white
set -g status-left '#[fg=green]#S '
set -g status-right '#[fg=yellow]%Y-%m-%d %H:%M'

# 加大滚动缓冲区
set -g history-limit 10000
```

## 进阶:tmux 插件

安装 TPM(Tmux Plugin Manager):

```bash
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
```

在配置中添加插件:

```bash
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect' # 保存/恢复会话
set -g @plugin 'tmux-plugins/tmux-continuum' # 自动保存

run '~/.tmux/plugins/tpm/tpm'
```

`tmux-resurrect` 可以保存你的窗口布局、运行的程序,重启后一键恢复。

## 终极技巧:SSH 自动进入 tmux

在 `.bashrc` 或 `.zshrc` 末尾加上:

```bash
if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then
tmux attach -t main || tmux new -s main
fi
```

这样每次 SSH 登录自动进入 tmux,再也不怕断线。

学会 tmux 之后,你会发现它在终端操作中的重要性相当于 Git 在代码管理中的地位——不可或缺。

Syncthing 教程:多设备文件实时同步,告别手动备份 Caddy Server:自动 HTTPS 的反向代理新选择

最新回复

暂无回复,来说两句吧

发表评论

站点总访问量:6229