Почему проверка контрольной суммы SHA256 с помощью `sha256sum` не выполняется в Debian и работает в Ubuntu?


34

На Ubuntu 14.04, sha256sumиз coreutilsработ, как я ожидал:

echo 879dd0d7637876be4796f7e6f194a111d21088be85cfe717fc97e2e7f05e79d2 /tmp/myfile | sha256sum -c
/tmp/myfile: OK

Однако точно такая же команда с точно таким же файлом в Debian Wheezy завершается неудачно:

sha256sum: standard input: no properly formatted SHA256 checksum lines found

Я не понимаю этого. Как я могу надежно проверить контрольную сумму в сценарии оболочки на Debian?


На Ubuntu 14.04:

⟫ sha256sum --version
sha256sum (GNU coreutils) 8.21

На Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

manpages в обеих ОС говорят:

SYNOPSIS
       sha256sum [OPTION]... [FILE]...

DESCRIPTION
       Print or check SHA256 (256-bit) checksums.  With no FILE,
       or when FILE is -, read standard input.

[...]

       -c, --check
              read SHA256 sums from the FILEs and check them

Ответы:


45

Это заботится о расстоянии. Если вы запускаете:

sha256sum /dev/null

Вы получаете

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null

(два пробела). Когда вы так используете echo, между словами есть только один пробел.

Версия 8.13 требует точного формата, в котором она выводится. Если вы используете:

echo "$SUM  $FILE" | sha256sum -c

(опять два пробела) должно работать. Более новые версии не заботятся о количестве пробелов, поэтому они будут работать и с ними.


18
Добавлены мелочи: второй символ пробела на самом деле имеет значение. Это означает, что контрольная сумма была рассчитана в текстовом режиме . Напротив, *перед именем файла обозначает двоичный режим . Сравните вывод sha256sum -t /dev/null(текстовый режим, по умолчанию) с sha256sum -b /dev/null(двоичный режим). Это не имеет значения в Unix / Linux, по-видимому, но это может быть в Windows .
Дубу
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.