← Electerm 博客

Electerm 批量输入与镜像输入:敲一次,驱动多台终端

2026-09-19
批量输入镜像输入广播输入ssh提效运维
Electerm 批量输入与镜像输入:敲一次,驱动多台终端

Electerm 批量输入与镜像输入:敲一次,驱动多台终端

在四台主机上重启同一个服务,在六台应用服务器上翻同一份日志,因为某个节点不对劲所以在每台机器上敲一遍 df -h——命令完全相同,不一样的只有机器。开四个终端、把同一行敲四遍,这不算工作,这叫练打字。

electerm 为这件事准备了两个不一样的工具,它们不能互相替代:

  • 镜像输入(界面文案是"将输入镜像到所有终端")——终端控制栏上的一个开关。打开后,写入活动终端的一切内容都会同步到窗口内所有其它终端窗格
  • 批量输入——底栏那个小小的 批量输入 输入框。点开、勾选标签页、敲一条命令、回车。命令只发给被勾中的那些标签页,一次。

功能视频:Electerm 批量输入和镜像输入内容到多个终端

先看这段:这两个功能都会把真实输入送到真实机器上,没有二次确认弹窗,也没有撤销。下面所有内容都建立在一个前提上——你能脱口说出此刻正在接收你按键的每一台主机。文末的安全守则不是可读可不读的部分。

1. 两个功能并排对比

镜像输入 批量输入
入口 会话控制栏的图标(终端窗格右上角),提示文案"将输入镜像到所有终端" 底栏的 批量输入 输入框
发送什么 写入活动终端 socket 的一切——敲入的字符和粘贴的内容 一行文本,回车提交
发给谁 所有其它「窗格是终端」的标签页,无法只挑一部分 恰好是你勾选的那些标签页(配 All / None 快捷键)
生命周期 一直开着,直到你手动关掉;状态按会话标签页保存 一次性的——回车后面板立即收起
历史 最近 30 条不重复命令,本地保存
适合 交互式、探索式、"想同时看到每台机器反应"的场景 把一条明确的命令打到一组明确的主机上

如果只记一句话:镜像输入是一种模式,批量输入是一条消息。

2. 镜像输入——从活动终端发起的实时广播

打开一个书签,然后看终端窗格右上角那一排图标。广播图标(那个像组织结构图的小图标)默认是关闭的,点一下,它会高亮表示已开启。

从这一刻起,你在这个标签页里敲的任何东西,都会同时写入窗口内所有「窗格是终端」的其它标签页。SFTP 窗格、网页标签页、RDP/VNC 会话以及其它非终端窗格会被跳过——只有真正的终端会收到这串输入。

于是下面这套流程就能跑起来:

  1. web-01web-02web-03web-04 开成四个标签页。
  2. 切到 web-01,打开镜像输入。
  3. sudo systemctl restart nginx 并回车。
  4. 四台机器一起重启 nginx,四份输出同时在眼前滚动。

因为广播挂的是 socket 写入而不是键盘事件,粘贴同样会被镜像。从笔记里复制一段初始化命令、粘贴到活动终端,整套命令就会在整组主机上执行。

什么时候不该用镜像输入

  • 你只想动其中几台,而不是全部。镜像输入没有按标签页挑选的能力,那是批量输入的活儿。
  • 你的命令在不同主机上行为可能不同。如果 2 号主机弹出一个确认问题、其它主机没有,重复的按键就会和提示符错位,接下来你就是在对着不匹配的提示符盲敲。
  • 任何需要交互界面的命令——vimtopmysql REPL、再 ssh 到下一跳——会在每个窗格里各画一份,自己和自己打架。

让镜像的命令保持非交互、幂等,并且短到四份输出一起滚过时你还能看清。

3. 批量输入——一条命令,一张主机勾选表

批量输入在窗口底部的底栏上。点击 批量输入 输入框,它会展开成一个面板,由两部分组成:一个多行文本框,和一份你的终端标签页列表。

在这个列表里:

  • 每个标签页是一个切换按钮,显示它的序号和标题,勾中的会带一个对勾图标。
  • 你当前所在的标签页前面标着一个 *
  • AllNone 可以一次全选或全清。
  • 只有终端标签页会出现。网页、RDP、VNC 标签页不在列表里,因为它们接受不了终端输入。

然后敲命令、回车。命令会发送到每一个被勾中的标签页,面板随之收起。

df -h /

