什么是 Tmux?
Tmux (Terminal Multiplexer) 是一个终端复用器,允许你在一个终端窗口中运行多个终端会话。它的主要优势包括:
- 会话持久化:即使断开连接,会话仍在后台运行
- 多窗口管理:在一个终端中管理多个窗口
- 窗格分割:将窗口分割成多个窗格
- 远程工作:适合SSH远程工作场景
安装 Tmux
# Ubuntu/Debian
sudo apt install tmux
# CentOS/RHEL
sudo yum install tmux
# 或者
sudo dnf install tmux
# macOS
brew install tmux
# Arch Linux
sudo pacman -S tmux基本概念
- 会话 (Session):一个工作环境,包含多个窗口
- 窗口 (Window):类似于浏览器标签页,包含多个窗格
- 窗格 (Pane):窗口的分割区域,每个窗格是一个独立的终端
快速开始
启动和退出
# 启动新会话
tmux
# 启动并命名会话
tmux new -s mysession
# 列出所有会话
tmux list-sessions
# 或简写
tmux ls
# 连接到会话
tmux attach -t mysession
# 或简写
tmux a -t mysession
# 分离会话(保持后台运行)
# 在tmux内按:Ctrl-b d
# 杀死会话
tmux kill-session -t mysession
# 退出tmux
exit快捷键操作
前缀键:所有tmux快捷键都以前缀键开始,默认是 Ctrl-b
会话管理
| 快捷键 | 功能 |
|---|---|
Ctrl-b d | 分离当前会话 |
Ctrl-b s | 列出所有会话并选择 |
Ctrl-b $ | 重命名当前会话 |
窗口管理
| 快捷键 | 功能 |
|---|---|
Ctrl-b c | 创建新窗口 |
Ctrl-b n | 切换到下一个窗口 |
Ctrl-b p | 切换到上一个窗口 |
Ctrl-b 0-9 | 切换到指定编号的窗口 |
Ctrl-b , | 重命名当前窗口 |
Ctrl-b & | 关闭当前窗口 |
Ctrl-b w | 列出所有窗口并选择 |
窗格管理
| 快捷键 | 功能 |
|---|---|
Ctrl-b % | 垂直分割窗格 |
Ctrl-b " | 水平分割窗格 |
Ctrl-b 方向键 | 在窗格间移动 |
Ctrl-b o | 切换到下一个窗格 |
Ctrl-b x | 关闭当前窗格 |
Ctrl-b z | 最大化/恢复当前窗格 |
Ctrl-b { | 向前移动窗格 |
Ctrl-b } | 向后移动窗格 |
其他常用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl-b ? | 显示所有快捷键 |
Ctrl-b : | 进入命令模式 |
Ctrl-b [ | 进入复制模式(可滚动查看历史) |
Ctrl-b ] | 粘贴 |
常用命令行操作
# 创建命名会话
tmux new-session -d -s work
# 在会话中创建窗口
tmux new-window -t work -n 'server'
# 分割窗格并运行命令
tmux split-window -h -t work:server 'htop'
# 发送命令到指定窗格
tmux send-keys -t work:server.0 'vim config.txt' Enter
# 重新加载配置
tmux source-file ~/.tmux.conf基础配置
创建配置文件 ~/.tmux.conf:
# 修改前缀键为 Ctrl-a (可选)
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix
# 启用鼠标支持
set -g mouse on
# 设置默认终端模式为 256color
set -g default-terminal "screen-256color"
# 更直观的分割快捷键
bind | split-window -h
bind - split-window -v
# 快速重载配置文件
bind r source-file ~/.tmux.conf \; display "配置已重载!"
# 窗格切换更便捷
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 设置窗格边框样式
set -g pane-border-style fg=colour238
set -g pane-active-border-style fg=colour39
# 状态栏配置
set -g status-bg colour235
set -g status-fg colour136
set -g status-left '#[fg=colour166]#S '
set -g status-right '#[fg=colour166]%Y-%m-%d %H:%M '实用场景示例
场景1:开发环境配置
# 创建开发会话
tmux new-session -d -s dev
# 创建不同用途的窗口
tmux new-window -t dev -n 'editor' # 编辑器窗口
tmux new-window -t dev -n 'server' # 服务器窗口
tmux new-window -t dev -n 'logs' # 日志监控窗口
# 在编辑器窗口分割窗格
tmux split-window -h -t dev:editor
tmux send-keys -t dev:editor.0 'vim .' Enter
tmux send-keys -t dev:editor.1 'git status' Enter
# 连接到会话
tmux attach -t dev场景2:远程服务器监控
# 创建监控会话
tmux new-session -d -s monitor
# 系统监控窗格
tmux split-window -h -t monitor
tmux split-window -v -t monitor:0.1
# 运行不同的监控命令
tmux send-keys -t monitor:0.0 'htop' Enter
tmux send-keys -t monitor:0.1 'tail -f /var/log/nginx/access.log' Enter
tmux send-keys -t monitor:0.2 'watch -n 1 "df -h"' Enter
tmux attach -t monitor进阶技巧
复制模式
- 按
Ctrl-b [进入复制模式 - 使用方向键或vim风格按键(h,j,k,l)移动
- 按空格键开始选择
- 按回车键复制选中内容
- 按
Ctrl-b ]粘贴
会话脚本化
创建启动脚本 start-dev.sh:
#!/bin/bash
# 检查会话是否已存在
tmux has-session -t dev 2>/dev/null
if [ $? != 0 ]; then
# 创建新会话
tmux new-session -d -s dev -n editor
# 设置编辑器窗口
tmux split-window -h -t dev:editor
tmux send-keys -t dev:editor.0 'cd ~/project && vim' Enter
tmux send-keys -t dev:editor.1 'cd ~/project' Enter
# 创建服务器窗口
tmux new-window -t dev -n server
tmux send-keys -t dev:server 'cd ~/project && npm start' Enter
# 创建git窗口
tmux new-window -t dev -n git
tmux send-keys -t dev:git 'cd ~/project && git status' Enter
# 选择第一个窗口
tmux select-window -t dev:editor
fi
# 连接到会话
tmux attach -t dev常见问题解决
1. 鼠标滚动问题
# 在 ~/.tmux.conf 中添加
set -g mouse on2. 颜色显示问题
# 在 ~/.tmux.conf 中添加
set -g default-terminal "screen-256color"3. 会话恢复
如果意外断开连接:
# 查看现有会话
tmux ls
# 重新连接
tmux attach -t session_name