一键检测!揭秘两台服务器文件一致性检查的神奇脚本
在当今数据驱动的时代,服务器的文件一致性对于确保数据准确性和业务连续性至关重要。想象一下,如果你负责管理两台服务器,并且需要确保这两台服务器上某个目录中的文件完全一致,你会怎么做?手动检查?那将是一项既繁琐又容易出错的任务。幸运的是,我们有一个神奇的Bash脚本可以帮助我们自动化这个过程!

这个脚本的核心思想是比较两台服务器上指定目录下所有文件的MD5值,以检测它们的一致性。MD5值,全称是“Message-Digest Algorithm 5”,是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用于确保信息传输完整一致。简单来说,如果两个文件的MD5值相同,那么这两个文件的内容也几乎可以肯定是完全相同的。
现在,让我们深入探讨这个神奇的脚本是如何工作的。
#!/bin/bash####################################### 检测两台服务器指定目录下的文件一致性# 通过对比两台服务器上文件的md5值,检测文件的一致性##################################dir=/data/webb_ip=192.168.88.10# 在本地服务器上,将指定目录下的所有文件遍历出来,# 使用md5sum命令计算每个文件的MD5值,并将结果写入到/tmp/md5_a.txt文件中find $dir -type f | xargs md5sum > /tmp/md5_a.txt# 在远程服务器上执行相同的操作,将结果写入到远程服务器的/tmp/md5_b.txt文件中# 然后将这个文件从远程服务器拷贝到本地服务器的/tmp目录下ssh $b_ip "find $dir -type f | xargs md5sum > /tmp/md5_b.txt"scp $b_ip:/tmp/md5_b.txt /tmp# 接下来,脚本将遍历/tmp/md5_a.txt文件中的每个文件名# 并与/tmp/md5_b.txt中的文件名和MD5值进行比较for f in `awk '{print $2}' /tmp/md5_a.txt`do# 检查远程服务器上是否存在该文件if grep -qw "$f" /tmp/md5_b.txtthen# 如果文件存在,则获取两个服务器上该文件的MD5值并进行比较md5_a=`grep -w "$f" /tmp/md5_a.txt | awk '{print $1}'`md5_b=`grep -w "$f" /tmp/md5_b.txt | awk '{print $1}'`# 如果MD5值不一致,则表示文件内容已被修改if [ "$md5_a" != "$md5_b" ]thenecho "$f changed."fielse# 如果远程服务器上没有找到该文件,则表示文件已被删除echo "$f deleted."fidone
脚本解析:
-
设置目录和IP:脚本首先设置了要检查的目录
dir和远程服务器的IP地址b_ip。 -
生成MD5列表:接着,脚本在本地和远程服务器上分别执行
find和md5sum命令,生成文件的MD5值列表,并保存到/tmp/md5_a.txt和/tmp/md5_b.txt中。 -
比较MD5值:然后,脚本遍历本地服务器上的文件列表,对于每个文件,它都会检查该文件是否存在于远程服务器上。如果存在,脚本将比较两个服务器上该文件的MD5值。如果MD5值不同,则表示文件内容在两个服务器之间不一致。
-
输出结果:最后,脚本将输出所有已更改或已删除的文件。
使用与注意事项:
-
确保本地和远程服务器上都安装了
md5sum命令。 -
脚本中的SSH连接是基于密钥认证的,确保已经设置了免密码SSH登录。
-
根据需要修改
dir和b_ip变量。
这个脚本不仅提高了文件一致性检查的效率,而且大大减少了人为错误的可能性。在分布式系统、数据备份或容灾场景中,这个脚本可以作为一个强大的工具来确保数据的完整性和一致性。现在,你可以放心地在多台服务器之间同步和共享重要数据了!
夜雨聆风
