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

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

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

sha256sum ubuntu-18.04.1-desktop-amd64.iso

延迟一段时间后,输出如下:

5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433  ubuntu-18.04.1-desktop-amd64.iso

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

sha256sum ubuntu-18.04.1-desktop-amd64.iso | grep 5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433

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

  1. 我想知道如何使用以下命令来执行此操作才不是需要复制并粘贴第一个输出的校验和(如果可能)。
  2. 我想知道使用以下命令执行此操作的最简单方法需要复制并粘贴第一个输出的校验和。 (仅仅尝试使用grep双引号粘贴的校验和(即作为字符串)是行不通的。)

答案1

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

sha256 <expected-sha-256-sum> <name-of-the-file>

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

其功能是:

sha256() {
    printf '%s %s\n' "$1" "$2" | sha256sum --check
}

在这里找到更多细节

答案2

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

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

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

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

当将字符串回显到任何哈希函数(例如md5或 )时sha256sum,通常最好执行echo -n <..>告诉echo忽略在字符串末尾附加换行符的操作。

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

$ echo "blah" | sha256sum
41af286dc0b172ed2f1ca934fd2278de4a1192302ffa07087cea2682e7d372e3  -

$ echo -n "blah" | sha256sum
8b7df143d91c716ecfa5fc1730022f6b421b05cedee8fd52b1fc65a96030ad52  -

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

答案3

看来您正在检查匹配项。您是否考虑过使用-c( --check) 选项sha256sum

答案4

@Sasha 有正确的方法。如果您收到的SHA256SUM文件的哈希值在左侧,文件路径在右侧,则可以使用以下方法:

sha256sum --check SHA256SUM 2>/dev/null | grep 'OK'

如果没有,您可以创建/附加到校验和文件以进行记录保存,然后计算哈希值以与其进行比较:

function checksums {
    echo "$3 $2" | tee -a SHA256SUMS
    "$1" --check SHA256SUMS 2>/dev/null | grep 'OK'
}

checksums sha256sum 'ubuntu-18.04.1-desktop-amd64.iso' '5748706937539418ee5707bd538c4f5eabae485d17aa49fb13ce2c9b70532433'

这样,您就拥有了所有文件和哈希值的记录。

相关内容