tmux命令

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会话中:

  1. 创建多个面板
  2. Ctrl+b然后按:进入命令模式
  3. 输入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)安装插件。以下是一些流行的插件:

  1. tmux-resurrect:保存和恢复tmux会话
  2. tmux-continuum:自动保存和恢复tmux环境
  3. tmux-yank:改进复制到系统剪贴板的功能
  4. tmux-pain-control:更好的面板管理
  5. tmux-copycat:改进搜索功能
  6. tmux-open:快速打开突出显示的文件或URL
  7. tmux-sidebar:显示目录树侧边栏
  8. 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的功能