6

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

MD5 (checksum.md5) = 9eb7a54d24dbf6a2eb9f7ce7a1853cd0

...而 GNU md5sum 会产生像这样更明智的格式?

9eb7a54d24dbf6a2eb9f7ce7a1853cd0 checksum.md5

据我所知,md5sum 格式更容易解析并且更有意义。你怎么md5sum -check用md5?-p、-q、-r、-t、-x 选项是什么意思?man md5对这些选项只字未提!:|

4

4 回答 4

6

在当前的 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命令生成的输出进行比较。

于 2014-05-27T12:57:44.107 回答
5

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

9eb7a54d24dbf6a2eb9f7ce7a1853cd0

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

校验和(){
        (md5sum <"$1"; 测试 $? = 127 && md5 <"$1") | 剪切-d''-f1
}
校验和 /etc/hosts

FreeBSD 的手册页说明了这些论点

   -p 将标准输入回显到标准输出并将校验和附加到标准输出。

 -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.

于 2009-08-20T10:31:43.670 回答
2

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

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

这将使用 FreeBSDmd5命令并重新排列输出,使其看起来像 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 ...可以正常工作。

于 2013-12-23T01:34:13.910 回答
0

可以使用 GNUmd5sum -c checksum.md5来查找checksum文件并检查checksum.md5文件内容。

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

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

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

这将返回真或假。

于 2013-05-08T03:08:06.450 回答