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.5atmux快速入门#
# 创建一个名为work的Session
$tmux new -s work
# 水平拆分窗口(左右)
Ctrl+b %
# 垂直拆分窗口(上下)
Ctrl+b "
# 在窗格(Pane)之间导航
Ctrl+b ← → ↑ ↓
# 脱离(Detach)窗口,会话保持运行
Ctrl+b d
# 列出运行中的会话(sessions)
$tmux ls
# 重新连接(Reattach)会话
$tmux attach -t worktmux快捷键前缀键(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-prefixtmux会话(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 attachtmux窗口(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-panestmux窗格布局#
tmux提供五种内置的窗格布局,可以按前缀键加空格循环切换它们。
| 布局 | 快捷键 | 说明 |
|---|---|---|
| even-horizontal | Prefix Space ×1 | 所有窗格宽度相同,水平排列 |
| even-vertical | Prefix Space ×2 | 所有窗格高度相同,垂直排列 |
| main-horizontal | Prefix Space ×3 | 顶部大窗格,底部其他部分 |
| main-vertical | Prefix Space ×4 | 左边大窗格,右边其他部分 |
| tiled | Prefix 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
fitmux默认快捷键#
| 快捷键 | 动作 | 分类 |
|---|---|---|
| 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 ] | 粘贴buffer | Copy |
| Prefix : | 命令prompt | Misc |
| Prefix ? | 查看所有快捷键 | Misc |
| Prefix t | 时钟 | Misc |