UNIX Publication - tmux用法: http://www.unix.pub/docs/xDoc/tmux_usage/ - DAE用法: http://www.unix.pub/docs/xDoc/dae_usage/ - Linux透明代理: http://www.unix.pub/docs/xDoc/Linux_Transparent_proxy/ - Waydog Linux: http://www.unix.pub/docs/distributions/Waydog/ - Lilidog Linux: http://www.unix.pub/docs/distributions/Lilidog/ - APT用法: http://www.unix.pub/docs/debian/apt_usage/ - dpkg用法: http://www.unix.pub/docs/debian/dpkg_usage/ - Debian发行版: http://www.unix.pub/docs/debian/DebianReleases/ - Debian基本命令备忘录: http://www.unix.pub/docs/debian/Debian-Basic-Command-Memo/ - Debian软件包: http://www.unix.pub/docs/debian/debian_packages/ - 树莓派: http://www.unix.pub/docs/raspberrypi/ - OpenWrt: http://www.unix.pub/docs/openwrt/ - WD MyCloud Home安装运行Debian 11: http://www.unix.pub/docs/WDMyCloud/Running-Debian-11-on-WD-MyCloud-Home/ - WD MyCloud安装Debian Jessie: http://www.unix.pub/docs/WDMyCloud/Install-Debian-Jessie-on-WD-MyCloud-Gen1/ - WDMycloud救砖: http://www.unix.pub/docs/WDMyCloud/WDMycloud_Recovery/ - WDMycloud安装Debian: http://www.unix.pub/docs/WDMyCloud/WDMycloud_Crack_install_debian/ - GNU核心工具: http://www.unix.pub/docs/coreutils/ - base32命令用法: http://www.unix.pub/docs/coreutils/base32_usage/ - base64命令用法: http://www.unix.pub/docs/coreutils/base64_usage/ - basenc命令用法: http://www.unix.pub/docs/coreutils/basenc_usage/ - cat命令用法: http://www.unix.pub/docs/coreutils/cat_usage/ - fmt命令用法: http://www.unix.pub/docs/coreutils/fmt_usage/ - fold命令用法: http://www.unix.pub/docs/coreutils/fold_usage/ - head命令用法: http://www.unix.pub/docs/coreutils/head_usage/ - nl命令用法: http://www.unix.pub/docs/coreutils/nl_usage/ - od命令用法: http://www.unix.pub/docs/coreutils/od_usage/ - pr命令用法: http://www.unix.pub/docs/coreutils/pr_usage/ - tac命令用法: http://www.unix.pub/docs/coreutils/tac_usage/ # tmux用法 tmux(终端复用器terminal multiplexer)是一个免费的开源命令行工具,适用于类Unix系统,可以在一个屏幕上创建、管理和保持多个终端会话。它基于ISC 许可证发布,可运行在Linux、macOS、OpenBSD、FreeBSD、NetBSD和Solaris系统上。 tmux采用服务器/客户端架构。当你运行`tmux `时,它会启动一个后台服务器进程来管理所有会话。你的终端窗口则作为客户端连接到这个服务器。由于服务器独立于任何客户端运行,即使你关闭终端窗口或断开SSH 连接,会话也会继续存在——你只需重新连接并重新附着(reattach)即可。 tmux的三级结构是:会话(Session) → 窗口(Window) → 窗格(Pane)。一个会话可以包含一个或多个窗口。每个窗口占满整个终端,并且可以拆分成多个窗格。每个窗格里运行着独立的shell进程。 ## 安装tmux ```sh # 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快速入门 ```sh # 创建一个名为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`修改配置。 ```conf # ~/.tmux.conf unbind C-b set -g prefix C-a bind C-a send-prefix ``` ## tmux会话(session)管理 会话(session)是一个持久的工作区,它将窗口组合在一起,即使你脱离(Detach)窗口或关闭终端,它也会继续运行。会话由tmux服务器管理,并且可以在用户之间共享。 ```sh $ 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…)命名。 ```sh ➜ ~ 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会话,这对组队编程或实时服务器调试很有用。两个客户端看到的是同一个终端,并且都可以输入命令。 ```sh # 用户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)。在同一会话中切换窗口,可以处理不同的任务。 ```sh $ 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。 ```sh $ 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窗格同步 同步窗格会将输入的内容同时广播到所有窗格,在多个服务器上同时运行相同命令时很有用。 ```sh # 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-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 ```config # 一个默认配置文件实例 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" ``` 完整配置说明见,同时该页面还提供了可视化配置生成器。 ## tmux ssh保活 可通过设置来进行ssh保活,在长时间运行任务之前,先在远程服务器上启动一个tmux会话,如果SSH连接断开,会话会继续运行,你可以重新连接。 ```sh # 一键新建会话或连接已有会话 $ ssh user@server "tmux attach -t bbq || tmux new -s bbq" ``` 或者在服务器配置文件`~/.bashrc` `~/.bash_aliases`中添加 ```sh [ -z "$TMUX" ] && (tmux attach -t bbq || tmux new -s bbq) ``` 登录shell时,如果当前不在tmux里,就尝试连接到名为bbq的会话;如果不存在,就新建一个。也可以简写为 ```sh [ -z "$TMUX" ] && tmux new -A -s bbq ``` `-A`的含义是:会话存在就attach,不存在就new。 以上写法在本地打开终端也会自动进tmux,可以加个SSH判断只为远程连接配置 ```sh 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 ] | 粘贴buffer |Copy| |Prefix : | 命令prompt |Misc| |Prefix ? | 查看所有快捷键| Misc| |Prefix t | 时钟 |Misc|