Linux常用运维脚本大全

admin 2026-01-11 01:03:41 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档提供了Linux运维常用Shell脚本合集,涵盖系统监控、日志分析、备份恢复、安全检测、性能调优、自动化部署及网络监控七大类。脚本包含CPU内存监控、Nginx日志统计、自动备份、异常进程扫描及参数优化等实用功能,可直接用于提升服务器维护效率与安全水平,具备较强的可操作性。 综合评分: 89 文章分类: 安全工具,安全运营,网络安全,数据安全,安全建设


cover_image

Linux 常用运维脚本大全

原创

刘军军

运维星火燎原

2026年1月10日 00:02 河北

一、系统监控类脚本

1.1 系统健康检查脚本

#!/bin/bash
# system-health-check.sh

echo"=== 系统健康检查 $(date) ==="
echo"主机名: $(hostname)"
echo"运行时间: $(uptime)"

echo -e "\n1. CPU使用率:"
top -bn1 | grep "Cpu(s)" | awk '{print "总使用率: " 100-$8"%", "用户: "$2"%", "系统: "$4"%", "空闲: "$8"%"}'

echo -e "\n2. 内存使用:"
free -h | awk '/Mem:/ {print "总内存: "$2, "已用: "$3, "可用: "$4, "使用率: "$3/$2*100"%"}'

echo -e "\n3. 磁盘使用:"
df -h | grep -E '(/dev/sd|/dev/xvd|/dev/nvme)' | awk '{print $1": 总"$2", 已用"$3" ("$5")"}'

echo -e "\n4. 负载情况:"
echo"1分钟: $(cat /proc/loadavg | awk '{print $1}')"
echo"5分钟: $(cat /proc/loadavg | awk '{print $2}')"
echo"15分钟: $(cat /proc/loadavg | awk '{print $3}')"

echo -e "\n5. 网络连接数:"
ss -s | head -2

echo -e "\n6. 当前登录用户:"
who

1.2 实时监控脚本

#!/bin/bash
# realtime-monitor.sh

INTERVAL=5  # 监控间隔(秒)
DURATION=60 # 监控时长(秒)

echo "开始实时监控,间隔 ${INTERVAL}s,持续 ${DURATION}s..."
end=$((SECONDS+DURATION))

while [ $SECONDS -lt $end ]; do
    clear
    echo "=== 实时监控 $(date) ==="
    echo "CPU使用: $(top -bn1 | grep "Cpu(s)" | awk '{printf "%.1f%%", 100-$8}')"
    echo "内存使用: $(free | awk '/Mem:/ {printf "%.1f%%", $3/$2*100}')"
    echo "磁盘使用: $(df / | awk 'NR==2 {print $5}')"
    echo "负载: $(cat /proc/loadavg | awk '{print $1","$2","$3}')"
    echo "TCP连接: $(ss -s | awk '/TCP:/ {print $2}')"
    sleep $INTERVAL
done

二、日志分析类脚本

2.1 Nginx访问日志分析

#!/bin/bash
# nginx-log-analyzer.sh

LOG_FILE="/var/log/nginx/access.log"

if [ ! -f "$LOG_FILE" ]; then
    echo"错误: 日志文件不存在: $LOG_FILE"
    exit 1
fi

echo"=== Nginx访问日志分析 $(date) ==="
echo"分析文件: $LOG_FILE"
echo"统计时间范围: $(head -1 $LOG_FILE | awk '{print $4}' | tr -d '[') 到 $(tail -1 $LOG_FILE | awk '{print $4}' | tr -d '[')"

echo -e "\n1. 总请求数:"
wc -l $LOG_FILE | awk '{print $1}'

echo -e "\n2. 状态码统计:"
awk '{print $9}'$LOG_FILE | sort | uniq -c | sort -nr | head -10

echo -e "\n3. 最频繁访问的IP:"
awk '{print $1}'$LOG_FILE | sort | uniq -c | sort -nr | head -10

echo -e "\n4. 最常访问的URL:"
awk '{print $7}'$LOG_FILE | sort | uniq -c | sort -nr | head -10

