如何使用一个命令行验证校验和?

Pat*_*ark 4 command-line ubuntu checksum

假设我输入并运行以下命令:

sha256sum ubuntu-18.04.1-desktop-amd64.iso
Run Code Online (Sandbox Code Playgroud)

延迟后,这将输出以下内容:

5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433  ubuntu-18.04.1-desktop-amd64.iso
Run Code Online (Sandbox Code Playgroud)

然后,我意识到我应该输入以下命令来更快地评估 SHA?256 哈希是否匹配:

sha256sum ubuntu-18.04.1-desktop-amd64.iso | grep 5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用sha256sum命令第二次验证校验和的情况下对第一个输出采取行动(即避免这样做造成的延迟)?具体来说:

  1. 我想知道如何使用该命令要做到这一点并不需要复制和第一输出的校验和粘贴(如果可能的话)。
  2. 我想知道这样做最简单的方式使用该命令要求第一个输出的校验和的复制和粘贴。(简单地尝试grep在双引号粘贴校验和(即,作为字符串)上使用是行不通的。)

小智 8

您可以在您的.bashrc.zshrc配置中创建一个简单的函数并按以下方式运行它:

sha256 <expected-sha-256-sum> <name-of-the-file>
Run Code Online (Sandbox Code Playgroud)

它将在单个命令中将预期的 sha256 总和与实际总和进行比较。

功能是:

sha256() {
    echo "$1 $2" | sha256sum --check
}
Run Code Online (Sandbox Code Playgroud)

在此处找到更多详细信息


slm*_*slm 4

\n

问题 1:我想知道如何使用不需要复制和粘贴第一个输出的校验和(如果可能的话)的命令来执行此操作。

\n
\n\n

Bash没有提供任何机制来调用先前运行的命令的任何输出。如果您打算在任何后续命令中对其进行操作,则必须显式捕获它。

\n\n
\n

问题 2:我想知道使用确实需要复制和粘贴第一个输出的校验和的命令来执行此操作的最简单方法。(仅仅尝试在 double\xe2\x80\x90 引用的粘贴校验和(即作为字符串)上使用 grep 是行不通的。)

\n
\n\n

因此,这里唯一的选择是复制/粘贴上一个命令的输出。关于为什么当您尝试时这对您不起作用。这可能会失败,因为当您使用时echo <sha1sum>引入了一个附加字符,即换行符 ( \\n),它改变了校验和字符串。

\n\n

当将字符串回显到任何散列函数(例如md5sha256sum)时,通常最好执行一个echo -n <..>which 告诉echo省略在字符串末尾附加换行符。

\n\n

您可以看到这如何影响对哈希函数的任何调用,如下所示:

\n\n
$ echo "blah" | sha256sum\n41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3  -\n\n$ echo -n "blah" | sha256sum\n8b7df143d91c716ecfa5fc1730022f6b421b05cedee8fd52b1fc65a96030ad52  -\n
Run Code Online (Sandbox Code Playgroud)\n\n

字符串“blah”的真正哈希值是第二次调用。

\n