如何获取文件的 sha256sum 并在一行中进行比较检查?

如何获取文件的 sha256sum 并在一行中进行比较检查?

我不断发现自己想要在脚本中立即下载并检查下载的完整性,但我一直无法找到正确的咒语sha256sum

MY_SHA256=e147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5
sha256sum some_binary | sha256sum --check ${MY_SHA256}

我如何获取sha256sum新文件并立即将其与已知哈希值进行比较?

答案1

我下载了一个存档文件和一个附带的校验和文件。下面是我如何验证下载的存档的哈希值是否与下载的校验和文件的哈希值匹配:

echo "$(cat archive.tar.gz.sha256) archive.tar.gz" | sha256sum --check --status

--status标志可阻止所有 stdout 输出(比 更有效--quiet)。然后我需要依靠返回代码来确定它们是否匹配,这正是我想要的,因为我将在脚本中使用它。

答案2

例子:

 echo "67574ee0039eaf4043a237e7c4b0eb432ca07ebf9c7b2dd0667e83bc3900b2cf kali-linux-2019.2-amd64.iso" | sha256sum -c

如果你有该sha256sum文件,你可以直接使用它:

sha256sum -c "kali-linux-2019.2-amd64.iso.txt.sha256sum"

解释:

在上面的例子中,你有

echo "<known SHA 256 sum of the file> <name of the file>" | sha256sum -c

sha256sum -csha256sum选项可以从文件或读取 SHA256 总和STDIN。如果您没有文件sha256sum,则echo可以使用命令提供文件中包含的相同详细信息sha256sum

如果你有该sha256sum文件,你可以直接使用它:

sha256sum -c "<sha256sum file name>"

笔记:

或者,您可以使用shasum -a 256而不是sha256sum指定-a要使用的算法。

答案3

您可以看到,它sha256sum --check采用了之前(常规)sha256sum 运行的输出:它通过 stdin 获取哈希值和文件名,然后将它们与实际文件进行比较。

因此,显而易见的做法是手动以它想要的格式提供输出:

$ echo "da39a3ee5e6b4b0d3255bfef95601890afd80709  motd" | sha1sum --check
motd: OK

答案4

如果你有校验和文件,你可以简单地执行sha256sum --check。例如:

% ls
elasticsearch-7.9.3-darwin-x86_64.tar.gz           # File to check
elasticsearch-7.9.3-darwin-x86_64.tar.gz.sha512    # Checksum file


% sha512sum --check elasticsearch-7.9.3-darwin-x86_64.tar.gz.sha512
elasticsearch-7.9.3-darwin-x86_64.tar.gz: OK

相关内容