md5sum输出仅为文件中的哈希值。

4

你好,我希望在Linux上创建一个bash文件,它可以检查文件的MD5哈希值与备份MD5哈希值是否匹配,以便我知道原始文件是否被篡改。该脚本应输出两个文件的MD5哈希值,并比较这两个创建的哈希文件:

md5sum file1 > file1.md5 | cut -c -32
if [ file1.md5 =! backup.md5 ] then;
   #send email

但是它不起作用,文件.md5仍然包含文件名,有人知道如何只获取文件的哈希值吗?

4个回答

6

你的脚本存在几个问题。

首先,在将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
...

谢谢,检查模式没有起作用,因为我总是在创建MD5哈希之前将文件复制到不同的位置,这样我就可以确保它没有加密。 - MadMax

1
您的命令顺序有误。请编写正确的命令顺序。
md5sum file1 | cut -c -32 > file1.md5

1

关于“在md5 [字符串]中仍然有文件名,如何只获取哈希值?”

md5sum返回的字符串是一个具有两个字段或两个元素的记录(至少结构上是这样)。例如:

$ md5sum filename.txt 8d7dd71ff51614e69339b03bd1cb86ac filename.txt

要仅获取哈希值(第一个字段/元素),请尝试将字符串通过管道传递到awk中:

$ md5sum filename.txt | awk '{print $1}' 8d7dd71ff51614e69339b03bd1cb86ac

我提交此答案以回答一年前提出的问题的特定部分,供其他遇到类似问题并偶然发现此线程的人参考。


0
管道位置错误。请按照以下方式使用:
 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接