你好,我希望在Linux上创建一个bash文件,它可以检查文件的MD5哈希值与备份MD5哈希值是否匹配,以便我知道原始文件是否被篡改。该脚本应输出两个文件的MD5哈希值,并比较这两个创建的哈希文件:
md5sum file1 > file1.md5 | cut -c -32
if [ file1.md5 =! backup.md5 ] then;
#send email
但是它不起作用,文件.md5仍然包含文件名,有人知道如何只获取文件的哈希值吗?
你的脚本存在几个问题。
首先,在将md5sum输出重定向到file1.md5之后,您才应用cut -c -32
,这就是为什么它没有起作用的原因。
您应该像这样重新构建它:
md5sum file1 | cut -c -32 > file1.md5
接下来,你不能直接使用=!
比较文件,而是需要读取并比较它们的内容,就像这样:
[ "$(cat file1.backup.md5)" != "$(cat file1.real.md5)" ]
还要注意 md5sum
已经有了“检查模式”,所以您可以简单地执行以下操作:
#Save MD5 sum of your file to backup.md5, in md5sum native format
md5sum file1 > backup.md5
#Later on ...
if ! md5sum -c backup.md5; then
...
md5sum file1 | cut -c -32 > file1.md5
关于“在md5
[字符串]中仍然有文件名,如何只获取哈希值?”
md5sum
返回的字符串是一个具有两个字段或两个元素的记录(至少结构上是这样)。例如:
$ md5sum filename.txt
8d7dd71ff51614e69339b03bd1cb86ac filename.txt
要仅获取哈希值(第一个字段/元素),请尝试将字符串通过管道传递到awk中:
$ md5sum filename.txt | awk '{print $1}'
8d7dd71ff51614e69339b03bd1cb86ac
我提交此答案以回答一年前提出的问题的特定部分,供其他遇到类似问题并偶然发现此线程的人参考。
md5sum file1| cut -c -32 > file1.md5
或者完全实现而不将md5摘要保存到文件中:
ORG_SUM=`md5sum org_file | cut -c -32`
BCK_SUM=`md5sum bck_file | cut -c -32`
if [ "${ORG_SUM}" != "${BCK_SUM}" ]; then
#send email
fi