文章总结: 这篇文章介绍了Shell脚本在Linux系统管理和自动化运维中的重要性,并提供了多个实用脚本案例,包括DOS攻击防范、日志切割、流量监控、告警发送、磁盘监控、文件管理和用户管理等。这些脚本可以帮助运维人员提高工作效率,减少重复工作,文章最后提供了获取更多Shell脚本案例的方式。 综合评分: 67 文章分类: 安全工具,系统运维,脚本开发,网络安全,实战经验
Shell脚本还不会写?试试这280例最常用的Shell干货脚本(最新版建议收藏)
点击关注👉
马哥网络安全
2025年12月15日 17:01 河南
Shell脚本是实现Linux系统管理及自动化运维所必备的重要工具。
对于运维工程师来说,Shell脚本在减少重复工作量的同时,还能大幅提升工作效率!归根结底,shell脚本也是运维人员必备的工作技能之一。
今天给大家分享《shell脚本案例》,目录清晰,一键搜索定位,代码清晰可复制,电子版更有利于大家随时翻阅,提升实践能力,想要学习、提升的朋友们一定要收藏下来。

扫码备注:280个shell脚本

100%免费领取
- Dos 攻击防范(自动屏蔽攻击 IP)
#!/bin/bashDATE=$(date +%d/%b/%Y:%H:%M)LOG_FILE=/usr/local/nginx/logs/demo2.access.logABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i ina)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; doif [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; theniptables -I INPUT -s $IP -j DROPecho "$(date +'%F_%T') $IP" >> /tmp/drop_ip.logfidone
- Nginx 访问访问日志按天切割
#!/bin/bashLOG_DIR=/usr/local/nginx/logsYESTERDAY_TIME=$(date -d "yesterday" +%F)LOG_MONTH_DIR=$LOG_DIR/$(date +"%Y-%m")LOG_FILE_LIST="default.access.log"for LOG_FILE in $LOG_FILE_LIST; do[ ! -d $LOG_MONTH_DIR ] && mkdir -p $LOG_MONTH_DIRmv $LOG_DIR/$LOG_FILE $LOG_MONTH_DIR/${LOG_FILE}_${YESTERDAY_TIME}donekill -USR1 $(cat /var/run/nginx.pid)
- 查看网卡实时流量脚本
#!/bin/bashNIC=$1echo -e " In ------ Out"while true; doOLD_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)OLD_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)sleep 1NEW_IN=$(awk '$0~"'$NIC'"{print $2}' /proc/net/dev)NEW_OUT=$(awk '$0~"'$NIC'"{print $10}' /proc/net/dev)IN=$(printf "%.1f%s" "$((($NEW_IN-$OLD_IN)/1024))" "KB/s")OUT=$(printf "%.1f%s" "$((($NEW_OUT-$OLD_OUT)/1024))" "KB/s")echo "$IN $OUT"sleep 1done
- Linux 系统发送告警脚本
# yum install mailx# vi /etc/mail.rcset [email protected] smtp=smtp.163.comset [email protected] smtp-auth-password=123456set smtp-auth=login
- 监控 100 台服务器磁盘利用率脚本
#!/bin/bashHOST_INFO=host.infofor IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); doUSER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)TMP_FILE=/tmp/disk.tmpssh -p $PORT $USER@$IP 'df -h' > $TMP_FILEUSE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $NF,int($5)}' $TMP_FILE)for USE_RATE in $USE_RATE_LIST; doPART_NAME=${USE_RATE%=*}USE_RATE=${USE_RATE#*=}if [ $USE_RATE -ge 80 ]; thenecho "Warning: $PART_NAME Partition usage $USE_RATE%!"fidonedone
- 将当前目录下大于 10K 的文件转移到 /tmp 目录,再按照文件大小顺序,从大到小输出文件名。
#!/bin/bash# 目标目录DIRPATH='/tmp'# 查看目录FILEPATH='.'find "$FILEPATH" -size +10k -type f | xargs -i mv {} "$DIRPATH"ls -lS "$DIRPATH" | awk '{if(NR>1) print $NF}'
- DOS攻击防范(自动屏蔽攻击IP)
#!/bin/bashDATE=$(date +%d/%b/%Y:%H:%M)#nginx日志LOG_FILE=/usr/local/nginx/logs/demo2.access.log#分析ip的访问情况ABNORMAL_IP=$(tail -n5000 $LOG_FILE |grep $DATE |awk '{a[$1]++}END{for(i ina)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; doif [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; theniptables -I INPUT -s $IP -j DROPecho "$(date +'%F_%T') $IP" >> /tmp/drop_ip.logfidone
- 批量创建多个用户并设置密码
#!/bin/bashUSER_LIST=$@USER_FILE=./user.infofor USER in $USER_LIST;doif ! id $USER &>/dev/null; thenPASS=$(echo $RANDOM |md5sum |cut -c 1-8)useradd $USERecho $PASS | passwd --stdin $USER &>/dev/nullecho "$USER $PASS" >> $USER_FILEecho "$USER User create successful."elseecho "$USER User already exists!"fidone
所有资料已经打包好了,想要提升的同学请务必拿走学习!
领取方式:
扫码备注:【280个shell脚本】
即可100%直接免费领取
仅限前100名免费领取,需要的抓点紧

查看原文:《Shell脚本还不会写?试试这280例最常用的Shell干货脚本(最新版建议收藏)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论