《shell脚本编写——常用例子》

2023-11-05

1. 书写脚本,批量添加用户

1.新增脚本user.sh
2.通过交互获取需要创建的用户数量
3.批量添加用户
4.要求添加用户前判断用户是否存在,存在的话则跳过,否则增加该用户
5.使用“用户名_123”作为用户的密码
6.用户增加成功显示“用户增加成功”
7.用户添加失败提示“用户添加失败”
8.提取新增用户的用户名,保存在/root/user_name文件中
在脚本的最后将所有新增的用户名进行显示
vim a.sh
#!/bin/bash
name="user"
read -p "通过交互获取需要创建的用户数量:" num
for i in `seq $num`
do
        id -u $name$i &> /dev/null 2&>1 -----2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null
        if [ $? -eq 0 ]; then
                echo "用户已存在,跳过"
        else
                echo "用户不存在,现在开始创建。。。"
                useradd $name$i;echo "$name$i_123"|passwd --stdin $name$i
                id -u $name$i &> /dev/null
                if [ $? -eq 0 ]; then
                        echo "用户创建成功"
                else
                        echo "用户创建失败"
                fi
                echo $name$i >> /root/user_name
                echo "显示所有新增用户"
                cat /root/user_name
        fi
done

chmod +x a.sh

在这里插入图片描述

2. 根据要求判断文件类型

1.通过交互判断文件类型
2.提示用户输入一个文件的绝对路径
3.将用户输入的内容保存在一个file_name变量中
4.判断输入的路径所代表的文件是否存在)
5.如果不存在则显示“文件名 文件不存在”的信息
6.如果存在,则判断是否为普通文件,是则显示“文件名 是普通文件”
7.如果不是普通文件,再判断是否为目录,是则显示“文件名 是目录”
8.如果不是目录,再判断是否为链接文件,是则显示“文件名 是链接文件”
如果以上都不是,则显示“文件名 是其他文件类型”
vim b.sh

#!/bin/bash
while :
do
read -p "提示用户输入一个文件的绝对路径:" path
if [ -e $path ]; then
        echo "文件存在"
        if [ -L $path ]; then
                echo "$path是链接文件"
        elif [ -f $path ]; then
                echo "$path是普通文件"
        elif [ -d $path  ]; then
                echo "$path是目录文件"
        else
                echo "$path是其他文件"
        fi
else
        echo "文件不存在"
fi
done

chmod +x b.sh

在这里插入图片描述

3. 根据要求搜集服务器系统信息

1.显示出主机名
2.将主机名保存在host_name变量中
3.提取操作系统的ip地址
4.将提取的ip地址保存在host_ip变量中
5.提取出网卡的MAC地址
6.将提取的MAC保存在host_mac中
7.提取出系统的子网掩码
将提取的子网掩码保存在host_mask变量中
vim c.sh

#!/bin/bash
case $1 in
        1)
                hostname_name=$(hostname)
                echo "主机名:${hostname_name}"
        ;;
        2)
                host_ip=$(ifconfig eth0|awk '/Mask/ {print $2}'|awk -F ':' '{print $2}')
                echo "ip地址:${host_ip}"
        ;;
        3)
                host_mask=$(ifconfig eth0|awk '/Mask/ {print $4}'|awk -F ':' '{print $2}')
                echo "子网掩码:${host_mask}"
        ;;
        4)
                host_mac=$(ifconfig eth0|awk '/HWaddr/ {print $5}')
                echo "MAC地址:${host_mac}"
        ;;
esac

chmod +x c.sh

在这里插入图片描述

4. 检测磁盘使用率

要求: 对Linux系统进行判断,centos6的系统执行lv6.sh , centos7的系统执行lv7.sh,脚本中需要判断当前使用率,如果 i p 服 务 器 大 于 90 ip服务器大于90%,邮件告警,不超过90%,在公屏提示, ip90IP服务器磁盘正常

  • 1.能够写出检测系统版本号的脚本
  • 2.能够截取到本机ip
  • 3.能够截取到当前服务器的磁盘使用率
  • 4.能够读取文件中的ip,并判断对应ip的使用率是否大于90%
  • 5.大于百分之90的服务器正确发送邮件成功(需要提前测试是否能够正常发邮件)
  • 6.不大于90%的ip服务器的磁盘,提示 $IP磁盘正常。

