简介
tmux 是一个终端多路复用器,允许你在一个终端窗口中创建多个会话、窗口和窗格。即使断开连接,tmux 中的程序也会继续运行,非常适合远程服务器管理。
安装
# macOS
brew install tmux
# Ubuntu/Debian
sudo apt install tmux
核心概念
- 会话 (Session): 最顶层的容器,可以包含多个窗口
- 窗口 (Window): 类似于浏览器标签页
- 窗格 (Pane): 窗口内的分割区域
常用命令
# 新建会话
tmux new -s myproject
# 列出会话
tmux ls
# 附加到会话
tmux attach -t myproject
# 断开会话(不关闭)
# 在 tmux 中按 Ctrl+b d
快捷键(默认前缀 Ctrl+b)
| 按键 | 功能 |
|---|---|
% | 垂直分割窗格 |
" | 水平分割窗格 |
c | 新建窗口 |
n/p | 下/上一个窗口 |
方向键 | 切换窗格 |
d | 断开会话 |
z | 全屏/还原窗格 |
推荐插件
- TPM — tmux 插件管理器
- tmux-resurrect — 会话持久化,重启后恢复
- tmux-continuum — 自动保存/恢复会话
典型场景
场景一:SSH 远程服务器上保持长时间任务
SSH 断开后任务不中断,重连后恢复现场:
# 连接服务器后立即创建命名会话
ssh user@server
tmux new -s deploy
# 在 tmux 内启动耗时任务
./deploy.sh production
# 网络断开后重连,任务继续运行
ssh user@server
tmux attach -t deploy
场景二:开发环境一键启动布局
把常用的窗口分割保存为脚本,每次开发一条命令还原工作区:
#!/bin/bash
# ~/scripts/dev-layout.sh
SESSION="myapp"
tmux new-session -d -s $SESSION -x 220 -y 50
# 窗口1:编辑器
tmux rename-window -t $SESSION:1 "editor"
tmux send-keys -t $SESSION:1 "nvim ." C-m
# 窗口2:上下分割,上面跑服务,下面跑日志
tmux new-window -t $SESSION:2 -n "server"
tmux send-keys -t $SESSION:2 "npm run dev" C-m
tmux split-window -v -t $SESSION:2
tmux send-keys -t $SESSION:2 "tail -f logs/app.log" C-m
# 窗口3:空终端备用
tmux new-window -t $SESSION:3 -n "shell"
tmux attach -t $SESSION
场景三:跨窗格复制粘贴
在不同窗格间共享命令输出:
# 进入 copy mode(vi 模式)
# Ctrl+b [
# 用 v 开始选择,y 复制
# Ctrl+b ] 粘贴
# 在 .tmux.conf 中启用 vi 模式
# setw -g mode-keys vi
# bind-key -T copy-mode-vi v send-keys -X begin-selection
# bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel