tmux 与 screen 终端复用
终端复用器让你在 SSH 断开后保持进程运行,并支持多窗口、分屏操作。
这页适合做“远程开发和服务器维护时的会话管理指南”。如果你经常 SSH 到服务器、跑长任务、看日志、开多个 shell,tmux 往往会比反复重连终端省心很多。
先怎么选
- tmux:新项目优先,功能更现代、生态更好、配置更灵活
- screen:老环境兼容性好,很多系统自带,但功能体验相对老派
如果没有历史包袱,建议优先把 tmux 用顺;screen 主要作为“老机器应急兼容方案”保留。
tmux
安装
# Ubuntu/Debian
apt install tmux -y
# macOS
brew install tmux
会话管理
tmux # 新建会话
tmux new -s work # 新建命名会话
tmux ls # 列出会话
tmux attach -t work # 重新连接
tmux kill-session -t work # 关闭会话
快捷键
tmux 的前缀键默认是 Ctrl + b,按下后再按功能键。
| 快捷键 | 功能 |
|---|---|
Ctrl+b d | 分离会话(后台运行) |
Ctrl+b c | 新建窗口 |
Ctrl+b n | 下一个窗口 |
Ctrl+b p | 上一个窗口 |
Ctrl+b 0-9 | 切换到指定窗口 |
Ctrl+b , | 重命名窗口 |
Ctrl+b & | 关闭窗口 |
分屏
| 快捷键 | 功能 |
|---|---|
Ctrl+b % | 左右分屏 |
Ctrl+b " | 上下分屏 |
Ctrl+b 方向键 | 切换面板 |
Ctrl+b z | 面板全屏/恢复 |
Ctrl+b x | 关闭面板 |
Ctrl+b Ctrl+方向键 | 调整面板大小 |
推荐配置
~/.tmux.conf:
# 改前缀键为 Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 鼠标支持
set -g mouse on
# 从 1 开始编号
set -g base-index 1
setw -g pane-base-index 1
# 更直观的分屏快捷键
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# 256 色支持
set -g default-terminal "screen-256color"
# 状态栏
set -g status-style bg=black,fg=white
set -g status-right "%H:%M %Y-%m-%d"
重载配置:
tmux source-file ~/.tmux.conf
推荐会话工作流
一个很实用的日常方式是:
- 一个会话对应一个项目或一台服务器
- 一个窗口做编辑 / 命令入口
- 一个窗口跑服务
- 一个窗口盯日志
- 需要时再开分屏看监控或执行临时命令
这样即使 SSH 断线,回来后也能快速恢复上下文。
screen
更老牌的终端复用器,大部分 Linux 发行版预装。
screen # 新建会话
screen -S work # 新建命名会话
screen -ls # 列出会话
screen -r work # 重新连接
screen -X -S work quit # 关闭会话
快捷键
前缀键是 Ctrl + a。
| 快捷键 | 功能 |
|---|---|
Ctrl+a d | 分离会话 |
Ctrl+a c | 新建窗口 |
Ctrl+a n | 下一个窗口 |
Ctrl+a p | 上一个窗口 |
Ctrl+a " | 窗口列表 |
Ctrl+a k | 关闭窗口 |
Ctrl+a S | 水平分屏 |
| `Ctrl+a | ` |
Ctrl+a Tab | 切换分屏 |
实用场景
保持服务运行
tmux new -s server
python app.py
# Ctrl+b d 分离
# SSH 断开后进程继续运行
# 重新连接:tmux attach -t server
多窗口开发
tmux new -s dev
# 窗口 0:编辑器
# Ctrl+b c 创建窗口 1:运行服务
# Ctrl+b c 创建窗口 2:日志监控
常见问题
退出 SSH 后进程也没了
这通常是因为任务根本没在 tmux / screen 会话里启动。先确认:
- 是否先
tmux new -s name - 启动命令是否真的在该会话里执行
- 是否只是关闭了整个会话而不是分离会话
鼠标、复制、滚动体验不顺
tmux 默认更偏键盘流。可以:
- 开启
set -g mouse on - 使用终端自身复制能力
- 配合现代终端(Windows Terminal、iTerm2)改善滚动体验
会话太多,记不住
建议把会话名按项目或机器命名,例如:
web-prodblog-devdb-maint
延伸阅读
参考链接
- tmux GitHub — 源码
- tmux Cheat Sheet — 快捷键速查
- Oh My Tmux — 美化配置