在这里插入图片描述

5. 检测url是否正常

判断一个网站的状态码,并截取状态码,判断状态码是否为200
url为对应的网址,测试可以使用www.baidu.com. 异常网址可以用www.linuxpm.com

  • 1.使用函数
  • 2.可以截取到访问网站的状态码
  • 3.判断状态码是否为200
  • 4.若状态码不为200,则发邮件提醒 u r l 异 常 , 状 态 码 为 : url异常,状态码为: urlcode

在这里插入图片描述
对监测网站地址是否存活

#!/bin/bash
url="http://192.168.194.130/index.html"
http_code=$(curl -Is -o /dev/null -w %{http_code} $url)
check_code(){
        if [ $http_code -eq 200 ]; then
                echo "$url 存活"
        else
                echo "$url 站点不可访问"
        fi
}
check_code

6. 防止文件被误删除的脚本

在这里插入图片描述

使用脚本删除一个文件,首先判断文件是否存在,如果存在则提示是否真要删除,用户输入y|n, 若确定要删除,则安装rsync并测试rsync是否安装成功, 若成功则使用rsync备份文件,备份成功后使用再开始删除数据,删除完成后提示,若想恢复数据,可以到备份路径恢复。

  • 1.判断要删除的文件是否存在,不存在则创建
  • 2.确认是否删除文件,若删除输入Y,不删除输入N
  • 3.在用户输入Y或者N的时候,实现不区分大小写都可以成功,即:Y,y均可
  • 4.使用脚本正确安装rsync并启动
  • 5.能够判断rsync是否安装成功
  • 6.Rsync备份成功
  • 7.再次提示是否删除数据,若删除输入Y,不删除输入y
  • 8.若确定删除,使用rm 删除文件
  • 9.删除完成后,提示要想恢复可以进入备份路径,并列出备份路径
  • 10.脚本写完后,完整的截图放在本小题下,本题是一个脚本,不要拆分成多个脚本。
#!/bin/bash
while :
do
        read -p "请输入您想要删除的文件:<<" file
        echo "您想要删除的文件是:$file"
        read -p "确认要删除吗?(Y/N)"   cmd1
        case $cmd1 in
                Y|y)
                        if [ -e $file ]; then
                                count=$(rpm -qa |grep rsync|wc -l)
                                if [ $count -ne 0 ]; then
                                        echo "rsync 已经安装了"
                                else
                                        yum -y install rsync
                                fi
                                netstat  -lptnu|grep 873
                                if [ $? -eq 0 ]; then
                                        echo "rsync service 已经运行了"
                                else
                                        systemctl start rsyncd
                                fi
                                #开始备份文件
                                backup_dir="/usr/local/src/backup"
                                [ -d ${backup_dir} ] || mkdir ${backup_dir}
                                #开始执行备份操作:
                                rsync -av /root/a ${backup_dir}
                                echo "input Y:delete!"
                                echo "input y:no delete!"
                                read -p "您是否真的真的要删我?(Y|y):<<" cmd2
                                case $cmd2 in
                                        Y)
                                                echo "start 删除文件:$file"
                                                rm -rf  $file
                                                echo "文件恢复路径:${backup_dir}"
                                                ;;
                                        y)
                                                echo "no delete"
                                                exit
                                                ;;
                                esac
                        else
                                echo "start touch file:$file"
                                touch $file
                                exit
                        fi
                        ;;
                N|n)
                        echo "不删除$file"
                        exit
                        ;;

        esac
done

#!/bin/bash
read -p "是否确认删除?(Y/n)" value
file(){
        echo "要删除的文件是$files"
        if [ -e $files ]; then
                rsync -avx $files /opt/ &> /dev/null
                rm -rf $files
                echo "删除完毕!(恢复路径/opt/)"
        else
                echo "要删除文件不存在"
        fi
}
case $value in
Y|y)
        if [ $(rpm -qa |grep rsync |wc -l) -eq 0 ]; then
                echo "正在安装rsync"
                yum -y install rsync &> /dev/null
                echo "安装成功!"
                echo "开始执行删除。。。"
                files=$1
                file
        else
                echo "rsync存在,开始删除"
                rpm -e rsync
                yum -y install rsync &> /dev/null
                files=$1
                file
        fi
