10 个实用的 Shell 脚本
—title: 10 个实用的 Shell 脚本 — 日常运维必备date: 2026-06-26tags: [shell, 运维, 自动化]series: CSDN知识付费—# 10 个实用的 Shell 脚本 — 日常运维必备在 Linux 运维的日常工作中Shell 脚本是程序员和运维工程师最趁手的瑞士军刀。无论是批量处理日志、监控系统状态还是自动化部署一个得力的脚本往往能让你从重复劳动中解放出来。然而很多新人要么不会写要么写出的脚本缺乏健壮性容易在生产环境翻车。今天我整理了 10 个日常运维必背的 Shell 脚本覆盖文件管理、系统监控、网络检测、备份、自动化巡检等高频场景。每个脚本都附带详细注释你可以直接拿去用也可以稍加改造适配你的环境。 建议收藏本文遇到运维需求时可以回来抄作业。—## 脚本一批量重命名文件基于正则场景将目录下所有.jpg文件改为yyyy-MM-dd_xxx.jpg格式便于归档。bash#!/bin/bash# 批量重命名在文件名前插入日期前缀# 用法./rename.sh /path/to/imagesTARGET_DIR${1:-.} # 默认当前目录DATE_TAG$(date %Y-%m-%d) # 获取当前日期cd $TARGET_DIR || { echo 目录不存在; exit 1; }for file in *.jpg; do # 跳过没有匹配的文件 [ -f $file ] || continue # 新文件名 日期_原文件名 mv -v $file ${DATE_TAG}_${file}doneecho 重命名完成踩坑提醒一定要先[ -f $file ] || continue否则当目录下没有.jpg文件时$file会变成字面量*.jpg导致把文件改名为奇怪的名字。—## 脚本二自动清理 7 天前的日志文件场景/var/log/myapp/每天产生大量日志磁盘空间告警。bash#!/bin/bash# 自动清理过期日志并记录清理动作LOG_DIR/var/log/myappRETENTION_DAYS7CLEANUP_LOG/var/log/cleanup_history.log# find -mtime 7 表示修改时间超过 7 天的文件find $LOG_DIR -type f -name *.log -mtime $RETENTION_DAYS -exec rm -f {} \;# 记录清理结果echo $(date %Y-%m-%d %H:%M:%S) 清理了 $LOG_DIR 中 $RETENTION_DAYS 天前的日志文件 $CLEANUP_LOG进阶用法配合crontab每天凌晨执行bash0 2 * * * /usr/local/bin/cleanup_logs.sh—## 脚本三服务器资源监控CPU、内存、磁盘场景运维需要快速查看当前系统负载但不想记住一堆命令。bash#!/bin/bash# 一键系统资源概览echo 系统资源报告 $(date) # CPU 负载最近 1 分钟echo 【CPU 负载】uptime | awk -Fload average: {print $2}# 内存使用总量、已用、可用、百分比echo 【内存使用】free -h | awk /^Mem:/ {print 已用: $3 / 总量: $2 / 可用: $7}# 磁盘使用率超过 80% 用红色提醒echo 【磁盘使用】df -h | grep -E ^/dev/ | while read line; do usage$(echo $line | awk {print $5} | sed s/%//) if [ $usage -gt 80 ]; then echo -e \033[31m⚠️ $line\033[0m # 红色 else echo $line fidone实用技巧用颜色输出更容易发现问题\033[31m是红色\033[0m是恢复默认。—## 脚本四批量检查网络连通性场景运维接手多台服务器需要快速排查哪些机器网络不通。bash#!/bin/bash# 批量 Ping 检测支持超时和并行IP_LIST192.168.1.1192.168.1.10192.168.1.20google.comTIMEOUT3check_ip() { local ip$1 if ping -c 1 -W $TIMEOUT $ip /dev/null; then echo ✅ $ip 可达 else echo ❌ $ip 不可达 fi}for ip in $IP_LIST; do # 放入后台并行执行大大加快速度 check_ip $ip done# 等待所有后台任务完成waitecho 检查完毕。性能对比如果 10 个 IP 串行检查每个 3 秒超时最多耗时 30 秒。改用并行后基本在 3 秒内完成。—## 脚本五数据库自动备份MySQL场景每天凌晨备份生产数据库保留最近 7 天数据。bash#!/bin/bash# MySQL 全量备份脚本DB_USERbackup_userDB_PASSyour_passwordDB_NAMEproduction_dbBACKUP_DIR/data/backup/mysqlDATE_TAG$(date %Y-%m-%d_%H%M)# 如果目录不存在则创建mkdir -p $BACKUP_DIR# 执行备份压缩存储mysqldump -u$DB_USER -p$DB_PASS --single-transaction \ --routines --triggers $DB_NAME \ | gzip ${BACKUP_DIR}/${DB_NAME}_${DATE_TAG}.sql.gz# 删除 7 天前的备份find $BACKUP_DIR -type f -name *.sql.gz -mtime 7 -deleteecho ✅ 备份完成${BACKUP_DIR}/${DB_NAME}_${DATE_TAG}.sql.gz关键参数解释---single-transaction用于 InnoDB 表保证备份一致性而不锁表---routines--triggers导出存储过程和触发器—## 脚本六检测登录失败并封禁 IP场景防止 SSH 暴力破解自动将失败次数过多的 IP 加入 iptables 黑名单。bash#!/bin/bash# 基于 /var/log/secure 检测失败登录动态封禁THRESHOLD5BLOCK_TIME3600 # 秒LOG_FILE/var/log/secure# 提取失败 IP统计次数grep Failed password $LOG_FILE | grep -oP from \K[0-9.] | sort | uniq -c | while read count ip; do if [ $count -ge $THRESHOLD ]; then # 检查是否已被封禁 if ! iptables -L INPUT -n | grep -q $ip; then iptables -A INPUT -s $ip -j DROP echo $(date) 封禁 $ip 失败次数$count /var/log/block_ip.log fi fidone注意生产环境建议用fail2ban这里提供的是轻量级替代方案。iptables 规则重启后会丢失需要配合iptables-save持久化。—## 脚本七目录同步与差异备份rsync场景将 Web 静态文件从生产服务器同步到备份服务器。bash#!/bin/bash# 增量同步目录并保留 7 天历史SOURCE/data/wwwTARGETbackup192.168.1.100:/backup/wwwEXCLUDE_FILE/etc/rsync_exclude.txt # 排除 node_modules, .git 等# 增量同步删除源端不存在的文件rsync -avz --delete --exclude-from$EXCLUDE_FILE \ $SOURCE $TARGET# 快照备份每天保留一份完整副本保留最近 7 天# 这里用了 hardlink 节省空间实际生产推荐 rsnapshotDATE_TAG$(date %Y-%m-%d)BACKUP_BASE/data/snapshotmkdir -p $BACKUP_BASE/$DATE_TAGcp -al $SOURCE $BACKUP_BASE/$DATE_TAG# 删除 7 天前的快照find $BACKUP_BASE -maxdepth 1 -type d -mtime 7 -exec rm -rf {} \;关键点cp -al创建的是硬链接不会占用额外磁盘空间但实现了每天一份完整备份的假象。这是低成本快照的经典做法。—## 脚本八定时检测进程异常则自动重启场景某 Java 服务偶尔内存溢出挂掉需自动守护重启。bash#!/bin/bash# 进程保活脚本配合 crontab 每分钟执行PROCESS_NAMEjava -jar myapp.jarPID_FILE/var/run/myapp.pidSTART_CMD/usr/local/myapp/start.sh# 检查进程是否存在if ! pgrep -f $PROCESS_NAME /dev/null 21; then echo $(date) 进程 ${PROCESS_NAME} 已挂尝试重启... /var/log/keepalive.log $START_CMD # 等待几秒检查是否启动成功 sleep 5 if pgrep -f $PROCESS_NAME /dev/null 21; then echo 重启成功 /var/log/keepalive.log else echo 重启失败请人工介入 /var/log/keepalive.log fifi性能优化尽量不要频繁pgrep整个命令行对于已知 PID 的服务直接用kill -0 $PID检查效率更高。但对于启动脚本不明的情况pgrep -f是通用方案。—## 脚本九快速生成系统巡检报告场景每天生成一份 HTML 报告展示服务器的核心指标。bash#!/bin/bash# 生成系统巡检 HTML 报告REPORT_DIR/var/www/reportsHTML_FILE${REPORT_DIR}/report_$(date %Y%m%d).htmlmkdir -p $REPORT_DIR# 采集数据HOSTNAME$(hostname)UPTIME$(uptime -p)DISK$(df -h / | tail -1 | awk {print $4 可用共$2})# 生成 HTMLcat $HTML_FILE EOF!DOCTYPE htmlhtmlheadtitle系统巡检 - $HOSTNAME/title/headbodyh1巡检报告$HOSTNAME/h1p生成时间$(date %Y-%m-%d %H:%M)/ph2运行时长/h2p$UPTIME/ph2磁盘剩余/h2p$DISK/ph2内存使用/h2pre$(free -h)/pre/body/htmlEOFecho 报告已生成$HTML_FILE锦上添花加上表格、图表库如 ECharts或者直接在微信/钉钉推送告警。—## 脚本十一键部署 Nginx 配置检查场景新服务器初始化快速搭建 Web 服务。bash#!/bin/bash# 自动安装 Nginx 并检查配置set -e # 任何错误即退出if [ $EUID -ne 0 ]; then echo 请使用 root 或 sudo 执行 exit 1fi# 检测包管理器if command -v apt /dev/null; then apt update apt install -y nginxelif command -v yum /dev/null; then yum install -y epel-release yum install -y nginxelse echo 不支持的 Linux 发行版; exit 1fi# 启动并设置开机自启systemctl enable --now nginx# 配置语法检查nginx -t echo ✅ Nginx 配置正确 || echo ❌ 配置有误请检查# 输出基本信息echo Nginx 版本$(nginx -v 21)echo 默认站点目录/usr/share/nginx/html坑alias lsrm这类恶作剧我们用command -v而非which因为which在某些系统上行为不一致。—## 常见坑和解决方案### 坑 1变量未加引号导致的空格分割问题错误写法bashfilemy document.txtcat $file # 会拆成 cat my document.txt正确写法bashcat $file### 坑 2set -e与grep组合时脚本意外退出bashset -egrep error /var/log/syslog # 如果没匹配到返回非 0脚本直接退出解决方案加上|| true或改用set e临时关闭bashgrep error /var/log/syslog || true### 坑 3Crontab 中执行脚本环境变量缺失bash# 错误脚本里用到 $PATH 但 crontab 的 PATH 很短* * * * * /opt/myscript.sh正确做法在脚本头部固定环境或者用绝对路径bash#!/bin/bashexport PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$PATH—## 总结Shell 脚本是运维工程师的肌肉记忆。今天我带你过了一遍文件管理、系统监控、网络检测、备份、进程守护、配置部署等 10 个高频场景。它们虽然简单但每一行都是生产环境中踩坑换来的经验。学习建议1. 不要只是复制自己手打一遍改一个参数跑跑看。2. 逐渐养成好习惯变量加引号、错误处理、日志记录。3. 遇到重复 3 次以上的手动操作就考虑写成脚本。这些脚本你可以直接保存到一个~/scripts/目录配合 crontab 和别名每天帮你省下至少半小时。—## 推荐阅读- ShellCheck — 在线 Shell 脚本语法检查工具- Google Shell 风格指南- 《Linux Shell 脚本攻略》—— 最实操的 Shell 入门书—觉得有用点个收藏下次运维不慌张。

