15个实用Linux运维脚本

一、日志清理与归档

1. 按天清理 Nginx 旧日志(保留 7 天)

bash

bash 复制代码
#!/bin/bash
LOG_DIR="/var/log/nginx"
KEEP_DAYS=7

find "$LOG_DIR" -name "*.log" -mtime +$KEEP_DAYS -exec rm -f {} \;
echo "已清理 $KEEP_DAYS 天前的日志"

用途:防止磁盘被日志打满。


2. 日志按天切割并压缩

bash

bash 复制代码
#!/bin/bash
LOG="/var/log/app/app.log"
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)

if [ -f "$LOG" ]; then
    cp "$LOG" "${LOG}.${YESTERDAY}"
    > "$LOG"
    gzip "${LOG}.${YESTERDAY}"
    echo "已切割并压缩: ${LOG}.${YESTERDAY}.gz"
fi

用途:配合 crontab 每天凌晨执行。


二、磁盘与系统巡检

3. 磁盘使用率告警(超过 80% 输出)

bash

bash 复制代码
#!/bin/bash
THRESHOLD=80

df -h | awk -v t=$THRESHOLD 'NR>1 && $5+0 > t {print "警告: " $6 " 使用率 " $5}'

用途:接入监控或定时邮件。


4. 内存 + 负载 + 磁盘一键巡检

bash

bash 复制代码
#!/bin/bash
echo "===== 磁盘 ====="
df -h | awk 'NR>1 && $5+0 > 80 {print $6, $5}'

echo "===== 内存 ====="
free -m | awk 'NR==2 {print "已用:" $3 "MB  剩余:" $4 "MB"}'

echo "===== 负载 ====="
uptime | awk -F'load average:' '{print $2}'

echo "===== Top 5 CPU 进程 ====="
ps aux --sort=-%cpu | head -6

用途:每天早上一键看机器健康度。


5. 查找大文件(超过 1G)

bash

bash 复制代码
#!/bin/bash
find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null | awk '{print $5, $9}'

用途:磁盘爆了快速定位。


三、进程与服务管理

6. 服务挂了自动重启

bash

bash 复制代码
#!/bin/bash
SERVICE="nginx"

if ! pgrep -x "$SERVICE" > /dev/null; then
    echo "$(date) $SERVICE 已挂,正在重启..." >> /var/log/service_monitor.log
    systemctl restart "$SERVICE"
fi

用途:配合 crontab 每分钟检查一次。


7. 杀占用 CPU 最高的进程

bash

bash 复制代码
#!/bin/bash
PID=$(ps aux --sort=-%cpu | awk 'NR==2 {print $2}')
echo "杀掉 CPU 最高进程 PID: $PID"
kill -9 "$PID"

用途:紧急降负载,慎用。


8. 批量检查多台服务器端口

bash

bash 复制代码
#!/bin/bash
HOSTS=("192.168.1.10" "192.168.1.11" "192.168.1.12")
PORT=22

for host in "${HOSTS[@]}"; do
    if timeout 2 bash -c "echo > /dev/tcp/$host/$PORT" 2>/dev/null; then
        echo "$host:$PORT 正常"
    else
        echo "$host:$PORT 不通"
    fi
done

用途:批量巡检机器存活。


四、文件与配置批量处理

9. 批量替换多台机器配置里的 IP

bash

bash 复制代码
#!/bin/bash
OLD_IP="10.0.0.1"
NEW_IP="10.0.0.2"
CONF_DIR="/etc/app"