;;
N|n)
        echo "欢迎下次使用"
;;
esac

7. shell入侵检测和邮件报警

1. MD5sum校验

#!/bin/bash
webdir=/var/www/html
#方法1:MD5sum校验
cd $webdir
#md5sum /var/www/html/index.html > /opt/webfile.db
md5dum -c --quiet /opt/webfile.db
if [ $? -eq 0 ]; then
        echo "web file is ok"
else
        echo ""
        #mail -s "web file is change!" 1329826156@qq.com
fi

例子:

在这里插入图片描述

2. web目录下文件数是否有变动

#!/bin/bash
#方法2:web目录下文件数是否有变动
#find /var/www/html -type f > /opt/countfile.db_sec
find /var/www/html -type f > /opt/countfile.db
count=`diff /opt/countfile.db*|wc -l`
if [ $count -gt 0 ]; then
        echo "the file_count is changed"
        #mail -s "count_err" 1329826156@qq.com
else
        echo "ok"
fi

例子:
在这里插入图片描述

3. 检测/var/www/html下所有文件

cd /var/www/html
touch wg{1..10}
for i in $(find /var/www/html/ -type f); do echo $i > $i; done
for i in $(find /var/www/html/ -type f); do md5sum $i; done
#!/bin/bash
#获取校验库,只需在首次执行时获取
#for i in $(find /var/www/html/ -type f)
#do
#       md5sum $i >> md5db
#done

#通过校验库检查文件的md5值时候有更改,如有更改返回值为非0,触发邮件通知
md5sum -c md5db
if [ $? -ne 0 ]; then
        echo "有更改"
        message=$(md5sum -c md5db | grep "失败")
        mail.py 1329826156@qq.com "警告" "$message"
fi

4. 检测/etc/passwd是否有变化

[root@localhost ~]# yum -y install mailx -----安装邮件服务
[root@localhost ~]# vim /etc/mail.rc -----在文件最小面添加
set from=1329826156@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=1329826156@qq.com
set smtp-auth-password=jphbuvhsukqphhfa
set smtp-auth=login
#!/bin/bash
md5sum /etc/passwd > /tmp/md5_test
md5sum -c /tmp/md5_test
if [ $? -eq 0 ]; then
        echo "文件未被入侵"
else
        echo "文件已被入侵,请注意"
        mail -s "文件已被篡改" 1329826156@qq.com
fi

7. 监控系统

在这里插入图片描述

写一个zabbix安装导航脚本,执行后提示用户: 是否安装zabbix。 若用户输入N/n , 均退出系统。 若用户输入Y/y ,都会执行下一步提示,比如 提示用户:请选择以下选项 1. 安装apache, 2. 安装mysql
当用户选择了1或者2 选项后,开始安装相应的服务?

  • 1.提示用户选择则是否安装zabbix
  • 2.能够实现输入Y/N y/n ,不区分大小写;
  • 3.当用户输入1时,先检测有没有apache,若有提示apache已存在,无需再次?
  • 4.若没有apache,则提示,系统中没有安装apache,现在开始安装
  • 5.安装成功后,列出运行端口
  • 6.若用户输入2,则检测是否有mysql,若有mysql,提示mysql已安装,无需再次安装
  • 7.若没有mysql则进行安装,安装启动成功后,输出端口
#!/bin/bash
read -p "您是否需要安装zabbix服务:<<" cmd1
case $cmd1 in
        y|Y)
        echo "开始安装服务....."
        echo "1:apache"
        echo "2:mysql"
        read -p "您需要安装的服务是:<<" cmd2
        case $cmd2 in
                1)
                echo "您现在安装的服务是:apache"
                rpm -qa |grep httpd
                if [ $? -eq 0 ]; then
                        echo "apache 已经安装了"
                else
                        yum -y install httpd
                fi
                netstat -lptnu|grep 80
                if [ $? -eq 0 ]; then
                        echo "apache 服务已经开启了"
                else
                        echo "开启apache服务"
                        systemctl start httpd
                fi
               2)
                echo "您现在安装的服务是:db"
                grep 7 /etc/redhat-release
                if [ $? -eq 0 ]; then
                        echo "您的操作系统是:7"
                        yum -y install maraidb-server
                else
                        yum -y install mysql-server
                fi
                ;;
        esac
        ;;
        n/N)
        exit
        ;;