echo -e "\n5. 请求方法统计:"
awk '{print $6}'$LOG_FILE | tr -d '"' | sort | uniq -c | sort -nr

echo -e "\n6. 每小时请求量:"
awk '{print $4}'$LOG_FILE | cut -d: -f1,2 | sort | uniq -c | tail -24

2.2 错误日志监控脚本

#!/bin/bash
# error-log-monitor.sh

LOG_DIR="/var/log"
ERROR_KEYWORDS="error|fail|exception|timeout|denied|refused"

echo"=== 系统错误日志监控 $(date) ==="

for log_file in $(find $LOG_DIR -name "*.log" -type f); do
    echo -e "\n检查文件: $log_file"
    error_count=$(grep -E -i "$ERROR_KEYWORDS""$log_file" | wc -l)

    if [ $error_count -gt 0 ]; then
        echo"发现 $error_count 个错误:"
        grep -E -i "$ERROR_KEYWORDS""$log_file" | tail -5
    else
        echo"未发现错误"
    fi
done

三、备份恢复类脚本

3.1 自动化备份脚本

#!/bin/bash
# auto-backup.sh

BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7

# 备份目录
mkdir -p $BACKUP_DIR/$DATE

echo"=== 开始系统备份 $(date) ==="

# 1. 备份重要配置文件
echo"备份配置文件..."
tar -czf $BACKUP_DIR/$DATE/etc-backup.tar.gz /etc 2>/dev/null

# 2. 备份网站数据
echo"备份网站数据..."
tar -czf $BACKUP_DIR/$DATE/www-backup.tar.gz /var/www 2>/dev/null

# 3. 备份数据库 (MySQL)
echo"备份MySQL数据库..."
mysqldump -u root -p$(cat /root/mysql_password) --all-databases > $BACKUP_DIR/$DATE/mysql-backup.sql 2>/dev/null

# 4. 备份日志文件
echo"备份日志文件..."
tar -czf $BACKUP_DIR/$DATE/logs-backup.tar.gz /var/log 2>/dev/null

echo"备份完成,文件保存在: $BACKUP_DIR/$DATE/"

# 清理旧备份
echo"清理超过 $RETENTION_DAYS 天的旧备份..."
find $BACKUP_DIR -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null

3.2 增量备份脚本

#!/bin/bash
# incremental-backup.sh

SOURCE_DIR="/data"
BACKUP_DIR="/backup/incremental"
FULL_BACKUP_DIR="/backup/full"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
SNAPSHOT_FILE="$BACKUP_DIR/last_snapshot"

echo"=== 增量备份开始 $(date) ==="

# 每周日执行全量备份
if [ $(date +%u) -eq 7 ]; then
    echo"执行全量备份..."
    rsync -a --delete $SOURCE_DIR/ $FULL_BACKUP_DIR/current/
    echo"全量备份完成"
fi

# 执行增量备份
if [ -f "$SNAPSHOT_FILE" ]; then
    echo"执行增量备份..."
    rsync -a --delete --link-dest=$FULL_BACKUP_DIR/current/ $SOURCE_DIR/ $BACKUP_DIR/$TIMESTAMP/
else
    echo"首次备份,创建基础快照..."
    rsync -a $SOURCE_DIR/ $BACKUP_DIR/$TIMESTAMP/
fi

# 更新快照文件
echo$TIMESTAMP > $SNAPSHOT_FILE

echo "增量备份完成: $BACKUP_DIR/$TIMESTAMP/"

四、安全检测类脚本

4.1 系统安全扫描

#!/bin/bash
# security-scan.sh

echo"=== 系统安全扫描 $(date) ==="

# 1. 检查可疑进程
echo"1. 检查可疑进程:"
ps aux | awk '{print $11}' | sort | uniq | grep -E '(\.sh|\.py|wget|curl|nc|netcat|telnet|ssh|scp)$'

# 2. 检查异常网络连接
echo -e "\n2. 检查异常网络连接:"
netstat -tunap | awk '$6 == "ESTABLISHED" {print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

