BSD md5与GNU md5sum输出格式?

时间:2009-08-19 13:11:34

标签: md5 gnu bsd

任何人都知道为什么BSD md5程序以这种格式产生哈希输出......

MD5 (checksum.md5) = 9eb7a54d24dbf6a2eb9f7ce7a1853cd0

...虽然GNU md5sum会产生更合理的格式吗?

9eb7a54d24dbf6a2eb9f7ce7a1853cd0 checksum.md5

据我所知,md5sum格式更容易解析,更有意义。你如何用md5做md5sum -check?什么-p,-q,-r,-t,-x选项意味着什么? man md5对这些选项一无所知! :|

4 个答案:

答案 0 :(得分:5)

历史原因,我想。同时,-q抑制“MD5(...)=”输出,所以md5 -q checksum.md5给出

9eb7a54d24dbf6a2eb9f7ce7a1853cd0

如果md5没有给出任何参数并且它从stdin读取,则暗示这是隐含的。 不幸的是,在这种情况下md5sum在校验和后留下“ - ”(“9eb7a54d24dbf6a2eb9f7ce7a1853cd0 - ”), 因此,如果您正在寻找一些通用函数来返回校验和,那么可能会有所帮助:

checksum() {
        (md5sum <"$1"; test $? = 127 && md5 <"$1") | cut -d' ' -f1
}
checksum /etc/hosts

FreeBSD的手册页说明了论点

   -p      Echo stdin to stdout and append the checksum to stdout.

 -q      Quiet mode ‐ only the checksum is printed out.  Overrides the -r
         option.

 -r      Reverses the format of the output.  This helps with visual diffs.
         Does nothing when combined with the -ptx options.

 -t      Run a built‐in time trial.

 -x      Run a built‐in test script.

答案 1 :(得分:3)

在当前的OS X BSD系统上,您可以指定 md5 -r 命令以获得预期的输出。

sgwilbur@gura:/vms/DevOps-v3.4$ md5 vmware*
MD5 (vmware-0.log) = 61ba1d68a144023111539abee08f4044
MD5 (vmware-1.log) = 97bc6f22b25833c3eca2b2cc40b83ecf
MD5 (vmware-2.log) = f92a281102710c4528d4ceb88aa0ac9b
MD5 (vmware.log) = 1f7858d361929d4bc5739931a075c0ad

添加 md5 -r 开关使输出看起来更像我期望的那样,并且更容易与Linux机器生成的linux md5之和进行区分。

sgwilbur@gura:/vms/DevOps-v3.4$ md5 -r vmware*
61ba1d68a144023111539abee08f4044 vmware-0.log
97bc6f22b25833c3eca2b2cc40b83ecf vmware-1.log
f92a281102710c4528d4ceb88aa0ac9b vmware-2.log
1f7858d361929d4bc5739931a075c0ad vmware.log

对于我来说,这是最简单的方法,可以很容易地从linux框上的 md5sum 命令生成的输出中进行区分。

答案 2 :(得分:2)

我意识到这是一个旧页面,但我在FreeBSD上制作校验和并在Linux上检查它们,我也遇到了这个页面。这个页面没有帮我解决问题,所以我想出了这个小sed脚本来创建FreeBSD上与Linux md5sum输出相匹配的校验和:

md5 file [file ...] | sed -e 's#^MD5 [(]\(.*\)[)] = \(.*\)$#\2 \1#' > md5sums.txt

这将使用FreeBSD md5命令并重新排列输出,使其看起来像GNU md5sum

然后在Linux上我可以使用md5sum --check md5sums.txt

您还可以将上述sed脚本与FreeBSD的md5命令生成的现有文件一起使用。

我也把这个别名放在我的FreeBSD .cshrc文件中:

alias md5sum "md5 \!* | sed -e '"'s#MD5 [(]\(.*\)[)] = \(.*\)$#\2 \1#'"'"

现在在FreeBSD上我可以说md5sum file1 file2 file3 ...它就可以了。

答案 3 :(得分:0)

可以使用将查找md5sum -c checksum.md5文件的GNU checksum并检查checksum.md5文件内容。

md5sum -c checksum.md5 | grep "checksum: OK" -

用于检查BSD格式的.md5文件的Ruby系统调用内的示例:

system("md5sum -c checksum.md5 | grep \"checksum: OK\" -")

这将返回true或false。