Чому перевірка контрольної суми 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

On Wheezy:

$ sha256sum --version
sha256sum (GNU coreutils) 8.13

на обох ОС говориться:

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
Додані дрібниці: Другий космічний персонаж насправді має значення. Він позначає, що контрольна сума була розрахована в текстовому режимі . Навпаки, a *перед іменем файлу позначає двійковий режим . Порівняйте вихід sha256sum -t /dev/null(текстовий режим, типовий режим) з sha256sum -b /dev/null(двійковий режим). Мабуть, це не має значення для Unix / Linux, але це може бути в Windows .
Дубу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.