esac

8. 日志清理

在这里插入图片描述

1、编写脚本

在这里插入图片描述

2、计划任务

在这里插入图片描述

9. Shell解决doss攻击方案

#!/bin/bash
#找出访问最多的IP地址
drop_ip=`cat /var/log/httpd/access_log|grep -v "::1"|awk '{print $1}'|sort -rg|uniq|head -n 10`

#循环写防火墙规则
for i in `cat drop_ip`
do
        if [ [ $i =~ "192.168" ] ]; then
                echo ""
        else
        iptables -t filter -I INPUT -s $i -j DROP
        fi
done

通过封禁ip来解决ddos

  1. 获取连接数最多的前10个ip并临时写入文件dropip中
  2. 通过for循环来遍历dropip文件的ip
  3. 排除192.168开头和127.0开头的ip
  4. 然后遍历及排除完3题的ip后调用防火墙drop掉

在这里插入图片描述

11. 写一个学员管理系统,实现增加学员,删除学员,修改学员姓名,随机点名的功能

vim a.sh #编辑脚本
#!/bin/bash
while :
do
echo "学生随机点名系统"
echo "1. 添加学员名单"
echo "2. 遍历学员名单"
echo "3. 随机点名"
echo "4. 删除某个学员的信息"
echo "5. 退出"
        read -p "请输入你要选择的序号:" num
        case $num in
                1)
                        read -p "添加学员" cmd1
                        echo $cmd1 >> /tmp/name
                ;;
                2)
                        for i in `seq $(cat /tmp/name|wc -l)`
                        do
                                sed -n ${i}p /tmp/name
                        done
                ;;
                3)
                        name=`cat /tmp/name|wc -l`
                        sj=$((RANDOM%$name+1))
                        sed -n ${sj}p /tmp/name
                ;;
                4)
                        read -p "请输入要删除的名单" cmd2
                        sed -i "/${cmd2}/d" /tmp/name
                ;;
                5)
                        exit
                ;;
        esac
done

在这里插入图片描述

12. MySQL备份脚本

  1. 使用数组保存要备份的数据库:slave_test、bw_edu、mysql
  2. 定义数据库备份函数,函数通过传参获取要备份的数据库,函数中为备份数据库的操作
  3. 生成的备份文件要保存在/home/mysql/data_backup目录下,同时生成的备份文件格式为: wg_2020-10-01.sql 文件要有时间戳!
  4. 使用for循环遍历数组,完成数据库的备份
    脚本自动删除30天以前的备份文件
[root@localhost scripts]# vim mysql_backup.sh
#!/bin/bash
#定义数组
db=(bw wg rg)

#定义时间戳
date_time=$(date +%F)

#检测备份目录是否存在,不存在则创建
[ -d /home/mysql/data_backup/$date_time ] || mkdir -p /home/mysql/data_backup/$date_time

#定义备份函数
backup_db(){
        mysqldump -B $1 > /home/mysql/data_backup/$date_time/$1.sql
}

#遍历数组,执行备份
for i in ${db[@]}
do
        backup_db $i
done

#删除30天过期文件
find /home/mysql/data_backup/ -mtime +30 -exec rm -f {} \;

13. MySQL主从状态监控脚本

  1. 获取slave的SQL线程和IO线程的状态
  2. 判断两个线程的状态来判断同步是否正常
  3. 同步异常时触发邮件报警
[root@localhost scripts]# vim check_slave.sh
#!/bin/bash
IO=$(mysql -e 'show slave status \G;'|awk '/Slave_IO_Running/{print $2}')
SQL=$(mysql -e 'show slave status \G;'|awk '/Slave_SQL_Running/{print $2}')
DATE_TIME=$(date +%F_%T)
R_USER=1329826156@qq.com

if [ $IO == "No" -o $SQL == "No" ]; then
        mail.py $R_USER "mysql警告" "$DATE_TIME $HOSTNAME slave 同步异常"
fi

