首页/系统/Linux 运维命令速查/tmux 终端复用与脚本化
进程与作业69 条

tmux 终端复用与脚本化

现代终端复用器:会话/窗口/面板三级结构,断线恢复、分屏同看日志与指标,send-keys 还能脚本化驱动。

Linux 运维命令速查系统更新于 2026-10-13

tmux 是什么

tmux 是终端复用器,把终端分成会话、窗口、面板三层:一个会话可以包含多个窗口,一个窗口又能切成多块面板。它的核心价值是会话与连接解耦——SSH 断开后会话里的进程继续跑,重连即回到离开时的样子。此外 send-keys 允许把命令注入会话,这让 tmux 也能作为轻量级的运维自动化工具使用。

基本信息

用途会话保持、分屏查看、命令注入与自动化
语法tmux new|attach|ls|kill-session;命令模式用 tmux 子命令操作
快捷键前缀Ctrl+b,先按前缀再按功能键(d 分离、% 竖分、双引号 横分、方向键切换面板)
所属软件包tmux(多数发行版仓库自带,最小化系统需自行安装)

典型使用场景

  • 长时间任务:跑升级、数据导入这类耗时操作,断线也不中断
  • 一屏多看:左看日志滚动,右看指标或 shell,切换成本几乎为零
  • 远程办公切换网络:笔记本换网络导致 SSH 断开,重连后一切照旧
  • 多人协作:共享同一个会话观察同一个现象,避免口头描述失真
  • 脚本化驱动:用 send-keys 把命令注入会话,适合必须在交互环境执行的操作

常用示例

常用示例
tmux new -s ops                            # 新建并进入会话
tmux ls; tmux attach -t ops                # 列出会话 / 重新接入
tmux new -s ops -d 'watch -n 2 uptime'     # 后台建会话并直接运行命令
tmux split-window -h -t ops 'tail -f /var/log/app.log'
tmux send-keys -t ops 'systemctl status nginx' Enter
tmux kill-session -t ops                   # 结束整个会话(会杀掉其中的进程)

配置文件常用项

配置文件常用项
# ~/.tmux.conf
# set -g history-limit 10000     滚动缓冲放大到一万行
# set -g mouse on                开启鼠标选择面板与滚动(tmux 2.1 及以上)
# set -g base-index 1            窗口编号从 1 开始
# set -w -g mode-keys vi         复制模式使用 vi 风格按键

常用快捷键

按键作用说明
d分离会话SSH 断开与会话分离效果相同,进程继续运行
c / n / p新建窗口 / 下一个 / 上一个在同一会话内切换任务视角
% 与 双引号垂直与水平分割面板同一个窗口里同屏对比两路输出
方向键在面板之间移动大屏下多面板布局更高效
z面板最大化切换临时放大某块面板,再按恢复
[进入复制模式可用搜索与滚动查看历史输出
tmux 能让进程抵御 SSH 断开,但不能抵御机器重启:服务器重启后所有会话都会消失。需要开机自动拉起的工作应交给 systemd 或专门的会话持久化工具,而不是指望 tmux。
send-keys 注入的命令默认不会自动执行,必须把 Enter 作为单独的参数传进去;命令里本身含引号时要处理好转义,否则会注入出意料之外的内容。

易错点

  • 把 tmux 当守护进程用:它只保证进程不被终端断开带走,机器重启或会话被杀就全没了
  • send-keys 忘记加 Enter:命令只被输入不会执行,看着像「脚本没生效」
  • 注入的命令里含引号或变量不做转义:会被外层 shell 提前展开,注入结果与预期不符
  • 滚动缓冲区太小导致关键输出滚掉:长时间任务前先把 history-limit 调大,或把输出重定向到文件

数据来源与参考

  • man 1 tmux(tmux 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