【发布时间】:2010-07-24 11:40:57
【问题描述】:
我需要在 unix 平台上检查某个脚本的输出 1000 次,并检查其中是否有任何变化。
我一直在这样做:
(script_stuff) | md5sum
并存储此值。我实际上并不需要“md5”,只需要一个简单的哈希函数,我可以将它与存储的值进行比较,看看它是否改变了。如果偶尔出现误报也没关系。
有什么比 md5sum 更好的方法可以更快地生成一个相当可用的哈希值?脚本本身会生成几行文本 - 可能平均 10 到 20 行,最多 100 行左右。
我查看了fast md5sum on millions of strings in bash/ubuntu - 这很好,但我无法编译新程序。需要一个系统实用程序... :(
额外的“背景”细节:
我被要求监控一组 1000 个左右的域的 DNS 记录,如果有任何变化,立即调用某些其他脚本。我打算做一个 dig xyz +short 语句并将其输出散列并存储它,然后将其与先前存储的值进行检查。任何更改都会触发另一个脚本,否则它会继续。目前,我们计划将 cron 用于一组这 1000 个,但可以完全不同地考虑“严重”的使用 - 大约 20,000 个。
我不知道这样的系统有什么用,我只是为别人做这件事......
【问题讨论】:
-
在典型的桌面系统上,md5sum 每秒可以处理数百兆字节的数据(检查
pv /dev/zero | md5sum)。无论使用哪种散列算法,I/O 和进程生成开销都可能在您的情况下占主导地位。 -
你为什么要把它写成一个shell脚本:| - python 和其他脚本语言在其标准库中具有散列函数。每个哈希的进程启动会产生很多开销。