Как взять 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 -coption может либо прочитать сумму SHA256 из sha256sumфайла, либо из 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

Связанный контент