tmux

关注
义项:终端复用器
tmux

tmux是运行在类 Unix 系统上的终端复用器(terminal multiplexer),它允许在单个终端窗口中创建、访问并控制多个终端会话,每个会话可各自运行独立的程序[1]。它在后台以客户端—服务器结构运行,客户端断开后会话中的进程仍继续执行,之后可以重新接入[2]。这一特性使其常用于远程登录会话保持、长时任务管理与多任务并行操作[2]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

tmux是一类终端复用器软件,作用是把多个终端(或窗口)集中到同一个屏幕上进行创建、访问和控制,各个终端中运行着彼此独立的程序[1]。它采用服务器—客户端架构运行:必要时自动启动一个服务器进程,服务器持有若干会话,每个会话可以链接若干窗口,任意数量的客户端都能接入同一会话,也可以向服务器发送命令进行控制。客户端与服务器之间通过套接字通信,该套接字默认位于系统的临时目录中。

它常被当作 GNU Screen 的替代品,在不少发行版中被作为默认或预装工具提供,例如 Ubuntu Server 即预装 tmux,用户无需额外安装即可使用[2]。与只提供基本复用能力的早期工具相比,它给出了统一且文档化的命令接口,交互使用、键绑定与脚本调用采用同一套语法,并允许选用 vim 或 Emacs 风格的按键布局。

原理

tmux 的进程模型分为三层:客户端(client)接入会话(session),会话链接一个或多个窗口(window),窗口再切分为一个或多个窗格(pane),每个窗格内含一个伪终端[3]。服务器负责管理这些客户端、会话与窗口,客户端只是显示与输入的前端;因此断开会话中的窗口并不会随客户端消失,进程继续在服务器侧运行[3]。

交互操作采用两步式命令体系:先按下被称为前缀键的按键,再按命令键。默认前缀键为 Ctrl+b,这样 tmux 的命令不会与终端中普通程序的输入相互干扰,这种组合称为键绑定[2]。例如在前缀键之后按 d 表示从当前会话分离,按 c 表示新建窗口,按 % 表示把当前窗格左右拆分[4]。命令既可以在前缀键后输入,也可以直接在命令行提示符、脚本或配置文件中调用,例如 $tmux ; set-option -g status-style bg=cyan$ 这类命令在几种场合写法一致[5]。

会话中的窗口可以互相链接,同一个窗口能够被多个会话共享;若把多个会话放进同一会话组,组内会话共享同一批窗口,任一窗口的关闭会同时从组内所有会话中移除[6]。这种设计使得同一批工作区可以从不同客户端以不同视角接入。tmux 提供若干预设窗格布局(如 even-horizontal、even-vertical、main-vertical、tiled 等),用户可以按 M-1 到 M-7 之类的绑定直接套用[5]。

发展历程

tmux 由 Nicholas Marriott 创建,其版权声明自 2007 年起生效,项目最初的代码托管在 SourceForge 上[7]。2009 年 2 月,Debian 的缺陷跟踪系统中出现了将其打包的意向报告,当时的版本号为 0.7,描述为 screen 的替代品[8]。

此后项目迁移到 GitHub 上维护,版权年份跨度覆盖 2006 年至 2021 年,作者联系地址也从早年的用户组邮箱改为直接邮件地址。版本持续迭代:3.4 版被写入 Gentoo 的打包文件,3.6 版于 2025 年 11 月 26 日发布,3.7 版于 2026 年 6 月 26 日发布,其后又有 3.7b、3.7c 两个修订版本[9]。发行版打包版本亦随之更新,如 MSYS2 提供 3.7.c 版本[10]。

许可方面,项目早期文件采用 BSD 许可,较新的打包信息显示其主许可为 ISC 许可,同时包含 BSD-2 条款、BSD-3 条款等兼容条款[11]。

应用

最常见的用途是在远程登录场景中保持工作现场。分离会话后,可以安全关闭终端或断开连接,会话中的程序继续在后台运行,之后再重新接入,这适合长时间任务、需要持续存在的开发环境,以及网络中断后的恢复[2]。

在本地操作中,窗口被类比为浏览器中的标签页,用于在同一个会话内并排组织不同工作区;窗格则把终端切分成多块,同时查看不同的 shell 输出,适合让数据库控制台、Web 服务、后台任务、构建工具、测试运行器和终端文本编辑器同时保持可见,减少窗口切换带来的操作中断[12][2]。

tmux 还支持多用户在远程连接下共享同一会话,这一能力常被用于结对编程、教学演示与远程排障[2]。在自动化方面,会话布局、配置项和命令都可以写成脚本,配合配置文件在启动时恢复复杂的工作布局,键绑定与状态栏也可在配置中自定义[2][5]。

局限

tmux 本身不提供图形界面,全部操作围绕按键与命令展开,其命令体系庞大、部分交互(例如调整窗格尺寸)需要记忆较多绑定或改用显式命令,学习成本较高[2]。软件主要面向类 Unix 系统,使用者也常需要在 Windows 上借助子系统环境才能运行[12]。

会话与窗口的生命周期受 shell 退出影响:在窗口中执行 exit 或按 Ctrl+d 退出 shell 时该窗口即关闭,若它是会话中最后一个窗口,整个会话随之终止;关闭窗格同样会结束其中的 shell 进程[2]。因此在需要保留进程时应选择分离会话而不是关闭窗口或窗格[2]。

回滚缓冲区用于查看已滚出屏幕的输出,默认只保存 2000 行,超出部分会被丢弃,需要保留更多历史输出时必须在配置中调高这一上限[2]。此外,只读客户端等权限设置会影响可用操作,当客户端被设为只读时,只有绑定到分离客户端或切换客户端命令的按键才会生效[3]。

参见

  • GNU Screen —— 出现更早的终端复用器,tmux 常被视为它的替代方案。

  • 伪终端 —— 每个 tmux 窗格内部承载的对象,是终端复用的基础机制。

  • 安全外壳协议 —— 远程登录中常用 tmux 保持会话的协议。

  • GNU Bash —— 通常在 tmux 窗口与窗格中运行的命令行解释器。

  • vim —— tmux 键绑定与复制模式可选用其风格的按键布局。

参考资料

  1. tmux 3.7c [引用日期2026-10-14]
  2. Terminal multiplexers [引用日期2026-10-14]
  3. Ubuntu Manpage: tmux [引用日期2026-10-14]
  4. man [引用日期2026-10-14]
  5. OpenBSD manual page server [引用日期2026-10-14]
  6. tmux(1) — tmux — Debian bookworm-backports [引用日期2026-10-14]
  7. +copyright [引用日期2026-10-14]
  8. bugreport [引用日期2026-10-14]
  9. Pro-Linux: Informationen zu tmux [引用日期2026-10-14]
  10. Base Package: tmux [引用日期2026-10-14]
  11. Commit - fa182d45c0729889462f426afd3b692126532e9e [引用日期2026-10-14]
  12. tmux 3 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T22:03:59Z

历史版本

本条目引用的词条
GNU Screen 伪终端 安全外壳协议 GNU Bash vim