Я все время ловлю себя на желании загрузить и немедленно проверить целостность загрузки в скрипте, но мне не удалось найти правильное заклинание 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
-c
option может либо прочитать сумму 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