用大模型写运维脚本,这几个坑千万别踩
很多运维新手尝到用大模型(ChatGPT、
Claude)写脚本的甜头后,
却频频在线上栽跟头——删了不该删的文件、
跑错目录、
漏了权限检查。用大模型写运维脚本,
这几个坑千万别踩,
本文结合实际案例,
一步步教你避开它们。
准备条件:先备好这两样东西
- 一台有测试环境的Linux服务器(推荐在虚拟机或容器里做,别直接上生产)。
- 一个能访问大模型工具(ChatGPT、Claude 或国内的大语言模型)的浏览器。
- 一条清晰的操作意图:比如“批量重命名日志文件,保留最近30天”而不是“写个脚本处理日志”。
第一步:正确提问——让AI理解你的真实需求
大模型写脚本最常见的问题是“答非所问”,根源在于提问太模糊。
错误提问
“写一个清理日志的脚本。”
正确模板(包含路径、时间、动作、安全措施)
“请写一个bash脚本,功能是删除 /var/log/myapp/ 目录下所有超过7天的 .log 文件。要求:
1. 先检查目录是否存在;
2. 删除前打印出将被删除的文件列表;
3. 使用 find 命令时加上 -delete 取代 rm,避免通配符问题;
4. 输出执行结果的摘要。请给出完整脚本代码。”
这样AI生成的脚本大概率直接可用,减少反复修改。
第二步:审查AI脚本——必须检查的4个地方
拿到AI给的代码后,不要直接复制粘贴执行。
逐项检查以下内容:
- 危险的命令:是否有
rm -rf、dd if=/dev/zero等破坏性操作?如果有,是否加了--dry-run或提示确认? - 硬编码路径:脚本里是否写死了
/home/ubuntu/之类的绝对路径?改成变量更安全。 - 权限调用:需要root权限时,脚本里是否用了
sudo?建议在脚本开头检查当前用户。 - 备份机制:修改或删除文件前,脚本是否做备份?例如用
cp先把要删的文件移动到临时目录。
小技巧:用 bash -n yourscript.sh 检查语法,用 shellcheck yourscript.sh 检查隐患。
第三步:避坑实战——4个具体案例
坑1:find命令配合rm时缺少路径保护
AI可能会生成:find / -name "*.tmp" -exec rm {} \;,
这会在全盘删文件。务必限定目录:find /tmp -name "*.tmp" -exec rm {} \;。
坑2:默认删除时间不符合业务
AI常用“删除7天前日志”,如果运维要求保留30天,必须显式说明。
在提问时就明确数字。
坑3:忘记处理空格文件名
AI可能写出 for f in $(ls *.log),遇到空格文件会拆开。
应改用 find ... -print0 | xargs -0 或 while IFS= read -r file。
坑4:无备份直接覆盖
更新配置文件时,脚本应该先备份原文件(如 cp /etc/nginx/nginx.conf{,.bak}),再修改。
第四步:效果验证——测试脚本的三道防线
- 干跑模式:先加
echo模拟操作,不真正执行删除/修改。例如删除类脚本加echo "Would delete: $file"。 - 限制执行范围:在测试环境里用最小数据集跑一次,检查输出是否符合预期。
- 日志审计:让脚本每次都输出详细执行日志,保存到固定文件。生产上线后,通过日志回看执行情况。
验收集合:
- 执行
bash -x script.sh看每一步输出,确认路径和命令正确。 - 检查目标目录:期望删除的文件确实被删了?不该动的文件还在吗?
- 模拟异常:比如磁盘满、目录不存在时,脚本是否会报错退出还是优雅处理?
最后一句
用大模型写运维脚本能大幅提效,但千万别闭眼复制。
把提问模板、审查清单和验证流程记牢,你就能从“踩坑”变成“填坑”的老手。
下次遇到类似任务时,拿起本文的步骤对照一遍,安全上线不再是难事。