for file in "$CONF_DIR"/*.conf; do
    if grep -q "$OLD_IP" "$file"; then
        sed -i "s/$OLD_IP/$NEW_IP/g" "$file"
        echo "已替换: $file"
    fi
done

用途:服务器迁移、IP 变更。


10. 批量重命名文件(加日期后缀)

bash

bash 复制代码
#!/bin/bash
DATE=$(date +%Y%m%d)

for file in *.log; do
    mv "$file" "${file%.log}_${DATE}.log"
done

用途:归档备份。


11. 统计目录下文件数量和总大小

bash

bash 复制代码
#!/bin/bash
DIR="/data"

COUNT=$(find "$DIR" -type f | wc -l)
SIZE=$(du -sh "$DIR" | awk '{print $1}')

echo "目录: $DIR"
echo "文件数: $COUNT"
echo "总大小: $SIZE"

用途:快速了解数据目录情况。


五、备份脚本

12. MySQL 自动备份并删除 7 天前

bash

bash 复制代码
#!/bin/bash
DB_USER="root"
DB_PASS="password"
DB_NAME="mydb"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)

mkdir -p "$BACKUP_DIR"
mysqldump -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"

find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
echo "备份完成: ${DB_NAME}_${DATE}.sql.gz"

用途:每天定时备份数据库。


13. 目录增量备份(用 rsync)

bash

bash 复制代码
#!/bin/bash
SRC="/data/"
DST="/backup/data/"

rsync -avz --delete "$SRC" "$DST"
echo "同步完成: $(date)"

用途:本地或远程目录备份。


六、物流/费用场景专用脚本

结合你前面问的货车费用,这个脚本可以批量算运费:

14. 批量计算物流费用

假设 price.txt 格式:线路 车型 单价 数量

bash

bash 复制代码
#!/bin/bash
FILE="price.txt"

echo "===== 明细 ====="
awk '{print $1, $2, "金额:" $3*$4}' "$FILE"

echo "===== 总金额 ====="
awk '{sum += $3*$4} END {print sum "元"}' "$FILE"

15. 统计每条线路的总费用

bash

bash 复制代码
#!/bin/bash
FILE="price.txt"

awk '{total[$1] += $3*$4} END {for (line in total) print line, total[line]}' "$FILE" | sort -rn -k2

七、定时任务配置参考

把常用脚本加入 crontab:

bash

bash 复制代码
# 每天凌晨 2 点清理日志
0 2 * * * /opt/scripts/clean_log.sh

# 每 5 分钟检查服务
*/5 * * * * /opt/scripts/monitor_service.sh

# 每天凌晨 3 点备份数据库
0 3 * * * /opt/scripts/backup_mysql.sh

# 每天早上 8 点巡检
0 8 * * * /opt/scripts/check_system.sh

八、使用建议

  1. 脚本统一放 /opt/scripts/ ,加执行权限:chmod +x *.sh

  2. 重要操作先 echo 再执行,确认无误再真跑。

  3. 日志类脚本加日志输出 ,方便排查:>> /var/log/script.log 2>&1

  4. 删除类操作先用 -print 测试 ,比如 find ... -print 确认后再改 -delete。

  5. 生产环境慎用 kill -9 和 rm -rf,最好加白名单或二次确认。

相关推荐
承渊政道1 小时前
自建服务越来越多怎么管理?Docker部署Flare,搭一个自己的数字入口
运维·docker·容器·内网穿透·cpolar·nas·flare
螺蛳粉 螺蛳粉1 小时前
第五篇:Keepalived + LVS 四层负载均衡高可用实战:DR 模式全流程
运维·负载均衡·lvs·keepalived·高可用
Crazy________1 小时前
Linux内核核心机制全解析:从驱动到进程启动
运维
远牧1 小时前
Ubuntu 26 升级踩坑实录:hermes-agent venv 重建全过程
linux·ubuntu·ai·agent
新时代牛马1 小时前
Linux PREEMPT_RT 详解(5.10.268-rt164)
linux·运维·服务器
眼不痛请看我1 小时前
Ubuntu_22.04_LTS虚拟机安装指南
linux·数据库·ubuntu
哎呦,帅小伙哦1 小时前
查看网卡配置连接工具组合——nmcli + nmtui
linux
xiaoye-duck1 小时前
《Linux 网络编程》从 0 手写 Reactor 反应堆(上):拆解 Reactor 架构 —— 连接抽象、Poller 封装与事件派发核心
linux·网络
脚踏实地,坚持不懈!1 小时前
Android 电池健康度检测全流程(驱动 → 内核 → HAL → Framework)
android·linux