嗨我想在linux上创建一个bash文件,它根据备份md5哈希来检查文件的md5哈希,所以我知道原始文件是否被篡改过。该脚本应该输出两个文件的md5哈希,然后比较两个创建的哈希文件:
md5sum file1 > file1.md5 | cut -c -32
if [ file1.md5 =! backup.md5 ] then;
#send email
但它不起作用,file.md5中仍然有文件名,有人知道如何只获取文件.md5?
答案 0 :(得分:4)
您的脚本存在多个问题。
首先在之后应用cut -c -32
,你已经将md5sum输出重定向到file1.md5,这就是为什么它什么也没做。
你应该像那样重组它,而不是:
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
...
答案 1 :(得分:0)
您的命令顺序错误。写下
md5sum file1 | cut -c -32 > file1.md5
答案 2 :(得分: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
答案 3 :(得分:0)
回复:“ md5
[string]中仍然有文件名,...如何仅获取哈希?”
md5sum
返回的字符串是(或至少结构类似)具有两个字段的记录或具有两个元素的元组。例如,
$ md5sum filename.txt
8d7dd71ff51614e69339b03bd1cb86ac filename.txt
要仅获取哈希(第一个字段/元素),请尝试将字符串通过管道传输到awk,如下所示:
$ md5sum filename.txt | awk '{print $1}'
8d7dd71ff51614e69339b03bd1cb86ac
我将这个答案提交给OP的这一特定问题,该问题是一年多前针对其他从事类似问题工作并像我一样偶然发现此线程的人的。