整个交互就这么多。几个实用细节:

  • 选择是粘性的。 再次打开面板时,electerm 会丢掉已经不存在的标签页,保留你上次勾选的其余部分;如果一个有效的都不剩,就回退到当前标签页。很方便——同时也是最容易误伤"你以为早就取消勾选"的那台主机的路径。每次按回车前扫一眼列表。
  • 历史记录。 最近 30 条不重复命令会保存在本地,所以下周再敲 docker pssystemctl status app 只需点一下。数据不出你的机器。
  • 移动端。 小屏上入口会收成一个紧凑的 B 按钮,点开是同一个面板。
  • 它只发一行。 批量输入发送的是单行内容。多行脚本请用 a && b && c 串起来,或者用下面提到的批量操作组件。

4. 该选哪一个

你的情况 用哪个
四台同构的 web 节点,重启一条命令 镜像输入——你能实时看到四份输出
开了八个终端,但只允许碰其中三台 staging 批量输入——勾三台,另外五台不动
命令跑完之后你还想继续在集群里翻翻看看 镜像输入——它会一直开着直到你关掉
只想发一条命令,然后回到单终端工作 批量输入——它天生就是一次性的
同一组主机、同一套顺序,每周一早上都要跑 批量操作组件——JSON 工作流 + 分步进度,也可以用 electerm -bo workflow.json 从命令行跑(wiki

批量操作组件是这个家族里的第三个成员,值得知道:它按 JSON 定义连接主机、执行命令、通过 SFTP 传文件,并汇报每一步的进度。当任务是"要可重复"而不是"临时凑一下"时,用它。也可以看视频:Electerm 批量操作

5. 现成配方

在一组节点上滚动重启——镜像输入,一条命令:

sudo systemctl restart nginx && systemctl is-active nginx

is-active 会给你每台主机一个明确的结论,这样广播也不必开太久。

发布前确认时间同步——批量输入 date -u。如果有台主机差了几分钟,你希望在发布之前知道,而不是之后。

在应用层翻日志——批量输入,然后逐个标签页看:

tail -n 50 /var/log/app/error.log

看谁在吃磁盘——批量输入 du -xh --max-depth=1 /var | sort -h | tail -5

在所有机器上杀掉卡死的 worker——镜像输入,模式写窄一点:

sudo pkill -f 'stuck-worker --queue=default'

推一份配置并重载——镜像输入,让所有主机的 reload 输出落在同一处:

sudo install -m 644 /tmp/app.conf /etc/app/app.conf && sudo systemctl reload app

6. 真正要紧的安全守则

多主机输入是个带锋刃的工具。四个习惯能让它安全:

  1. 敲之前先念出接收方。 镜像输入的接收方是"所有其它终端窗格";批量输入的接收方是"当前被勾中的那些"。如果你说不出来,就别按回车。
  2. 绝不混角色。 不要在开着镜像输入的窗口里同时留着主库、负载均衡和应用节点。按角色拆成不同窗口,或者用批量输入明确勾选。
  3. 只用非交互命令。 不要编辑器、不要分页器、不要 REPL、不要会提问的命令。如果需要每台主机都有人回答一个问题,它就不适合做镜像/批量命令。
  4. 用完关掉镜像输入。 它是按标签页保存的状态,很容易忘;你接下来敲的每一下照样会到处跑。批量输入没有这个坑——但它会记住你的勾选。

一个很有用的习惯:专门留一个"集群窗口"做镜像操作,单机调试在另一个窗口做。这样这个模式就没法泄漏到错误的会话里。

7. 和 electerm 其它功能配合

  • 工作区会同时保存布局标签页列表,所以"四台 web 节点摆成 2x2 网格"只是一次点击。工作区 + 镜像输入,你的集群窗口永远只差一个动作。视频:Electerm 工作区
  • 会话布局提供分屏(2x2 网格、多列、多行),让镜像输出一眼看清,而不用在标签页里翻找。视频:Electerm 会话布局
  • 快速命令把天天要跑的一行命令存起来,点一下就行,不用重敲。视频:Electerm 快速命令
  • SFTP 窗格天然不碍事——它们永远收不到镜像输入,所以你可以把文件管理器开在广播中的终端旁边。

速查表

  • 镜像输入 = 一种模式。点终端控制栏上的广播图标,你敲入或粘贴的一切都会送到所有其它终端窗格,直到你关掉。
  • 批量输入 = 一条消息。点底栏输入框、勾标签页、敲一行、回车。有历史记录,勾选会保留,没有逐主机确认。
  • 批量操作组件 = 一份脚本。JSON 工作流、分步进度、可命令行执行。
  • 口诀:探索用镜像,定点用批量,重复用批量操作。

下一篇:Electerm 简介——先把集群摆好;或者 Electerm 的 SSH 能力——如果你要镜像进去的那些终端还没配好。