14 . 系统加固脚本

  1. 用户的密码必须要包含:大小写字母、数字、特殊符号
  2. 用户的密码长度不少于10位
  3. 用户密码的过期时间:30天
  4. 密码过期前8天提醒用户
  5. 用户密码输入错误3次后,锁定用户10分钟
  6. 用户1分钟内没有操作,自动注销!
#!/bin/bash
#增加备用的root用户

#新建用户的密码复杂度、长度
pw_file=/etc/security/pwquality.conf
login_file=/etc/login.defs
auth_file=/etc/pam.d/system-auth

#备份配置文件
cp $pw_file    $pw_file.bak
cp $login_file $login_file.bak
cp $auth_file  $auth_file.bak

#修改密码长度为10位
echo minlen = 11 > /etc/security/pwquality.conf
#新建密码至少包含1个数字
echo dcredit = -1 >> /etc/security/pwquality.conf

#新建密码至少包含1个小写字母
echo lcredit = -1 >> /etc/security/pwquality.conf

#新建密码至少包含1个大写字母
echo ucredit = -1 >> /etc/security/pwquality.conf

#新建密码至少包含1个特殊字符
echo ocredit = -1 >> /etc/security/pwquality.conf

#密码过期时间30天
sed -i '/PASS_MAX_DAYS/s/99999/30/' $login_file

#过期前7天通知用户
sed -i '/PASS_WARN_AGE/s/7/8/'  $login_file

#用户输入密码错误3次,封锁用户10分钟
grep -q 'pam_tally2.so'  /etc/pam.d/system-auth
if [  $? -ne 0 ];then
    echo 'auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300' >> /etc/pam.d/system-auth
fi

#用户10秒没有操作,则退出终端
grep -q 'TMOUT' /etc/profile || echo "export 'TMOUT=10'" >> /etc/profile

15. 打印菱形

vim a.sh
read -p "input the length: " n
for i in `seq 1 $n`
do
    for ((j=$n;j>=$i;j--))
    do
        echo -n " "
    done

    for((m=1;m<=$i;m++))
    do
        echo -n "* "
    done
    echo

done

for i in `seq 1 $n`
do
    for((j=0;j<=$i;j++))
    do
        echo -n " "
    done

    for((k=$i;k<$n;k++))
    do
        echo -n "* "
    done
    echo
done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《shell脚本编写——常用例子》 的相关文章