# 3. 检查SUID文件
echo -e "\n3. 检查可疑SUID文件:"
find / -perm -4000 -type f 2>/dev/null | xargs ls -la

# 4. 检查root权限用户
echo -e "\n4. 检查具有root权限的用户:"
awk -F: '($3 == 0) {print $1}' /etc/passwd

# 5. 检查空密码账户
echo -e "\n5. 检查空密码账户:"
awk -F: '($2 == "") {print $1}' /etc/shadow

# 6. 检查SSH安全配置
echo -e "\n6. SSH配置检查:"
grep -E "^(PermitRootLogin|PasswordAuthentication|Protocol)" /etc/ssh/sshd_config

echo -e "\n扫描完成!"

4.2 文件完整性检查

#!/bin/bash
# file-integrity-check.sh

BASE_DIR="/etc"
HASH_FILE="/root/file_hashes.txt"

echo"=== 文件完整性检查 $(date) ==="

if [ ! -f "$HASH_FILE" ]; then
    echo"创建初始哈希文件..."
    find $BASE_DIR -type f -exec sha256sum {} \; > $HASH_FILE
    echo"初始哈希已保存到: $HASH_FILE"
    exit 0
fi

echo"检查文件完整性..."
TEMP_FILE=$(mktemp)
find $BASE_DIR -type f -exec sha256sum {} \; > $TEMP_FILE

# 比较差异
if diff $HASH_FILE$TEMP_FILE > /dev/null; then
    echo"所有文件完整,未发现更改"
else
    echo"警告: 发现文件更改!"
    diff $HASH_FILE$TEMP_FILE
    # 更新哈希文件
    cp $TEMP_FILE$HASH_FILE
    echo"哈希文件已更新"
fi

rm -f $TEMP_FILE

五、性能优化类脚本

5.1 系统性能调优

#!/bin/bash
# performance-optimize.sh

echo"=== 系统性能调优 $(date) ==="

# 1. 调整内核参数
echo"优化内核参数..."
echo"net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo"net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo"vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p

# 2. 调整文件系统挂载参数
echo"优化文件系统..."
sed -i 's/defaults/defaults,noatime,nodiratime/' /etc/fstab
mount -o remount /

# 3. 调整进程限制
echo"调整进程限制..."
echo"* soft nofile 65535" >> /etc/security/limits.conf
echo"* hard nofile 65535" >> /etc/security/limits.conf

# 4. 优化磁盘IO
echo"优化磁盘IO调度..."
echo'echo deadline > /sys/block/sda/queue/scheduler' >> /etc/rc.local

# 5. 清理系统缓存
echo"清理系统缓存..."
sync && echo 3 > /proc/sys/vm/drop_caches

echo "性能优化完成!"

5.2 数据库优化脚本

#!/bin/bash
# mysql-optimize.sh

DB_USER="root"
DB_PASS=$(cat /root/mysql_password)

echo"=== MySQL数据库优化 $(date) ==="

# 1. 优化表
echo"优化数据库表..."
mysql -u$DB_USER -p$DB_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)" | whileread db; do
    echo"优化数据库: $db"
    mysql -u$DB_USER -p$DB_PASS$db -e "SHOW TABLES;" | whileread table; do
        mysql -u$DB_USER -p$DB_PASS$db -e "OPTIMIZE TABLE $table;"
    done
done

# 2. 清理日志
echo"清理二进制日志..."
mysql -u$DB_USER -p$DB_PASS -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"

# 3. 分析表状态
echo"分析表状态..."
mysql -u$DB_USER -p$DB_PASS -e "SHOW STATUS LIKE 'Threads_connected';"
mysql -u$DB_USER -p$DB_PASS -e "SHOW STATUS LIKE 'Qcache%';"

echo "数据库优化完成!"

六、自动化部署类脚本

6.1 应用部署脚本

#!/bin/bash
# app-deploy.sh

APP_NAME="myapp"
APP_DIR="/opt/$APP_NAME"
BACKUP_DIR="/backup/$APP_NAME"
GIT_REPO="https://github.com/user/$APP_NAME.git"

