tmux 命令 #
tmux
(Terminal Multiplexer)是一个终端复用器,允许用户在一个终端窗口中运行多个终端会话。它支持会话的分离和重新连接,窗口和面板的分割,以及丰富的自定义选项。tmux是screen的现代替代品,提供了更多功能和更好的用户体验。
语法 #
tmux [选项] [命令 [参数]]
常用选项 #
选项 | 描述 |
---|---|
-2 |
强制tmux假定终端支持256色 |
-c 命令 |
执行指定的命令而不是默认shell |
-f 文件 |
指定配置文件 |
-L 套接字名 |
指定套接字名称 |
-S 套接字路径 |
指定套接字路径 |
-u |
使用UTF-8 |
-v |
显示版本信息 |
-V |
显示详细版本信息 |
常用命令 #
命令 | 描述 |
---|---|
new-session [-s 会话名] |
创建一个新会话 |
attach-session [-t 目标会话] |
连接到一个已存在的会话 |
list-sessions |
列出所有会话 |
kill-session [-t 目标会话] |
终止一个会话 |
list-windows |
列出所有窗口 |
new-window [-n 窗口名] |
创建一个新窗口 |
split-window [-h/-v] |
水平或垂直分割窗口 |
select-pane [-UDLR] |
选择面板(上下左右) |
resize-pane [-UDLR] [大小] |
调整面板大小 |
常用键绑定 #
在tmux中,所有命令都以前缀键开始,默认是Ctrl+b
(通常写作C-b
):
键绑定 | 描述 |
---|---|
C-b ? |
显示所有键绑定 |
C-b d |
分离当前会话 |
C-b c |
创建一个新窗口 |
C-b , |
重命名当前窗口 |
C-b & |
关闭当前窗口 |
C-b n |
切换到下一个窗口 |
C-b p |
切换到上一个窗口 |
C-b 0-9 |
切换到指定编号的窗口 |
C-b w |
列出所有窗口 |
C-b % |
垂直分割窗口 |
C-b " |
水平分割窗口 |
C-b 方向键 |
切换到相应方向的面板 |
C-b z |
最大化/还原当前面板 |
C-b { |
向前交换面板位置 |
C-b } |
向后交换面板位置 |
C-b x |
关闭当前面板 |
C-b [ |
进入复制模式 |
C-b ] |
粘贴复制的文本 |
C-b t |
显示时钟 |
C-b : |
进入命令模式 |
常见用法 #
1. 创建一个新的tmux会话 #
tmux
2. 创建一个命名的tmux会话 #
tmux new -s session_name
3. 分离当前会话 #
按下Ctrl+b
然后按d
。
4. 列出所有会话 #
tmux ls
或者:
tmux list-sessions
5. 重新连接到一个分离的会话 #
tmux attach -t session_name
或者简写:
tmux a -t session_name
6. 创建一个新窗口 #
在tmux会话中,按下Ctrl+b
然后按c
。
7. 切换窗口 #
- 下一个窗口:
Ctrl+b n
- 上一个窗口:
Ctrl+b p
- 特定窗口:
Ctrl+b 0
(窗口0),Ctrl+b 1
(窗口1)等
8. 分割窗口 #
- 垂直分割:
Ctrl+b %
- 水平分割:
Ctrl+b "
9. 在面板之间移动 #
按下Ctrl+b
然后按方向键。
10. 调整面板大小 #
按下Ctrl+b
,然后按住Ctrl
键并按方向键。
实用示例 #
1. 创建一个包含多个窗口的会话 #
tmux new-session -s dev -n editor
tmux new-window -n console -t dev
tmux new-window -n logs -t dev
tmux select-window -t dev:1
tmux attach-session -t dev
2. 创建一个分割布局的会话 #
tmux new-session -s split -d
tmux split-window -h -t split
tmux split-window -v -t split:0.1
tmux attach-session -t split
这将创建一个主窗口和两个分割的面板。
3. 在tmux会话中运行长时间任务 #
tmux new -s backup -d
tmux send-keys -t backup "rsync -avz /source /destination" C-m
稍后可以使用tmux attach -t backup
检查进度。
4. 共享会话(结对编程) #
用户A创建一个会话:
tmux new -s pair
用户B连接到同一个会话:
tmux attach -t pair
两个用户现在可以看到并交互同一个会话。
5. 保存和恢复会话 #
使用tmux插件管理器(TPM)和tmux-resurrect
插件:
# 在~/.tmux.conf中添加
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
run '~/.tmux/plugins/tpm/tpm'
然后:
- 保存会话:
Ctrl+b Ctrl+s
- 恢复会话:
Ctrl+b Ctrl+r
6. 创建一个脚本化的工作环境 #
#!/bin/bash
# 创建一个新会话
tmux new-session -d -s work
# 创建编辑器窗口
tmux rename-window -t work:0 'editor'
tmux send-keys -t work:editor 'cd ~/projects/main && vim .' C-m
# 创建服务器窗口
tmux new-window -t work -n 'server'
tmux send-keys -t work:server 'cd ~/projects/main && npm start' C-m
# 创建日志窗口并分割
tmux new-window -t work -n 'logs'
tmux split-window -h -t work:logs
tmux send-keys -t work:logs.0 'tail -f /var/log/system.log' C-m
tmux send-keys -t work:logs.1 'tail -f ~/projects/main/logs/app.log' C-m
# 选择第一个窗口并连接
tmux select-window -t work:editor
tmux attach-session -t work
7. 监控系统状态 #
tmux new -s monitor -d
tmux split-window -v -t monitor
tmux split-window -h -t monitor:0.1
tmux send-keys -t monitor:0.0 'htop' C-m
tmux send-keys -t monitor:0.1 'watch -n 1 df -h' C-m
tmux send-keys -t monitor:0.2 'tail -f /var/log/syslog' C-m
tmux attach -t monitor
8. 使用同步面板 #
在tmux会话中:
- 创建多个面板
- 按
Ctrl+b
然后按:
进入命令模式 - 输入
setw synchronize-panes on
现在在一个面板中输入的命令将在所有面板中执行。
9. 创建一个临时的配置测试环境 #
tmux new -s test
在会话中:
Ctrl+b :
source-file ~/test.tmux.conf
这允许测试新的tmux配置而不影响默认配置。
10. 使用tmux作为状态监控面板 #
tmux new -s status -d
tmux split-window -v -t status
tmux split-window -h -t status:0.0
tmux split-window -h -t status:0.1
tmux send-keys -t status:0.0 'watch -n 1 "ps aux | sort -nrk 3 | head"' C-m
tmux send-keys -t status:0.1 'watch -n 1 "free -m"' C-m
tmux send-keys -t status:0.2 'watch -n 1 "netstat -tun | grep ESTABLISHED | wc -l"' C-m
tmux send-keys -t status:0.3 'watch -n 1 "df -h"' C-m
tmux attach -t status
配置 #
tmux的配置文件是~/.tmux.conf
。以下是一些常用配置示例:
# 更改前缀键为Ctrl+a(类似screen)
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
# 使用vim键绑定
setw -g mode-keys vi
# 设置状态栏
set -g status-bg black
set -g status-fg white
set -g status-left "#[fg=green]#S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-right "#[fg=cyan]%d %b %R"
# 自定义键绑定
bind | split-window -h
bind - split-window -v
bind r source-file ~/.tmux.conf \; display "配置已重新加载!"
# 设置历史限制
set -g history-limit 10000
# 启用活动警报
setw -g monitor-activity on
set -g visual-activity on
# 设置终端颜色
set -g default-terminal "screen-256color"
插件 #
tmux支持通过tmux插件管理器(TPM)安装插件。以下是一些流行的插件:
- tmux-resurrect:保存和恢复tmux会话
- tmux-continuum:自动保存和恢复tmux环境
- tmux-yank:改进复制到系统剪贴板的功能
- tmux-pain-control:更好的面板管理
- tmux-copycat:改进搜索功能
- tmux-open:快速打开突出显示的文件或URL
- tmux-sidebar:显示目录树侧边栏
- tmux-fingers:快速复制文本
与screen的比较 #
特性 | tmux | screen |
---|---|---|
历史 | 更新,更多功能 | 更老,更稳定 |
配置 | 更灵活,更复杂 | 相对简单 |
分屏 | 强大的分屏功能 | 支持但有限 |
脚本化 | 更好的脚本支持 | 有限支持 |
会话共享 | 支持 | 支持 |
默认前缀键 | Ctrl+b | Ctrl+a |
状态栏 | 高度可定制 | 基本 |
插件系统 | 有 | 无 |
系统兼容性 | 大多数现代系统 | 几乎所有Unix系统 |
提示 #
- 使用
tmux list-keys
查看所有键绑定 - 使用
tmux info
查看tmux的详细信息 - 在
~/.tmux.conf
中自定义键绑定和外观 - 使用
Ctrl+b z
可以临时最大化一个面板,再次按下可以恢复原来的布局 - 使用
Ctrl+b {
和Ctrl+b }
可以交换面板位置 - 使用
Ctrl+b q
可以显示面板编号,然后按对应数字快速切换 - 使用
Ctrl+b t
可以在当前面板显示时钟 - 使用
tmux attach -d
可以分离其他客户端并连接到会话 - 使用
tmux command-prompt
可以打开命令提示符 - 使用插件管理器可以轻松扩展tmux的功能