相关新闻

看板设计实战:从 Plotly 到 ECharts,构建可交互的数据可视化方案

看板设计实战:从 Plotly 到 ECharts,构建可交互的数据可视化方案

看板设计实战:从 Plotly 到 ECharts,构建可交互的数据可视化方案 一、静态图表的痛点 传统的数据可视化流程通常是:分析师用 matplotlib 画好图,导出为 PNG,贴进 PPT,发给业务方。业务方看完后追问“能不能…

2026/6/27 2:44:21阅读更多 →
几大运算符之间的细节

几大运算符之间的细节

一、算数运算符关于算术运算符大家应该都比较熟悉,他们分别是加()、减(-)、乘(*)、除(/)、取整(//),取整数商部分、取模或者叫取余&am…

2026/6/27 2:44:21阅读更多 →
Navisworks2027下载安装教程(附安装包)Navisworks保姆级安装教程

Navisworks2027下载安装教程(附安装包)Navisworks保姆级安装教程

文章目录一、Navisworks2027 软件简介二、Navisworks2027 下载三、Navisworks2027 安装教程Navisworks2027安装失败怎么办?常见报错及解决方法一、Navisworks2027 软件简介 Navisworks Manage 2027 是 Autodesk 旗下主打的 BIM 协同审查平台,在项目全生…

2026/6/27 2:39:21阅读更多 →
软件许可复用架构怎么搭?核心三层:监测→回收→重获

软件许可复用架构怎么搭?核心三层:监测→回收→重获

直接给架构:复用架构就三层——监测层盯着谁在空转、回收层把许可拽回来、重获层让下一个排队的人秒接盘。 2026年我帮客户搭过7套这种系统,峰值并发从23拉到31,没加一个许可。三层缺一不可,少任何一层都转不起来。为什么非得是三…

2026/6/27 8:39:43阅读更多 →
抖音内容下载新体验:5分钟学会批量获取视频、音乐和直播

抖音内容下载新体验:5分钟学会批量获取视频、音乐和直播

抖音内容下载新体验:5分钟学会批量获取视频、音乐和直播 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback sup…

2026/6/27 8:39:43阅读更多 →
GEO优化商第一梯队:智擎优途深度解析

GEO优化商第一梯队:智擎优途深度解析

引言:什么是GEO优化? 在当今数字营销领域,GEO(地理定位)优化已成为提升本地业务曝光、精准触达目标客户的关键策略。它通过技术手段,使企业的在线内容、广告和服务信息在特定地理区域内获得优先展示&#x…

2026/6/27 8:39:43阅读更多 →
136、PCIE在NVMe SSD中的应用:从一次诡异的丢盘故障说起

136、PCIE在NVMe SSD中的应用:从一次诡异的丢盘故障说起

136、PCIE在NVMe SSD中的应用:从一次诡异的丢盘故障说起 上周实验室的NVMe测试平台又出怪事了——跑满负载半小时后,系统突然报“I/O设备错误”,盘直接消失。重启后盘能认,但一上压力就复现。这种玄学问题最让人头疼:硬件看起来正常,温度不高,供电也稳,偏偏在高压下掉…

2026/6/27 8:39:43阅读更多 →
【AI大模型】环境踩坑:虚拟环境搭建与依赖管理全攻略

【AI大模型】环境踩坑:虚拟环境搭建与依赖管理全攻略

【AI大模型】环境踩坑:虚拟环境搭建与依赖管理全攻略(零基础含代码) 绝大多数AI大模型开发新手,卡死在第一步:环境报错。 明明代码和教程一模一样,别人能跑,自己一跑就报错:模块不存在、版本不匹配、CUDA不兼容、依赖冲突、更新完库旧项目直接报废。做API调用、RAG知…

2026/6/27 8:39:43阅读更多 →
AI科技热点日报 | 2026年6月26日

AI科技热点日报 | 2026年6月26日

文章目录AI科技热点日报 | 2026年6月26日📌 今日摘要一、英伟达股东大会:黄仁勋宣告"AI工厂时代"到来事件概要来源 / Sources二、MWC上海今日收官:AI从"秀肌肉"转向"拼落地"事件概要来源 / Sources三、智元机器…

2026/6/27 8:34:43阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/27 5:46:02阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →