如何快速开发命令行自动化脚本——以 Linux 检查为例

发布于 2026-10-05

一次真实的 Linux 主机巡检脚本开发:5 条命令,从手工日志到可批量下发。

场景

需求:看这台主机磁盘是否快满、满了被什么占、docker 里的服务是否正常。手工敲的是:

df -h
du -sh /* 2>/dev/null
du -sh /var/lib/* 2>/dev/null
docker ps
docker logs --tail 20 qingxun

这 5 条是一条递进证据链:df 看满不满 → du 逐层定位到目录 → docker ps/logs 看服务有没有被影响。只自动化前三条,拿到的还是“磁盘 21%”,没法直接行动。

1. 从手工日志生成主线描述

从手工操作日志生成需求描述

上面填一句目标,下面原样粘贴刚手工执行的会话(本次 5996 字符)。提示符、Last login 这类噪音不用清,AI 生成框架时会剥掉。注意日志会随请求发给模型,粘之前先删密码/IP。

需求描述框架与待确认

生成的框架按步骤整理成「命令 + 回显 + 处理逻辑 + 预期」。日志里只有事实、没有判据,所以 AI 把推不出的口径丢进右侧「待确认」:阈值取 80% 还是 90%、docker 日志出现 ERROR 算不算异常。点候选就地填进框架,再点「应用到主线描述」。本次阈值取 90%。

2. 自动化生成 → AI 测试 → AI 评估

自动化生成:沙箱测试与评估

一个按钮跑完三步:

  • 生成:按主线描述产出 Ruby 脚本和命令映射。

  • 测试:沙箱加载脚本,连模拟设备,按命令映射回放报文——脚本下发 df -h,就返回需求里那段真实回显。映射里没有的命令会直接回 not recognized。

  • 评估:按需求拆出的条目逐条核对,不通过就带原因重新生成,最多 3 次。

本次首轮通过:评估通过(结论 5 条 · 问题 2 条 · 建议 2 条),3 个检查点全部通过,共尝试 1 次。状态是「调试中」。

3. 人工审核

AI 说通过,不等于可以上生产。看两样东西:

生成的脚本

脚本:阈值就是你选的 90(DISK_USAGE_THRESHOLD = 90),命令逐字没被“顺手优化”,所有下发集中在 run 里,解析拆成独立函数。沙箱会禁掉 system/exec、File/IO 和 rm/reboot 这类破坏性命令,巡检脚本只能只读。

命令映射

命令映射:需求的机器可读版,5 条命令对应 5 段原文回显。核对它,等于核对“脚本在模拟环境里看到的世界”和真机是否一致——回显对不上,上机就解析失败。确认后点「保存」,状态仍为调试中,同时记一个版本。

4. 客户端下载脚本,上机联调

客户端同步脚本

客户端「我的脚本」→「同步脚本」。设备密码和回显都留在本地,不上云。

执行日志与云端改进入口

执行后看日志:检查点逐个落结论(检查点:检查根分区使用率 - [通过]),真机回显与模拟环境基本一致——这就是前面“回显原文照抄 + 命令映射”两步的回报。本次真机根分区 21%,远低于 90% 阈值,判定通过。

5. AI 改进

图 7 右上角的「云端改进」:把真机日志连同改进要求回传云端,AI 反推需求描述该怎么改,确认后再应用。于是形成闭环:

手工日志 → 需求描述 → 脚本 → 真机日志 → 改进描述 → 重新生成

设备回显默认不出本机,只有你点这个按钮时才送云端。

6. 标记脚本调试完成

回云端生成页点按钮条上的「调试完成」(见图 3):状态 调试中 → 调试完成,需要填写适配设备型号,版本可回滚。到此脚本才成为团队资产——客户端同步一次,就能批量下发给同型号的多台机器。


几个真正省事的点:

  1. 痛点不是生成代码,而是把需求说清楚。 所以重心在需求描述上,评估也按条目逐条核对。

  2. 待确认项是刻意留的。 阈值 80 还是 90、ERROR 算不算故障,日志里没有这些判据,只能由人定——比让模型猜一个数字、你再去代码里找要安全。

  3. 命令映射是调试环境的契约。 缺一条命令测试就回 not recognized,回显有出入测出来就和真机两回事。

  4. AI 通过 ≠ 免审核,真机跑通 ≠ 结束。 「评估通过」和「调试完成」是两个显式动作,中间夹着人工审核。

截图来自一次真实开发过程,涉及的 5 条命令见开头。

想自己跑一遍?到脚本生成器写一段描述,或先看使用指南。