首页/新闻资讯/正文详情

运维 Shell 脚本实战:10 个高频场景脚本(附代码)

发布时间:2026/9/23 19:33:14 来源:云帆数科 栏目:资讯中心
运维 Shell 脚本实战:10 个高频场景脚本(附代码)
摘要整理 10 个生产可用的运维 Shell 脚本:磁盘告警、日志清理、Nginx 日志统计、进程存活自动拉起、批量 SSH 并发执行、MySQL 备份保留、端口批量探测、系统信息采集、大日志按时间切割、定时任务防重复执行。每个脚本附完整代码与关键点说明。写脚本前的三板斧#!/bin/bashset-euopipefail# 遇错退出、未定义变量报错、管道任一环节失败即失败trapecho 清理临时文件; rm -f /tmp/$$.*EXIT# 异常也要清理现场养成习惯:所有脚本先写这两行,再写逻辑。90% 的脚本把线上搞坏都源于没有set -e。1. 磁盘使用率告警#!/bin/bashset-euopipefailTHRESHOLD85ALERT0whileread-rline;dousage$(echo$line|awk{print $5}|tr-d%)mount$(echo$line|awk{print $6})if[$usage-ge$THRESHOLD];thenecho[WARN]$mount使用率${usage}%ALERT1fidone(df-hP|tail-n2)[$ALERT-eq1]exit1||exit0关键点df -hP的-P保证一行一个挂载点(避免长设备名换行导致解析错位)退出码区分告警状态,方便接入监控平台(非 0 即告警)面试考点:为什么用-P?→ POSIX 输出格式,便于脚本解析。2. 清理 N 天前日志#!/bin/bashset-euopipefailLOG_DIR/var/log/appDAYS7DRY_RUN${1:---run}# 默认执行,传 --dry 只看不删find$LOG_DIR-typef-name*.log-mtime$DAYS-print0|whileIFSread-r-df;doif[$DRY_RUN--dry];thenecho[dry]$felserm-f--$fecho[del]$ffidone关键点-print0read -d :文件名含空格/换行也不出错支持 dry-run:先看再删,生产必备不要用rm -rf $DIR/*:变量为空时会删根目录(血案)面试考点:删了文件空间没释放?→ 文件被进程持有句柄,lsof | grep deleted,重启/重载进程或kill -USR1让其重开日志。3. Nginx 日志统计 TOP IP / 状态码#!/bin/bashset-euopipefailLOG$1echo TOP 10 来源 IP awk{print $1}$LOG|sort|uniq-c|sort-rn|head-10echo 状态码分布 awk{print $9}$LOG|sort|uniq-c|sort-rnecho TOP 10 慢请求 URL awk{print $NF, $7}$LOG|sort-rn|head-10关键点uniq -c前必须sort(uniq 只合并相邻行)sort -rn按数值倒序,-n不能省,否则 “10” 会排在 “9” 前面面试考点:统计 5xx 占比 →awk $9 ~ /^5/ | wc -l;按分钟统计 QPS → 用substr($4, 2, 17)截取时间做 key。4. 进程存活监控 自动拉起(带防重复)#!/bin/bashset-euopipefailAPPmyapp.jarLOG/var/log/app/myapp.logexec200/var/lock/myapp.lock flock-n200||{echo已有实例在跑,退出;exit0;}ifpgrep-f$APP/dev/null;thenecho进程存活exit0fiecho进程不在,拉起...nohupjava-jar$APP$LOG21echo已拉起 PID$!关键点flock -n:防止脚本被 cron 重复触发时并发执行(经典事故来源)pgrep -f匹配完整命令行;更严谨的做法是查 PID 文件生产建议用 systemd 的Restartalways,脚本只做兜底面试考点:为什么不用ps | grep判断?→ 会匹配到 grep 自身,且易受同名干扰。5. 批量 SSH 并发执行#!/bin/bashset-euopipefailHOSTS_FILE$1CMD${2:-uptime}CONCURRENCY10cat$HOSTS_FILE|xargs-P$CONCURRENCY-I{}bash-c host{} out$(timeout 8 ssh -o BatchModeyes -o ConnectTimeout3 -o StrictHostKeyCheckingno $host $CMD21)\echo[OK]$host:$out\||echo[FAIL]$host:$out关键点xargs -P控制并发度:太低慢,太高把跳板机打爆timeoutConnectTimeout:防止一台卡死拖住整批BatchModeyes:禁用交互提示(否则脚本会卡在密码输入)面试考点:批量执行的三大坑 → 单机卡死、并发过高、交互卡住,分别用 timeout / -P / BatchMode 解决。6. MySQL 备份 保留策略#!/bin/bashset-euopipefailDB$1DIR/backup/mysqlKEEP_DAYS14STAMP$(date%F_%H%M)mkdir-p$DIRmysqldump --single-transaction--quick--routines--triggers\-h127.0.0.1-ubackup -p$MYSQL_PWD$DB|gzip$DIR/${DB}_${STAMP}.sql.gzfind$DIR-name${DB}_*.sql.gz-mtime$KEEP_DAYS-deleteecho备份完成:$DIR/${DB}_${STAMP}.sql.gz关键点--single-transaction:InnoDB 一致性快照,不锁表密码用环境变量MYSQL_PWD,别写进命令行(会被ps看到)备份完必须验证:gzip -t校验 定期做恢复演练面试考点:备份三问 → 能不能恢复?多久能恢复?丢了最多丢多少数据?(RTO/RPO)7. 端口连通性批量探测#!/bin/bashset-euopipefailprobe(){localhost$1port$2iftimeout2bash-cecho /dev/tcp/$host/$port2/dev/null;thenecho[OPEN]$host:$portelseecho[CLOSE]$host:$portfi}whileIFS:read-rhostport;doprobe$host$portdonetargets.txtwait关键点/dev/tcp是 bash 内建,不需要装 nc/telnet后台并发 wait,比串行快得多目标文件格式:10.0.0.1:33068. 一键采集系统信息#!/bin/bashset-euopipefailecho 主机信息 hostname;uname-r;uptimeecho CPU TOP5 ps-eopcpu,pid,user,args--sort-pcpu|head-6echo 内存 free-mecho 磁盘 df-hP|grep-vtmpfsecho 连接数 ss-secho 最近登录 last-n5关键点:故障时第一时间跑这个脚本,信息先落盘( /tmp/diag_$(date %s).txt),别等现场被重启冲掉。9. 大日志按时间范围切割#!/bin/bashset-euopipefailSRC$1START$2# 如 2026-09-01 00:00END$3# 如 2026-09-02 00:00OUT${SRC}_${START///_}_${END///_}.logawk-vs$START-ve$END $0 s $0 e { print } $SRC$OUTwc-l$OUT关键点前提:日志每行以时间戳开头且格式统一(ISO 格式才可直接字符串比较)千万行大文件:用LC_ALLC加速字符串比较切完记得核对行数(别信感觉)10. 定时任务防重复执行#!/bin/bashset-euopipefailLOCK/var/lock/sync_data.lockexec200$LOCKif!flock-n200;thenecho$(date)上次任务未结束,本次跳过/var/log/sync_data.logexit0fiecho$(date)开始执行/var/log/sync_data.log# ... 业务逻辑echo$(date)执行完成/var/log/sync_data.log关键点任务执行时间 cron 间隔时,必然重叠 →flock是标准解法任务本身要幂等:跳过不代表不执行,重跑也不能有副作用记录开始/结束时间,方便算执行时长与排查卡住Shell 脚本 Checklist写完脚本自查这几条:有set -euo pipefail变量全部加引号:$VAR(空值时不会变成裸参数)危险操作支持 dry-run,或有确认有锁(防并发)、有超时(防卡死)关键步骤有日志、退出码能区分成败用 shellcheck 过一遍shellcheckmyscript.sh这些题我整理成了一个小程序上面这些题(以及更多)我整理成了一个小程序「系统运维面试题学习随手记」,295 道题按 8 个模块分类:中间件 · DevOps · SRE · 云原生 · Linux · AIOps · Shell · 综合开放题题库全部免费,不用登录,打开就能刷,每题都有参考答案(就是上面这种排查步骤 回答结构的形式)把简历和 JD 粘进去,会出 20 道针对你经历的押题,并给一份适配度分析(哪些 JD 要求你有对应经验、哪些要提前准备说法)还有录像练习:摄像头答题 → 回放 → 按要点自评,练表达(本地处理,不上传)微信搜索小程序「系统运维面试题学习随手记」题库持续更新,欢迎在评论区补充你被问过的题,我加进去。以上脚本场景在面试里也常被问到(“写个批量检查磁盘的脚本”“cron 任务重复执行怎么办”),我把这类题和参考答案一起整理进了自建的运维题库(295 题,8 个模块,免费刷)