echo"=== 应用部署 $(date) ==="

# 1. 备份当前版本
if [ -d "$APP_DIR" ]; then
    echo"备份当前版本..."
    tar -czf $BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).tar.gz $APP_DIR
fi

# 2. 拉取最新代码
echo"拉取最新代码..."
if [ -d "$APP_DIR" ]; then
    cd$APP_DIR
    git pull origin master
else
    git clone$GIT_REPO$APP_DIR
    cd$APP_DIR
fi

# 3. 安装依赖
echo"安装依赖..."
if [ -f "package.json" ]; then
    npm install
elif [ -f "requirements.txt" ]; then
    pip install -r requirements.txt
fi

# 4. 构建应用
echo"构建应用..."
if [ -f "build.sh" ]; then
    chmod +x build.sh
    ./build.sh
fi

# 5. 重启服务
echo"重启服务..."
systemctl restart $APP_NAME

echo "应用部署完成!"

6.2 多服务器部署

#!/bin/bash
# multi-server-deploy.sh

SERVERS=("server1""server2""server3")
APP_DIR="/opt/myapp"
DEPLOY_USER="deploy"

echo"=== 多服务器部署 $(date) ==="

for server in"${SERVERS[@]}"; do
    echo"部署到服务器: $server"

    # 1. 传输文件
    rsync -avz --delete $APP_DIR/ $DEPLOY_USER@$server:$APP_DIR/

    # 2. 执行远程命令
    ssh $DEPLOY_USER@$server"
        cd $APP_DIR
        if [ -f 'package.json' ]; then
            npm install --production
        fi
        sudo systemctl restart myapp
        echo '部署完成: $server'
    "
done

echo "所有服务器部署完成!"

七、网络监控类脚本

7.1 网络连通性检测

#!/bin/bash
# network-check.sh

TARGETS=("8.8.8.8""google.com""baidu.com""github.com")
LOG_FILE="/var/log/network-check.log"

echo"=== 网络连通性检查 $(date) ===" >> $LOG_FILE

for target in"${TARGETS[@]}"; do
    if ping -c 3 -W 2 $target > /dev/null 2>&1; then
        echo"✓ $target 连通正常" | tee -a $LOG_FILE
    else
        echo"✗ $target 无法连通" | tee -a $LOG_FILE
        # 发送告警
        echo"网络告警: $target 无法连通 at $(date)" | mail -s "网络故障告警" [email protected]
    fi
done

# 检查端口连通性
PORTS=("80""443""22""3306")
for port in"${PORTS[@]}"; do
    if nc -z -w 2 localhost $port; then
        echo"✓ 端口 $port 监听正常" | tee -a $LOG_FILE
    else
        echo"✗ 端口 $port 未监听" | tee -a $LOG_FILE
    fi
done

7.2 带宽监控脚本

#!/bin/bash
# bandwidth-monitor.sh

INTERFACE="eth0"
INTERVAL=60# 监控间隔(秒)
LOG_FILE="/var/log/bandwidth.log"

echo "开始带宽监控,接口: $INTERFACE">> $LOG_FILE

whiletrue; do
    # 获取当前流量统计
    RX1=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
    TX1=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)

    sleep $INTERVAL

    # 获取新的流量统计
    RX2=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
    TX2=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)

    # 计算速率 (bytes/s 转换为 Mbps)
    RX_RATE=$(( (RX2 - RX1) / INTERVAL * 8 / 1000000 ))
    TX_RATE=$(( (TX2 - TX1) / INTERVAL * 8 / 1000000 ))

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:运维星火燎原 刘军军《Linux 常用运维脚本大全》

Linux常用运维脚本大全 网络安全文章

Linux常用运维脚本大全

文章总结: 文档提供了Linux运维常用Shell脚本合集,涵盖系统监控、日志分析、备份恢复、安全检测、性能调优、自动化部署及网络监控七大类。脚本包含CPU内存
评论:0   参与:  0