随机推荐

  • Ubuntu ssh root 登录不了解决办法

    Ubuntu在安装的时候 设置了sudo的密码 但是这并不是root用户的密码 导致即使修改了 etc ssh sshd config 文件 运行root用户登录 还是会出现Permission denied 真是坑啊 差点没把我气到吐血
  • 发送html邮件时遇到的奇怪的乱码问题

    解析文件字符流 作为内容发送邮件到客户端 解析的代码如下 BufferedReader reader new BufferedReader new FileReader file 发现windows系统下发送的邮件时是正常的 在linux下
  • NETPLIER : 一款基于概率的网络协议逆向工具(一)理论

    本文系原创 转载请说明出处 信安科研人 关注微信公众号 信安科研人 获取更多网络安全学术技术资讯 今日介绍一篇发表在2021 NDSS会议上的一项有关协议逆向的工作 文章目录 1 网络协议逆向工程简介 1 1 协议逆向工程的主流技术 案例
  • 【计算机网络】第一章知识点汇总

    第一章学习重点 2 5 因特网的组成 通信方式与交换方式 4 4 时延 计算 4 5 时延带宽积 计算 5 2 协议的划分与层次 5 3 五层协议的体系结构 OSI与TCP IP的比较 1 计算机网络在信息时代的作用 三网融合中的 三网 指
  • Hadoop-HBase 单机部署

    一 系统版本 Linux系统 wdOS 1 0 x86 64 iso 关于wdOS说明 1 安装简单 快速 去掉了安装过程中不必要的烦锁操作和不必要的选择 2 可选安装集成web环境 如lamp lnmp lnamp 并可相互自由切换使用
  • 设计模式之适配器模式(Adapter)

    1 定义 适配器模式 Adapter 指的是将一个类的接口转换成另一个可以兼容的接口 比如我们日常生活中的转换头 古早时期使用的电池万能充 就相当于程序中使用的适配器模式 2 适配器模式的种类 2 1 类适配器模式 类适配器模式通过多重继承
  • 大数据项目实战——基于某招聘网站进行数据采集及数据分析(三)

    大数据项目实战 第三章 数据采集 文章目录 大数据项目实战 学习目标 一 分析与准备 1 分析网页结构 2 数据采集环境准备 二 采集网页数据 1 创建响应结果 JavaBean 类 2 封装 HTTP 请求的工具类 1 定义三个全局变量
  • 14张自动化测试框架结构图(建议收藏)

    1 接口自动化测试框架设计图 接口自动化测试框架设计图 2 接口自动化执行设计图 接口自动化执行设计图 3 API自动化平台框架设计图 API自动化平台框架设计图 4 UI自动化测试框架设计图 UI自动化测试框架设计图 5 接口 UI自动化
  • 【CUDA基础练习】向量内积计算的若干种方法

    先从一个简单 直观的方法来了解如何用CUDA计算向量内积 向量内积既然是将两个向量对应元素相乘的结果再求和 我们先考虑将对应元素相乘并行化 再来考虑相加 方法一 include
  • 十八、kubernetes中容器重启策略

    1 概述 在上一篇文章中 一旦容器探测出现了问题 kubernetes就会对容器所在的Pod进行重启 其实这是由pod的重启策略决定的 pod的重启策略有 3 种 分别如下 Always 容器失效时 自动重启该容器 这也是默认值 OnFai
  • oracle行转列(PIVOT),列转行(UNPIVOT)

    1 行转列 PIVOT 现有 学生 分数表 STUDENT SCORE 如下 想看到每个学生语数外的整体分数情况 这时候可以应用行转列 PIVOT SELECT FROM STUDENT SCORE PIVOT SUM SCORE FOR
  • C++应用到C# ref , out

    include stdafx h include iostream h int factor int int int void main int number squard cubed error cout lt lt Enter the
  • 泰勒展开式求sin(x)

    include
  • Java架构直通车——分布式唯一 ID生成方案

    文章目录 分布式ID的几种生成方案 UUID MySQL主键自增 数据库自增ID改进方案 雪花算法 SnowFlake 雪花算法的优化 Redis自增id Zookeeper有序节点 最近要做区块链项目 要生成很多唯一ID做业务号之类的 所
  • 快速排序算法的Python实现 (头歌实践教学平台)

    任务描述 本关任务 编写代码实现快速排序 相关知识 为了完成本关任务 你需要掌握 1 如何实现快速排序 2 快速排序的算法分析 快速排序 快速排序使用了和归并排序一样的分而治之策略 它的思路是依据一个 基准值 数据项来把列表分为两部分 小于
  • lyapunov优化

    Lyapunov optimization是Michael J Neely发展起来的网络优化理论 可以参考 1 2 因为网络研究中缺乏理论 简单好使的算法 没有高大上的公式吓人 好像就不能发到高级别的期刊上 Lyapunov optimiz
  • 关系型数据库与非关系型数据库的区别

    文章目录 1 关系型数据库 1 1 概念 1 2 优点 1 3 瓶颈 2 从关系型到非关系型 3 非关系型数据库 3 1概念 3 2分类 3 3 缺点 4 对比 4 1 存储上 4 2 事务 4 3 数据集 4 4 结构 1 关系型数据库
  • Ubuntu安装时:downloading language packs

    ubuntu 安装时 问题 downloading language packs 如果网络不好 持续能达到几个小时 解决办法 切断网络连接 安装完后 还可以再安装
  • php模式之装饰器模式1

    原文来自 大胖博客 装饰器模式 也成修饰器模式 目的是给现有的对象增加或修改成新逻辑 说人话就是不改变对象的情况下 给对象的某个操作增加前置操作或者后置操作 当然也有可能改变操作的逻辑 举个栗子 我们在操作数据库的时候会从数据库拉取数据 拉
  • 《shell脚本编写——常用例子》

    目录 1 书写脚本 批量添加用户 2 根据要求判断文件类型 3 根据要求搜集服务器系统信息 4 检测磁盘使用率 5 检测url是否正常 6 防止文件被误删除的脚本 7 shell入侵检测和邮件报警 1 MD5sum校验 2 web目录下文件