tmux用法#

tmux(终端复用器terminal multiplexer)是一个免费的开源命令行工具,适用于类Unix系统,可以在一个屏幕上创建、管理和保持多个终端会话。它基于ISC 许可证发布,可运行在Linux、macOS、OpenBSD、FreeBSD、NetBSD和Solaris系统上。

tmux采用服务器/客户端架构。当你运行tmux 时,它会启动一个后台服务器进程来管理所有会话。你的终端窗口则作为客户端连接到这个服务器。由于服务器独立于任何客户端运行,即使你关闭终端窗口或断开SSH 连接,会话也会继续存在——你只需重新连接并重新附着(reattach)即可。

tmux的三级结构是:会话(Session) → 窗口(Window) → 窗格(Pane)。一个会话可以包含一个或多个窗口。每个窗口占满整个终端,并且可以拆分成多个窗格。每个窗格里运行着独立的shell进程。

安装tmux#

# macOS (Homebrew)
brew install tmux

# Ubuntu / Debian
sudo apt install tmux

# Fedora / RHEL
sudo dnf install tmux

# Arch Linux
sudo pacman -S tmux

#检查安装结果
➜  ~ tmux -V
tmux 3.5a

tmux快速入门#

# 创建一个名为work的Session
$tmux new -s work

# 水平拆分窗口(左右)
Ctrl+b %

# 垂直拆分窗口(上下)
Ctrl+b "

# 在窗格(Pane)之间导航
Ctrl+b ← → ↑ ↓

# 脱离(Detach)窗口,会话保持运行
Ctrl+b d

# 列出运行中的会话(sessions)
$tmux ls

# 重新连接(Reattach)会话
$tmux attach -t work

tmux快捷键前缀键(Prefix Key)#

所有tmux快捷键都需要先按下前缀键(Prefix Key)。默认前缀是Ctrl+b。先按前缀键(Prefix Key)松开,然后再按命令键。前缀键(Prefix Key)激活tmux的命令拦截,并将 tmux快捷键与普通终端输入区分开。

许多用户将前缀重新映射为Ctrl+a(GNU 屏幕风格),因为这样更方便操作。在~/.tmux.conf修改配置。

# ~/.tmux.conf                             
unbind C-b
                            
set -g prefix C-a
                            
bind C-a send-prefix

tmux会话(session)管理#

会话(session)是一个持久的工作区,它将窗口组合在一起,即使你脱离(Detach)窗口或关闭终端,它也会继续运行。会话由tmux服务器管理,并且可以在用户之间共享。

$ tmux new -s mysession           # 创建并打开命名会话
$ tmux new -s mysession -d        # 创建会话但不进入会话                     
$ tmux ls                         # 列出所有会话
$ tmux attach -t mysession        # 按名称打开(attach)会话
$ tmux rename-session -t old new  # 重命名会话
$ tmux kill-session -t mysession  # 删除会话
$ tmux kill-server                # 删除所有会话

命名的会话tmux new -s name是一直存在的,可以通过名字轻松重新连接(attach),未命名会话会按数字ID(0、1、2…)命名。

➜  ~ tmux ls
0: 1 windows (created Wed Sep 16 23:06:19 2026) (attached)
➜  ~ tmux new -s dog -d
➜  ~ tmux new -s duck -d
➜  ~ tmux ls
0: 1 windows (created Wed Sep 16 23:06:19 2026) (attached)
dog: 1 windows (created Wed Sep 16 23:23:28 2026)
duck: 1 windows (created Wed Sep 16 23:23:34 2026)
➜  ~

tmux会话(session)共享#

多个用户可以同时连接同一个tmux会话,这对组队编程或实时服务器调试很有用。两个客户端看到的是同一个终端,并且都可以输入命令。

# 用户A创建会话
$ tmux new -s shared

# 用户B打开(attach)同一会话
$ tmux attach -t shared

# 对于不同系统的用户,使用socket文件方式
$ tmux -S /tmp/shared.sock new-session -s pair
$ chmod 777 /tmp/shared.sock

# 其他系统用户
$ tmux -S /tmp/shared.sock attach

tmux窗口(Windows)管理#

窗口(Windows)可以看作是会话(session)中的标签页。每个窗口都有自己的窗格(panes)。在同一会话中切换窗口,可以处理不同的任务。

