一组窗口的集合,可后台运行
屏幕上的一个完整视图
窗口分割出的子区域
Ctrl+b 前缀键操作
tmux [命令] [选项]
tmux [命令] [目标] [参数]
| 命令 | 说明 |
|---|---|
tmux |
新建一个会话 |
tmux new -s 会话名 |
创建指定名称的会话 |
tmux ls |
列出所有会话 |
tmux attach -t 会话名 |
附加到指定会话 |
tmux kill-session -t 会话名 |
关闭指定会话 |
tmux rename-session -t 旧名 新名 |
重命名会话 |
tmux source-file 配置文件 |
重新加载配置文件 |
# 启动新会话(自动命名)
tmux
# 启动新会话并命名
tmux new -s mysession
# 列出所有会话
tmux ls
# 或
tmux list-sessions
# 附加到指定会话
tmux attach -t mysession
# 简写:
tmux a -t mysession
# 从会话中分离(在tmux内按Ctrl+b然后按d)
# 在tmux外关闭会话
tmux kill-session -t mysession
# 重命名会话
tmux rename-session -t oldname newname
# 创建带特定名称的会话和窗口
tmux new -s dev -n editor
# 在tmux内(按Ctrl+b后):
# c - 创建新窗口
# n - 下一个窗口
# p - 上一个窗口
# 0-9 - 切换到指定编号窗口
# , - 重命名当前窗口
# & - 关闭当前窗口
# 从命令行管理窗口
# 在会话中创建新窗口
tmux new-window -t dev -n "logs"
# 在指定会话中执行命令
tmux send-keys -t dev:1 "tail -f /var/log/syslog" C-m
图:tmux多窗口界面示例
# 在tmux内分割面板:
# % - 垂直分割(左右)
# " - 水平分割(上下)
# 方向键 - 在面板间移动
# o - 切换到下一个面板
# x - 关闭当前面板
# z - 最大化/恢复当前面板
# q - 显示面板编号
# 按住Ctrl同时拖拽 - 调整面板大小
# 从命令行分割面板
tmux split-window -h # 垂直分割
tmux split-window -v # 水平分割
# 创建复杂布局示例
tmux new -s workspace
# 然后按Ctrl+b % 垂直分割
# 按Ctrl+b " 水平分割右边面板
# 按Ctrl+b 方向键 在不同面板间移动
图:tmux多面板工作区示例
# 1. 复制模式(类似vim)
# Ctrl+b [ - 进入复制模式
# 空格 - 开始选择
# 回车 - 复制选中内容
# Ctrl+b ] - 粘贴
# 2. 同步输入到所有面板
# Ctrl+b :setw synchronize-panes
# 3. 从文件加载配置
tmux source-file ~/.tmux.conf
# 4. 会话恢复脚本
#!/bin/bash
tmux new-session -d -s dev -n editor
tmux send-keys -t dev:editor "vim" C-m
tmux split-window -h -t dev:editor
tmux send-keys -t dev:editor.1 "htop" C-m
tmux attach -t dev
# 5. 在tmux中运行命令
tmux new-window -t mysession -n "monitor"
tmux send-keys -t mysession:monitor "watch -n 1 'free -h'" C-m
# ~/.tmux.conf - tmux配置文件
# 设置前缀键为Ctrl+a(可选)
# set-option -g prefix C-a
# unbind-key C-b
# bind-key C-a send-prefix
# 设置终端颜色支持
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"
# 设置状态栏
set -g status-interval 1
set -g status-justify centre
set -g status-left-length 20
set -g status-right-length 50
set -g status-left "#[fg=green][#S]"
set -g status-right "#[fg=yellow]%H:%M:%S #[fg=magenta]%Y-%m-%d"
# 设置面板颜色
set -g pane-border-style fg=colour240
set -g pane-active-border-style fg=green
# 启用鼠标支持
set -g mouse on
# 设置窗口编号从1开始
set -g base-index 1
setw -g pane-base-index 1
# 重新加载配置文件快捷键
bind-key r source-file ~/.tmux.conf \; display "配置文件已重新加载"
# 分割面板快捷键(更容易记忆)
bind-key | split-window -h
bind-key - split-window -v
# 快速窗口切换
bind-key -n M-Left previous-window
bind-key -n M-Right next-window
# 调整面板大小
bind-key -r H resize-pane -L 5
bind-key -r J resize-pane -D 5
bind-key -r K resize-pane -U 5
bind-key -r L resize-pane -R 5
# 复制模式使用vim风格
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
# 设置历史记录行数
set -g history-limit 10000
#!/bin/bash
# server_manager.sh - 服务器管理tmux会话
SESSION="server-mgmt"
# 检查会话是否已存在
if tmux has-session -t $SESSION 2>/dev/null; then
echo "会话 $SESSION 已存在,正在附加..."
tmux attach -t $SESSION
else
echo "创建新会话: $SESSION"
# 创建新会话
tmux new-session -d -s $SESSION -n "main"
# 第一个窗口:系统监控
tmux send-keys -t $SESSION:main "echo '=== 系统监控 ==='" C-m
tmux send-keys -t $SESSION:main "htop" C-m
tmux split-window -v -t $SESSION:main
tmux send-keys -t $SESSION:main.1 "watch -n 2 'df -h | grep -v loop'" C-m
# 第二个窗口:日志监控
tmux new-window -t $SESSION -n "logs"
tmux send-keys -t $SESSION:logs "tail -f /var/log/syslog" C-m
tmux split-window -h -t $SESSION:logs
tmux send-keys -t $SESSION:logs.1 "tail -f /var/log/auth.log" C-m
# 第三个窗口:维护工具
tmux new-window -t $SESSION -n "tools"
tmux send-keys -t $SESSION:tools "echo '常用维护命令:'" C-m
tmux send-keys -t $SESSION:tools "echo '1. 磁盘检查: df -h'" C-m
tmux send-keys -t $SESSION:tools "echo '2. 内存使用: free -h'" C-m
tmux send-keys -t $SESSION:tools "echo '3. 进程查看: ps aux | head -20'" C-m
# 附加到会话
tmux attach -t $SESSION
fi
#!/bin/bash
# dev_workspace.sh - 开发环境tmux配置
PROJECT_NAME=${1:-"myproject"}
SESSION="$PROJECT_NAME-dev"
if tmux has-session -t $SESSION 2>/dev/null; then
tmux attach -t $SESSION
else
# 创建开发会话
tmux new-session -d -s $SESSION -n "editor"
# 编辑器窗口
tmux send-keys -t $SESSION:editor "cd ~/projects/$PROJECT_NAME" C-m
tmux send-keys -t $SESSION:editor "vim" C-m
# 分割右侧面板用于测试/运行
tmux split-window -h -p 30 -t $SESSION:editor
tmux send-keys -t $SESSION:editor.1 "cd ~/projects/$PROJECT_NAME" C-m
tmux send-keys -t $SESSION:editor.1 "echo '测试面板 - 按需使用'" C-m
# 创建第二个窗口:版本控制
tmux new-window -t $SESSION -n "git"
tmux send-keys -t $SESSION:git "cd ~/projects/$PROJECT_NAME" C-m
tmux send-keys -t $SESSION:git "git status" C-m
# 创建第三个窗口:文档/笔记
tmux new-window -t $SESSION -n "docs"
tmux send-keys -t $SESSION:docs "cd ~/projects/$PROJECT_NAME/docs" C-m
tmux send-keys -t $SESSION:docs "ls -la" C-m
# 创建第四个窗口:数据库
tmux new-window -t $SESSION -n "database"
tmux send-keys -t $SESSION:database "mysql -u root -p" C-m
# 设置初始活动窗口
tmux select-window -t $SESSION:editor
# 附加到会话
tmux attach -t $SESSION
fi
#!/bin/bash
# network_monitor.sh - 网络监控tmux面板
SESSION="network-monitor"
tmux new-session -d -s $SESSION -n "dashboard"
# 左上:带宽监控
tmux split-window -h -t $SESSION:dashboard
tmux send-keys -t $SESSION:dashboard.0 "iftop" C-m
# 右上:连接监控
tmux split-window -v -t $SESSION:dashboard.1
tmux send-keys -t $SESSION:dashboard.2 "nload" C-m
# 左下:端口监控
tmux split-window -v -t $SESSION:dashboard.0
tmux send-keys -t $SESSION:dashboard.3 "watch -n 1 'netstat -tulpn | grep -v \"127.0.0.1\"'" C-m
# 右下:Ping测试
tmux split-window -h -t $SESSION:dashboard.3
tmux send-keys -t $SESSION:dashboard.4 "ping 8.8.8.8" C-m
# 调整面板大小
tmux select-pane -t $SESSION:dashboard.0
tmux resize-pane -R 20
tmux resize-pane -D 10
# 创建第二个窗口:详细日志
tmux new-window -t $SESSION -n "logs"
tmux send-keys -t $SESSION:logs "sudo tcpdump -i any -n" C-m
# 附加到会话
tmux attach -t $SESSION
# 1. 快速创建开发环境
tmuxinator # 第三方工具,管理tmux配置模板
# 2. 会话自动保存和恢复
# 使用tmux-resurrect插件:
# 保存:prefix + Ctrl-s
# 恢复:prefix + Ctrl-r
# 3. 快速跳转到最近使用的窗口
# 在配置文件中添加:
bind-key C-a last-window
# 4. 使用鼠标切换面板(需要配置)
# 在~/.tmux.conf中添加:
set -g mouse on
# 5. 复制文本到系统剪贴板(需要配置)
# Linux安装xclip后:
bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip -i -sel clipboard"
# 6. 同时向所有面板发送命令
# 进入命令模式(prefix + :)然后输入:
setw synchronize-panes on
# 关闭同步:
setw synchronize-panes off
# 7. 快速重命名会话
# 在tmux内:prefix + $
# 命令行:tmux rename-session -t oldname newname
# 8. 保存tmux布局到文件
tmux list-windows -F "#{window_layout}" > layout.txt
# 恢复布局(需要脚本支持)
# Ubuntu/Debian
sudo apt install tmux
# RHEL/CentOS
sudo yum install tmux
# Fedora
sudo dnf install tmux
# macOS (Homebrew)
brew install tmux
# 从源码编译
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
sudo make install
# 检查版本
tmux -V
A: 主要区别:
| 特性 | tmux | screen |
|---|---|---|
| 开发状态 | 活跃开发,现代 | 维护模式,稳定 |
| 配置方式 | 配置文件,易读性强 | 配置文件较复杂 |
| 面板分割 | 内置支持,操作方便 | 需要插件或复杂配置 |
| 状态栏 | 高度可定制 | 定制性有限 |
| 插件系统 | 丰富的插件生态 | 插件较少 |
| 学习曲线 | 适中 | 较陡峭 |
# 1. 在~/.tmux.conf中添加:
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"
# 2. 确保终端支持256色
echo $TERM
# 3. 对于特定程序(如vim),可能需要额外配置
# 在~/.vimrc中添加:
if &term =~ 'screen' || &term =~ 'tmux'
set term=xterm-256color
endif
# 4. 检查颜色支持
# 运行颜色测试脚本
curl -s https://gist.githubusercontent.com/lifepillar/09a44b8cf0f9397465614e622979107f/raw/24-bit-color.sh | bash
# 方法1:使用socket(同一台机器)
# 用户A创建会话:
tmux -S /tmp/pairing new -s pair-session
# 用户B加入会话(需要读取权限):
tmux -S /tmp/pairing attach -t pair-session
# 设置socket权限:
chmod 777 /tmp/pairing
# 方法2:使用SSH隧道(不同机器)
# 在服务器上创建会话:
tmux new -s shared
# 客户端通过SSH连接:
ssh -t user@server "tmux attach -t shared"
# 方法3:使用tmate(tmux的分支,专为共享设计)
# 安装tmate后:
tmate
# 显示连接命令供其他人使用
| 工具/插件 | 用途 | 说明 |
|---|---|---|
| tmuxinator | 会话管理模板 | 创建和管理复杂的tmux会话配置 |
tmux-resurrect |
会话保存/恢复 | 保存tmux会话状态,重启后可恢复 |
tmux-continuum |
自动保存 | 自动保存和恢复tmux会话 |
tpm |
插件管理器 | tmux插件管理器 |
screen |
传统终端复用器 | tmux的替代品,功能较少但稳定 |
byobu |
增强包装 | 基于tmux或screen的增强终端 |
tmate |
共享会话 | tmux分支,专为会话共享设计 |