tmux 是一个终端复用器它让你在一个终端窗口里管理多个独立的会话、窗口和窗格并且这些会话在 SSH 断连或主动分离后依然在后台运行随时可以重新连接回来。一、tmux 是什么tmuxTerminal Multiplexer是一个终端复用器。它允许在一个终端屏幕上创建、访问和控制多个终端。最核心的能力是tmux 可以从当前屏幕分离detach在后台继续运行之后随时重新附加reattach。为什么需要它如果你用 SSH 连远程服务器跑一个长时间的深度学习训练网络一断SSH 会话结束进程很可能被终止几个小时的训练白费。tmux 解决的正是这个问题会话与终端窗口解耦。你关掉终端、断网、甚至关机tmux 里的进程照常跑。回来后tmux attach一切照旧。二、核心概念会话、窗口、窗格tmux 的层次结构是Session → Window → Pane三者是包含关系。Session会话会话是 tmux 的顶层工作区是一个“伪终端集合”。每个会话有名字可以独立分离和重连。你可以同时有多个会话比如一个跑训练、一个跑数据处理、一个日常运维。会话是持久的会存活于意外断连如 SSH 超时或主动分离C-b d之后。Window窗口一个会话包含一个或多个窗口。窗口占据整个屏幕相当于“标签页”。每个窗口有自己的编号和名称状态栏底部显示当前窗口信息。Pane窗格一个窗口可以被分割成多个矩形窗格每个窗格是独立的伪终端。这意味着你可以在同一个窗口里左边跑htop右边跑日志tail -f下面再开一个 shell 写代码全部同时可见。这种“会话-窗口-窗格”三层模型是 tmux 区别于 screen 的关键screen 只有“窗口”一层概念而 tmux 将窗口和窗格拆成了两个对象管理更灵活。三、工作原理客户端-服务器模型tmux 采用客户端-服务器client-server架构。当你运行tmux时实际上启动了一个tmux 服务器进程服务器管理所有会话、窗口和窗格。你看到的终端界面是一个客户端进程通过/tmp下的 Unix 域套接字与服务器通信。这种设计的直接好处是多个客户端可以连接到同一个会话。比如你和同事通过 SSH 连到同一台服务器可以附加到同一个 tmux 会话实时看到相同的终端输出协作调试。窗口可以在不同会话之间自由移动客户端也可以轻松切换会话。一个需要注意的副作用如果 tmux服务器进程崩溃所有会话都会丢失。但实践中 tmux 非常稳定。四、安装与启动# Ubuntu / Debian sudo apt install tmux # CentOS / Fedora sudo yum install tmux # macOS brew install tmux启动 tmuxtmux # 创建匿名会话 tmux new -s work # 创建名为 work 的会话启动后终端底部会出现状态栏显示当前会话和窗口信息。五、常用命令与快捷键tmux 的快捷键需要一个前缀键prefix默认是Ctrlb。按完前缀键再按功能键。会话管理操作命令 / 快捷键新建命名会话tmux new -s mysession列出会话tmux ls附加到会话tmux attach -t mysession分离会话Ctrlb然后d杀掉会话tmux kill-session -t mysession窗口与窗格操作操作快捷键新建窗口Ctrlb然后c垂直分屏左右Ctrlb然后%水平分屏上下Ctrlb然后切换窗格Ctrlb然后方向键关闭窗格输入exit或Ctrld翻页查看历史输出tmux 默认不支持鼠标滚轮。按Ctrlb然后[进入翻页模式用方向键或 PageUp/PageDown 查看历史日志按q退出。六、配置与插件基础配置~/.tmux.conftmux 的默认配置极简真正的力量来自自定义。几个最实用的配置# 开启鼠标支持点击切换窗格、拖拽调整大小、滚轮翻页 set -g mouse on # 把前缀键从 Ctrlb 改为 Ctrla更顺手 unbind C-b set -g prefix C-a bind C-a send-prefix # 窗口编号从 1 开始 set -g base-index 1 setw -g pane-base-index 1 # 用 | 和 - 分屏比 % 和 更直观 bind | split-window -h -c #{pane_current_path} bind - split-window -v -c #{pane_current_path}改完后重载配置tmux source-file ~/.tmux.conf。插件管理TPMTmux Plugin ManagerTPM是管理 tmux 插件最方便的方式。安装步骤# 1. 克隆 TPM git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm # 2. 在 ~/.tmux.conf 底部添加 set -g plugin tmux-plugins/tpm set -g plugin tmux-plugins/tmux-sensible run ~/.tmux/plugins/tpm/tpm # 3. 重载配置后按 Ctrlb I 安装插件常用插件包括tmux-resurrect保存和恢复会话、tmux-continuum自动保存、vim-tmux-navigatorVim 和 tmux 之间无缝切换窗格。七、脚本化与自动化tmux 几乎所有的命令都可以在 shell 脚本中非交互执行。这意味着你可以自动化终端工作流。常见模式# 检查会话是否存在避免重复创建 tmux has-session -t mywork 2/dev/null || tmux new -s mywork -d # 在指定会话中发送命令 tmux send-keys -t mywork python train.py Enter # 捕获窗格输出 tmux capture-pane -t mywork -p # 分离模式创建窗口和窗格 tmux new -s work -d tmux split-window -h -t work这种能力让 tmux 成为自动化交互式 CLI 工具的理想载体。像git rebase -i、vim这类需要实时输入输出的交互程序可以通过 tmux 的send-keys和capture-pane实现程序化控制。八、常见问题排查问题原因与解决颜色显示不正确检查$TERM是否为screen-256color或tmux-256color在配置中设置set -g default-terminal tmux-256colorCPU 占用高自动重命名窗口可能消耗 CPU关掉setw -g automatic-rename offVim 中 Esc 键响应慢在配置中加入set -g escape-time 0Putty 中 Ctrl方向键无效终端发送的按键序列与 tmux 预期不符需要调整 Putty 的终端设置或 tmux 的 key bindingmacOS 权限错误/tmp下 socket 目录权限问题检查/private/tmp/tmux-uid的权限九、口述总结“tmux 是终端复用器核心价值是把终端会话和终端窗口解耦。它的三层模型是 Session、Window、Pane会话是顶层工作区窗口是标签页窗格是分割区域。底层是客户端-服务器架构服务器管理所有会话客户端通过 Unix socket 连接所以多个客户端可以共享同一个会话。最常用的场景是 SSH 到远程服务器后跑长时间任务即使断网或关掉终端tmux attach就能恢复。快捷键默认前缀是 Ctrlb分离是 Ctrlb d分屏是 Ctrlb % 和 Ctrlb 。配置写 ~/.tmux.conf插件用 TPM 管理。tmux 还支持完全脚本化可以用send-keys和capture-pane自动化交互式 CLI 工具。面试里如果被追问我会强调tmux 的核心价值不是‘多开终端’而是‘会话持久化’——它让进程的生命周期独立于网络连接和终端窗口这是远程开发和长任务运行的刚需。”