$ Prefix c          # 创建窗口
$ Prefix ,          # 重命名窗口
$ Prefix n / p      # 下一个 / 上一个
$ Prefix 0-9        # 按数字选择窗口
$ Prefix w          # 选择窗口           
$ Prefix &          # 删除窗口
$ tmux new-window -n logs # 创建命名(logs)窗口
$ tmux move-window -t 3 # 将当前窗口移到3位置,所有窗口按0,1,2,3...排序,包含命名和非命名窗口。

tmux窗格(Pane)管理#

窗格(Pane)可以把一个窗口(Windows)分成独立的终端区域,每个区域都可以运行不同的命令或shell。

$ Prefix %          # 水平拆分
$ Prefix "          # 垂直拆分
$ tmux split-window -h -p 30    # 水平拆分一个30%的窗格

$ Prefix ↑↓←→      # 在窗格间移动
$ Prefix q          # 显示窗格编号

$ Prefix Ctrl+↑↓←→ # 按住改变大小
$ tmux resize-pane -L 10 # 向左扩大10列

$ Prefix z          # 全屏窗格
$ Prefix x          # 删除窗格
$ Prefix !          # 将窗格变为独立窗口

tmux窗格同步#

同步窗格会将输入的内容同时广播到所有窗格,在多个服务器上同时运行相同命令时很有用。

# Toggle sync (from command mode: Prefix :)
# 切换同步开关,先按快捷前缀 Ctrl b

setw synchronize-panes on  # 打开同步
setw synchronize-panes off # 关闭同步

                            
# 在.tmux.conf中绑定快捷键

bind e setw synchronize-panes

tmux窗格布局#

tmux提供五种内置的窗格布局,可以按前缀键加空格循环切换它们。

布局快捷键说明
even-horizontalPrefix Space ×1所有窗格宽度相同,水平排列
even-verticalPrefix Space ×2所有窗格高度相同,垂直排列
main-horizontalPrefix Space ×3顶部大窗格,底部其他部分
main-verticalPrefix Space ×4左边大窗格,右边其他部分
tiledPrefix Space ×5均等大小的窗格格子

通过命令设置布局 tmux select-layout even-horizontal

tmux配置文件#

tmux启动时会读取~/.tmux.conf配置文件,也可以使用$XDG_CONFIG_HOME/tmux/tmux.conf/etc/tmux.conf进行系统全局配置。

重新加载配置可以使用tmux source-file ~/.tmux.conf命令,或者Prefix : source-file ~/.tmux.conf

# 一个默认配置文件实例
set -g mouse on
set -g history-limit 50000
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
set -sg escape-time 0
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*256col*:Tc"

完整配置说明见https://tmux.app/config/,同时该页面还提供了可视化配置生成器。

tmux ssh保活#

可通过设置来进行ssh保活,在长时间运行任务之前,先在远程服务器上启动一个tmux会话,如果SSH连接断开,会话会继续运行,你可以重新连接。

# 一键新建会话或连接已有会话
$ ssh user@server "tmux attach -t bbq || tmux new -s bbq"

或者在服务器配置文件~/.bashrc ~/.bash_aliases中添加

[ -z "$TMUX" ] && (tmux attach -t bbq || tmux new -s bbq)

登录shell时,如果当前不在tmux里,就尝试连接到名为bbq的会话;如果不存在,就新建一个。也可以简写为

[ -z "$TMUX" ] && tmux new -A -s bbq

-A的含义是:会话存在就attach,不存在就new。

以上写法在本地打开终端也会自动进tmux,可以加个SSH判断只为远程连接配置

if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ]; then
    tmux new -A -s bbq
fi

tmux默认快捷键#

快捷键动作分类
Prefix c新建窗口Windows
Prefix n / p下一个 / 上一个Windows
Prefix w选择窗口Windows
Prefix &删除窗口Windows
Prefix %水平分割Panes
Prefix "垂直分割Panes
Prefix z全屏Panes
Prefix x删除窗格Panes
Prefix q显示窗格号Panes
Prefix Space循环选择布局样式Panes
Prefix d离开会话Sessions
Prefix s选择会话Sessions
Prefix $重命名会话Sessions
Prefix [进入copy模式Copy
Prefix ]粘贴bufferCopy
Prefix :命令promptMisc
Prefix ?查看所有快捷键Misc
Prefix t时钟Misc