为什么在 Debian 上使用 `sha256sum` 验证 SHA256 校验和失败而在 Ubuntu 上工作?

ger*_*ijk 41 debian checksum

在Ubuntu 14.04,sha256sumcoreutils作品如我所料:

echo 879dd0d7637876be4796f7e6f194a111d21088be85cfe717fc97e2e7f05e79d2 /tmp/myfile | sha256sum -c
/tmp/myfile: OK
Run Code Online (Sandbox Code Playgroud)

但是,在 Debian Wheezy 上使用完全相同的文件执行完全相同的命令失败:

sha256sum: standard input: no properly formatted SHA256 checksum lines found
Run Code Online (Sandbox Code Playgroud)

我不明白这个。如何在 Debian 的 shell 脚本中可靠地验证校验和?


在 Ubuntu 14.04 上:

? sha256sum --version
sha256sum (GNU coreutils) 8.21
Run Code Online (Sandbox Code Playgroud)

关于 Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13
Run Code Online (Sandbox Code Playgroud)

两个操作系统上的联机帮助页都说:

SYNOPSIS
       sha256sum [OPTION]... [FILE]...

DESCRIPTION
       Print or check SHA256 (256-bit) checksums.  With no FILE,
       or when FILE is -, read standard input.

[...]

       -c, --check
              read SHA256 sums from the FILEs and check them
Run Code Online (Sandbox Code Playgroud)

Mic*_*mer 50

它关心间距。如果你运行:

sha256sum /dev/null
Run Code Online (Sandbox Code Playgroud)

你得到

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null
Run Code Online (Sandbox Code Playgroud)

(两个空格)。当你这样使用时echo,单词之间只有一个空格。

版本 8.13 需要其输出的确切格式。如果您使用:

echo "$SUM  $FILE" | sha256sum -c
Run Code Online (Sandbox Code Playgroud)

(再次,两个空格)它应该工作。较新的版本不关心有多少空间,因此它也适用于它们。

  • 添加琐事:第二个空格字符实际上具有含义。它表示校验和已经以_文本模式_计算。相反,文件名前面的`*` 表示_二进制模式_。比较`sha256sum -t /dev/null`(文本模式,默认)和`sha256sum -b /dev/null`(二进制模式)的输出。显然,这在 Unix/Linux 上没有区别,但 [在 Windows 上可能](https://www.virtualbox.org/ticket/9569)。 (19认同)
  • 我是唯一一个认为这种语法没有它应有的帮助的人吗?为什么不是 `sha256sum <file> -c <sum>` 或其他一些标志,因为 -c 已经在使用中。无论如何,谢谢你,它也解决了我的问题。 (2认同)