相关推荐

sgcWebSockets实战指南:Delphi实时通信从安装到wss压测
sgcWebSockets实战指南:Delphi实时通信从安装到wss压测

简介:sgcWebSockets-Enterprise-V2023.5-FS是一套面向企业环境的WebSocket服务器软件包,适用于在线游戏、实时分析仪表板、金融交易应用、聊天服务等需要高并发双向低延迟通信的场景,帮助开发者在自有系统中快速构建稳定可靠的实时消息通道。… · 2026/9/23 19:33:07

色即是空下载避坑指南 3步看懂报错 速查手册
色即是空下载避坑指南 3步看懂报错 速查手册

色即是空下载避坑指南 3步看懂报错 速查手册 盯着满屏红色的 StackTrace,你是不是只想砸键盘?别慌,这堆天书一样的报错,其实就藏着一个核心逻辑: 你下载的东西,和你脑子里想的“色即是空下载”版本,根本对不上号。… · 2026/9/23 19:33:07

3步搞定默认网关无法设置:手写实现底层逻辑
3步搞定默认网关无法设置:手写实现底层逻辑

3步搞定默认网关无法设置:手写实现底层逻辑 上周技术面,面试官甩出一句:“你遇到过‘默认网关无法设置’这种报错吗?怎么排查的?”我愣了三秒,脑子里全是 ip route 和 route add… · 2026/9/23 19:32:54

