6. 检测两台机器上文件的差异

生产环境下,web服务器大多会做负载均衡,所以有多台机器上跑着同样的web程序代码。如果严格按照规范流程上线,即不人为特意更改代码,那么这多台机器上的代码一定是一样的,并不会存在两台机器同一个文件内容不同的情况。本案例的需求就是要检查两台机器同一个文件的差异,毕竟我们不确定服务器上的代码是否有人为改动过。

具体要求如下:

1)两台机器A和B,检查目标目录为 /data/wwwroot/www.abc.com ,路径一致;

2)需要过滤 uploads、tmp 两个目录,这两个目录的文件不需要对比差异;

3)以A机器上的文件作为标准,B机器少了文件和改了文件需要记录,多了文件不用考虑;

4)假设A机器可以免密登录B机器;

5)把有差异和缺少的文件列表记录到 /data/change.log 。

参考脚本如下:

#!/bin/bash
##对比两机器上的文件差异

#假设B机器IP为192.168.0.110
B_ip=192.168.0.110
dir=/data/wwwroot/www.abc.com

#首先检查 /tmp/mkd5.list 文件是否存在,存在的话就删除掉,避免影响后续操作
[ -f /tmp/md5.list ] && rm -f /tmp/md5.list

#把除了uploads和tmp目录外的其它目录下的所有文件全部列出来
cd $dir
find . \(-path "./uploads*" -o -path "-/tmp*" \) -prune -o -type f > /tmp/file.list

#用while循环,求出所有文件的md5值,并写入一个文件里
cat /tmp/file.list |while read line
do
    md5sum $line
done > /tmp/md5.list

#将 /tmp/md5.list 拷贝到B机器
scp /tmp/md5.list $B_ip:/tmp/

#判断 /tmp/check_md5.sh 文件是否存在,存在的话就删除掉
[ -f /tmp/check_md5.sh ] && rm -f /tmp/check_md5.sh

#用Here Document编写 check_md5.sh 脚本内容
cat << EOF > /tmp/check_md5.sh
#!/bin/bash
dir=/data/wwwroot/www.abc.com

##注意:这里的特殊字符都需要脱义,比如反引号和$
cd \$dir
n=\`wc -l /tmp/md5.list |awk '{print \$1}'\`
for i in \`seq 1 \$n\`
do
    file_name=\`sed -n "\$i"p /tmp/md5.list |awk '{print \$2}'\`
    md5=\`sed -n "\$i"p /tmp/md5.list |awk '{print \$1}'\`
    if [ -f \$file_name ]
    then
        md5_b=\`md5sum \$file_name |awk '{print \$1}'\`
        if [ \$md5_b != \$md5 ]
        then
            echo "\$file_name changed."
        fi
    else
        echo "\$file_name lose."
    fi
done > /tmp/change.log
EOF

scp /tmp/check_md5.sh $B_ip:/tmp/
ssh $B_ip "/bin/bash /tmp/check_md5.sh"

脚本中,

1)find命令的 -path 选项类似于shell中的正则匹配,-prune -o 组合在一起使用,会把 -prune前面的匹配排除掉

2)要想比较两个文件是否一样,只需要对比它们的md5值即可。md5sum命令可以求出文件的md5值

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值