linux checksum integrity

md5sum

Вычисление и проверка MD5-хэшей файлов для контроля целостности

Описание

md5sum — утилита для вычисления MD5-хэша (Message Digest Algorithm 5) файлов и проверки их целостности. MD5 порождает 128-битный «отпечаток» файла в виде 32 hex-символов. Одинаковые файлы дают одинаковый хэш; любое изменение содержимого меняет хэш полностью.

В уроке 27 md5sum используется в скрипте контроля целостности файлов: хэши вычисляются и накапливаются в файл md5sum.txt, затем файл используется для проверки (md5sum -c). Типичный паттерн: md5sum $pathcheck/$var >> $pathcheck-md5sum.txt.

Формат вывода: хэш имя-файла (два пробела между хэшем и именем — для отличия текстового и бинарного режимов). Этот формат напрямую понимается командой md5sum -c для верификации.

Синтаксис

md5sum [OPTIONS] [FILE...] # Вычислить хэш файла md5sum file.txt # Вычислить хэши нескольких файлов md5sum file1.txt file2.txt dir/file3.sh # Сохранить хэши в файл md5sum file.txt >> checksums-md5sum.txt # Проверить файлы по сохранённым хэшам md5sum -c checksums-md5sum.txt

Флаги и опции

ФлагОписание
(без флага)Вычислить MD5-хэш каждого указанного файла и вывести в формате хэш имя
-c, --checkПроверить файлы по хэшам из указанного файла (читает формат вывода md5sum). Выводит OK или FAILED
--tagВывод в формате BSD (MD5 (file) = hash) вместо стандартного GNU
-b, --binaryЧитать файл в бинарном режиме (один пробел перед именем в выводе вместо двух). Актуально для Windows-файлов
-t, --textЧитать файл в текстовом режиме (поведение по умолчанию в Linux)
--quietПри проверке (-c) не выводить строки «ОК»; только сообщения об ошибках
--statusПри проверке (-c) не выводить ничего; только код возврата (0 = OK, ≠0 = ошибки)
--strictПри проверке (-c) вернуть ненулевой код если строки в файле имеют неверный формат
-w, --warnПри проверке предупреждать о строках с неверным форматом (но не завершаться с ошибкой)

Паттерны использования

Вычислить и проверить хэш

# Вычислить хэш одного файла
md5sum file.txt
# d41d8cd98f00b204e9800998ecf8427e  file.txt

# Вычислить хэши нескольких файлов
md5sum *.txt

# Сохранить все хэши
md5sum *.sh > checksums.txt

# Проверить позднее
md5sum -c checksums.txt
# script1.sh: OK
# script2.sh: OK

Из урока 27: контроль целостности

#!/usr/bin/env bash
# md5_control.sh

read -p "Enter path for control: " pathcheck

# Вычислить хэши всех файлов в директории
for var in $(ls "$pathcheck"); do
  md5sum "$pathcheck/$var" >> "$pathcheck"-md5sum.txt
done

echo "Checksums saved to: $pathcheck-md5sum.txt"

# Позднее — проверка
md5sum -c "$pathcheck"-md5sum.txt

Проверка в скрипте (exit code)

#!/usr/bin/env bash
# Тихая проверка — только код возврата
if md5sum --status -c checksums.txt; then
  echo "All files OK"
else
  echo "ERROR: integrity check failed!"
  # Показать подробности
  md5sum -c checksums.txt
  exit 1
fi

Сравнить два файла

# Быстрая проверка идентичности двух файлов
hash1=$(md5sum file1.txt | awk '{print $1}')
hash2=$(md5sum file2.txt | awk '{print $1}')

if [ "$hash1" = "$hash2" ]; then
  echo "Files are identical"
else
  echo "Files differ"
fi

Советы и предупреждения

⚠️ Проверить по документации: md5sum vs sha256sum для безопасности
MD5 уязвим к коллизионным атакам и не подходит для криптографической аутентификации. Для скриптов мониторинга целостности файлов, где важна защита от намеренной подделки, используйте sha256sum — синтаксис идентичен, но алгоритм надёжен. md5sum приемлем только для быстрой проверки случайного повреждения данных (битый диск, обрыв передачи), не от атак.
Совет: sha256sum — прямая замена
sha256sum file.txt, sha256sum -c checksums.txt — синтаксис полностью совпадает с md5sum. Для новых скриптов предпочитайте sha256sum. Для обратной совместимости с существующими файлами хэшей — используйте md5sum.
Внимание: >> vs > при накоплении хэшей
Паттерн из урока 27 использует >> (дополнение) для накопления хэшей в файл. Убедитесь, что файл хэшей не существует до начала, или удалите его перед циклом — иначе старые хэши от предыдущего запуска накопятся и md5sum -c будет проверять дубли.