Electerm 批量输入与镜像输入:敲一次,驱动多台终端
在四台主机上重启同一个服务,在六台应用服务器上翻同一份日志,因为某个节点不对劲所以在每台机器上敲一遍 df -h——命令完全相同,不一样的只有机器。开四个终端、把同一行敲四遍,这不算工作,这叫练打字。
electerm 为这件事准备了两个不一样的工具,它们不能互相替代:
- 镜像输入(界面文案是"将输入镜像到所有终端")——终端控制栏上的一个开关。打开后,写入活动终端的一切内容都会同步到窗口内所有其它终端窗格。
- 批量输入——底栏那个小小的 批量输入 输入框。点开、勾选标签页、敲一条命令、回车。命令只发给被勾中的那些标签页,一次。
功能视频:Electerm 批量输入和镜像输入内容到多个终端。
先看这段:这两个功能都会把真实输入送到真实机器上,没有二次确认弹窗,也没有撤销。下面所有内容都建立在一个前提上——你能脱口说出此刻正在接收你按键的每一台主机。文末的安全守则不是可读可不读的部分。
1. 两个功能并排对比
| 镜像输入 | 批量输入 | |
|---|---|---|
| 入口 | 会话控制栏的图标(终端窗格右上角),提示文案"将输入镜像到所有终端" | 底栏的 批量输入 输入框 |
| 发送什么 | 写入活动终端 socket 的一切——敲入的字符和粘贴的内容 | 一行文本,回车提交 |
| 发给谁 | 所有其它「窗格是终端」的标签页,无法只挑一部分 | 恰好是你勾选的那些标签页(配 All / None 快捷键) |
| 生命周期 | 一直开着,直到你手动关掉;状态按会话标签页保存 | 一次性的——回车后面板立即收起 |
| 历史 | 无 | 最近 30 条不重复命令,本地保存 |
| 适合 | 交互式、探索式、"想同时看到每台机器反应"的场景 | 把一条明确的命令打到一组明确的主机上 |
如果只记一句话:镜像输入是一种模式,批量输入是一条消息。
2. 镜像输入——从活动终端发起的实时广播
打开一个书签,然后看终端窗格右上角那一排图标。广播图标(那个像组织结构图的小图标)默认是关闭的,点一下,它会高亮表示已开启。
从这一刻起,你在这个标签页里敲的任何东西,都会同时写入窗口内所有「窗格是终端」的其它标签页。SFTP 窗格、网页标签页、RDP/VNC 会话以及其它非终端窗格会被跳过——只有真正的终端会收到这串输入。
于是下面这套流程就能跑起来:
- 把
web-01、web-02、web-03、web-04开成四个标签页。 - 切到
web-01,打开镜像输入。 - 敲
sudo systemctl restart nginx并回车。 - 四台机器一起重启 nginx,四份输出同时在眼前滚动。
因为广播挂的是 socket 写入而不是键盘事件,粘贴同样会被镜像。从笔记里复制一段初始化命令、粘贴到活动终端,整套命令就会在整组主机上执行。
什么时候不该用镜像输入
- 你只想动其中几台,而不是全部。镜像输入没有按标签页挑选的能力,那是批量输入的活儿。
- 你的命令在不同主机上行为可能不同。如果 2 号主机弹出一个确认问题、其它主机没有,重复的按键就会和提示符错位,接下来你就是在对着不匹配的提示符盲敲。
- 任何需要交互界面的命令——
vim、top、mysqlREPL、再ssh到下一跳——会在每个窗格里各画一份,自己和自己打架。
让镜像的命令保持非交互、幂等,并且短到四份输出一起滚过时你还能看清。
3. 批量输入——一条命令,一张主机勾选表
批量输入在窗口底部的底栏上。点击 批量输入 输入框,它会展开成一个面板,由两部分组成:一个多行文本框,和一份你的终端标签页列表。
在这个列表里:
- 每个标签页是一个切换按钮,显示它的序号和标题,勾中的会带一个对勾图标。
- 你当前所在的标签页前面标着一个
*。 All和None可以一次全选或全清。- 只有终端标签页会出现。网页、RDP、VNC 标签页不在列表里,因为它们接受不了终端输入。
然后敲命令、回车。命令会发送到每一个被勾中的标签页,面板随之收起。
df -h /
整个交互就这么多。几个实用细节:
- 选择是粘性的。 再次打开面板时,electerm 会丢掉已经不存在的标签页,保留你上次勾选的其余部分;如果一个有效的都不剩,就回退到当前标签页。很方便——同时也是最容易误伤"你以为早就取消勾选"的那台主机的路径。每次按回车前扫一眼列表。
- 历史记录。 最近 30 条不重复命令会保存在本地,所以下周再敲
docker ps或systemctl 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. 真正要紧的安全守则
多主机输入是个带锋刃的工具。四个习惯能让它安全:
- 敲之前先念出接收方。 镜像输入的接收方是"所有其它终端窗格";批量输入的接收方是"当前被勾中的那些"。如果你说不出来,就别按回车。
- 绝不混角色。 不要在开着镜像输入的窗口里同时留着主库、负载均衡和应用节点。按角色拆成不同窗口,或者用批量输入明确勾选。
- 只用非交互命令。 不要编辑器、不要分页器、不要 REPL、不要会提问的命令。如果需要每台主机都有人回答一个问题,它就不适合做镜像/批量命令。
- 用完关掉镜像输入。 它是按标签页保存的状态,很容易忘;你接下来敲的每一下照样会到处跑。批量输入没有这个坑——但它会记住你的勾选。
一个很有用的习惯:专门留一个"集群窗口"做镜像操作,单机调试在另一个窗口做。这样这个模式就没法泄漏到错误的会话里。
7. 和 electerm 其它功能配合
- 工作区会同时保存布局和标签页列表,所以"四台 web 节点摆成 2x2 网格"只是一次点击。工作区 + 镜像输入,你的集群窗口永远只差一个动作。视频:Electerm 工作区。
- 会话布局提供分屏(2x2 网格、多列、多行),让镜像输出一眼看清,而不用在标签页里翻找。视频:Electerm 会话布局。
- 快速命令把天天要跑的一行命令存起来,点一下就行,不用重敲。视频:Electerm 快速命令。
- SFTP 窗格天然不碍事——它们永远收不到镜像输入,所以你可以把文件管理器开在广播中的终端旁边。
速查表
- 镜像输入 = 一种模式。点终端控制栏上的广播图标,你敲入或粘贴的一切都会送到所有其它终端窗格,直到你关掉。
- 批量输入 = 一条消息。点底栏输入框、勾标签页、敲一行、回车。有历史记录,勾选会保留,没有逐主机确认。
- 批量操作组件 = 一份脚本。JSON 工作流、分步进度、可命令行执行。
- 口诀:探索用镜像,定点用批量,重复用批量操作。
下一篇:Electerm 简介——先把集群摆好;或者 Electerm 的 SSH 能力——如果你要镜像进去的那些终端还没配好。

