好吧,我有一个有点大的文件(~200 meg),我需要定期散列以查看它是否已更改。
问题是该文件中有两个小字段必须忽略,因为它们可能会发生变化。这些字段中的每一个都有已知且固定的偏移量和大小。
我已经使用三个 cmp 命令完成了这项工作,但是因为这需要定期完成,所以我想以尽可能最有效的方式完成它。此外,必须存储文件的备份副本也是有问题的,并且只存储哈希值以进行比较会更好。
到目前为止,我得到的最接近的是这样的:
dd 从文件开头读取到第一个字段的偏移量 | md5和
dd 从第一个字段的末尾读取到第二个字段的开头 | md5和
dd 从第二个字段末尾读取到文件末尾 | md5和
有什么方法可以将所有三个 dd 命令的输出重定向到一个 md5sum 实例,以便我可以获得单个哈希值?我不想将三个 dd 命令写入临时文件,然后对其进行哈希处理,因为这会产生大量 I/O。我想尽可能高效地完成这件事。
任何建议将不胜感激!!
答案1
如果您确实想对数据进行哈希处理,请使用子 shell:
( dd_1 ; dd_2 ; dd_3 ) | md5sum
否则我建议使用 Hojat 的答案 - 分段散列它并用这些“子散列”做一些事情。
答案2
您可以将三个 md5 和添加到一个文件中,然后在该文件上创建另一个 md5,对这些哈希值之一的任何更改都会导致最终文本文件哈希值不匹配。
将 md5(1) AND md5(2) AND md5(3) 连接到最终文件 --> md5(final_file)