md5sum——文件校验
linux 的 md5sum 命令就是对文件/字符串求md5(摘要)值, 不论文件或字符串多大多长,输出的都是一个 128位的MD5编码,(128bit--16byte),
一个byte需要两个16进制数表示,因此 md5sum 输出的摘要由 32 个 16进制数组成
使用场景1
为解决官方发布的软件包被别人更改或者软件在传输过程中出现传输错误等问题,软件官方在提供软件包的同时,还提供一个保存MD5校验码的文件。
Linux/unix中可以使用命令
# md5sum 文件名
获得文件的md5值。使用cat 命令查看一下官方软件包的md5值,就可以进行比对了。就可以知道文件是否被修改过
使用场景2
md5sum命令可以同时对一批文件进行256位的MD5编码,并可以通过比较前后二次编码值来检测一个文件是否给修改过。由于此命令执行效率较高,所以常可用于大批文件的编译过程中,比如执行第一次编译时,产生每个文件的MD5编码,当第二次或以后编译时,通过MD5编码来确定一个文件是否有修改,而只对有变化的文件进行编译,这样可以大大节省编译的时间。
假设所有需要编译的文件名列表在文件allfiles.txt中:
cat allfiles.txt | xargs md5sum > md5sum_result.txt
md5sum_result.txt中的内容为:
f86bc2cf7fd33e483c02c8d0668b0ed0 ./files/main_zero_array.cpp
d2fb00791f215a5bf5273d6256dec650 ./files/subdir/var_func_para.cpp
844a9b14aaeeb819280b3b346fc89922 ./files/subdir/performance_test.c
efae21a9d993de8b0f29cea04cbcaa3a ./files/main.cpp
c2d956bc14cb2c71efbea91e2a1bc538 ./files/main1.cpp
a33a78c5f03d2fae9a5b79ae8295e6e6 ./files/main.c
b7d16e9dd2c60961501a221091571faf ./files/output_args.c
018ae4b01bbde0d7ffded48419499be1 ./files/case.cpp
如果对./files/case.cpp进行一些修改,再运行命令
cat allfiles.txt | xargs md5sum -c md5sum_result.txt
会得到以下的输出结果:
./files/main_zero_array.cpp: OK
./files/subdir/var_func_para.cpp: OK
./files/subdir/performance_test.c: OK
./files/main.cpp: OK
./files/main1.cpp: OK
./files/main.c: OK
./files/output_args.c: OK
./files/case.cpp: FAILED
通过上面的结果可以知道 ./files/case.cpp给修改过了
使用场景3
在我们的java部署tomcat环境中,有时候并不能知道服务是否好坏,比如内存溢出了,或者服务卡了很久没反应了,那么我们可以通过md5sum 来执行tomcat的日志文件,写一个定时器,定时几分钟执行一下,比较该次值和上一次值是否相等,如果相等表示tomcat已经很久没有日志输出了,那么这个时候我们可以通过java调用脚本进行重启tomcat,并且发送预警短信进行通知
使用场景4
git 服务器的 git log记录,以及 版本 tag 都是用 md5sum 或 sha256