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