熊猫直播tv速查手册:面试必考的5个底层坑
熊猫直播tv速查手册:面试必考的5个底层坑

熊猫直播tv速查手册:面试必考的5个底层坑 看了一堆教程还是不会写项目?别慌。很多开发者卡在“懂原理但落不了地”的尴尬境地,尤其涉及像【熊猫直播tv】这类早期流媒体平台的底层逻辑重构时,面试常被问懵。… · 2026/9/23 20:07:47

基于 Apache Arrow 的 MATLAB 接口设计指南:从 arrow.* 包到跨语言零拷贝内存共享
基于 Apache Arrow 的 MATLAB 接口设计指南:从 arrow.* 包到跨语言零拷贝内存共享

基于 Apache Arrow 的 MATLAB 接口设计指南:从 arrow.* 包到跨语言零拷贝内存共享 【免费下载链接】arrow Apache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing 项目地址: https://gitcode.com/gh_mirrors/arro… · 2026/9/23 20:07:47

网页版CAD文字提取:纯前端JS解析DWG中的McDbText
网页版CAD文字提取:纯前端JS解析DWG中的McDbText

1. 项目概述:在网页端直接提取CAD图纸中的文字内容你有没有遇到过这样的场景:客户发来一个DWG文件,里面密密麻麻全是标注、图名、材料表、技术参数,但你手头只有浏览器,没有安装AutoCAD,也没法用桌面版的CA… · 2026/9/23 20:07:46

3天搞懂dcci互联网数据中心源码,面试必问的底层逻辑全拆解
3天搞懂dcci互联网数据中心源码,面试必问的底层逻辑全拆解

3天搞懂dcci互联网数据中心源码,面试必问的底层逻辑全拆解 盯着屏幕上一堆红色的 StackTrace 报错,眼睛都快花了,根本不知道哪行代码在捣鬼。这种痛苦,我在转行初期也经历过无数次。当时为了应付 dcci互联网数据中心… · 2026/9/23 20:07:46

3分钟搞懂jspinclude图解原理,拒绝配置卡半天
3分钟搞懂jspinclude图解原理,拒绝配置卡半天

3分钟搞懂jspinclude图解原理,拒绝配置卡半天 刚接手一个老旧的Java Web项目,打开Eclipse或者IDEA,一跑起来满屏红叉,报错信息长得像天书,配置Tomcat环境就卡半天,这种痛苦谁懂?别急着删库重装,问题多半出在那个… · 2026/9/23 20:07:40

西门子S7通信协议详解:从TPKT到S7 PDU的抓包分析与实战
西门子S7通信协议详解:从TPKT到S7 PDU的抓包分析与实战

1. 搞懂西门子S7通信协议到底在解决什么问题1.1 从一个现场调试的尴尬场景说起前几年接手一个产线改造项目,现场有一台西门子S7-1200做主站,下面挂着几台变频器和仪表,上位机用的是第三方组态软件。电气柜已经送电,PLC程序也下载进… · 2026/9/23 20:07:40

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码