Если у вас есть папка с файлами и текстовый список хеш-сумм (например, после загрузки архива данных или передачи файлов от коллеги), задача сводится к двум шагам: вычислить хеш каждого файла и сравнить результат со списком. Вручную это делать не нужно — все основные системы умеют проверять файлы пакетно по готовому файлу списка. Ниже — как это сделать в Windows, Linux и macOS, какие форматы списков бывают и что делать при расхождении.
Зачем вообще сверять хеши и когда это нужно
Хеш-сумма (контрольная сумма) — это короткая строка фиксированной длины, которая вычисляется из содержимого файла. Если изменился хотя бы один байт, изменится и хеш. Поэтому сравнение сумм позволяет убедиться, что файлы не повреждены при передаче или загрузке и не были подменены.
Типичные ситуации:
- вы скачали набор файлов (дистрибутивы, образы дисков, архивы) и у вас есть официальный список контрольных сумм;
- вам передали большой объём данных на внешнем носителе, и нужно проверить целостность до удаления источника;
- вы делаете резервные копии и хотите периодически убеждаться, что копии читаются без ошибок;
- нужно убедиться, что несколько версий набора файлов идентичны.
Важный нюанс: совпадение хеша подтверждает целостность только относительно того списка, которому вы доверяете. Если сам список получен по тому же ненадёжному каналу, что и файлы, проверка защищает от случайных повреждений, но не от злонамеренной подмены. Для защиты от подмены список должен приходить по независимому каналу — например, с официального сайта разработчика, а не вместе с файлами.
Шаг 1. Определите алгоритм и формат списка
Прежде чем запускать команды, откройте файл со списком хешей в любом текстовом редакторе. От этого зависит выбор инструмента.
Алгоритм
Посмотрите на длину строки: MD5 даёт 32 символа, SHA-1 — 40, SHA-256 — 64, SHA-512 — 128 шестнадцатеричных символов. Используйте именно тот алгоритм, которым считался список: хеш MD5 никогда не совпадёт с хешем SHA-256 одного и того же файла. Если алгоритм нигде не указан, ориентируйтесь на длину строки. Предпочтение отдавайте SHA-256 и сильнее; MD5 сегодня пригоден только для проверки случайных повреждений, но не для защиты от подмены.
Формат строк
Чаще всего встречаются два варианта:
- Стандартный формат GNU/BSD: сначала хеш, потом два пробела (или пробел и звёздочка), затем имя файла. Пример: d41d8cd98f00b204e9800998ecf8427e document.pdf. Именно под него заточены утилиты md5sum, sha256sum в Linux и shasum -c в macOS.
- Просто пары «хеш + имя» через пробел или табуляцию, иногда с полными путями. Такой список можно привести к стандартному виду или обработать вручную.
Также обратите внимание на регистр: некоторые генераторы пишут хеш заглавными буквами. Большинство утилит сравнивают без учёта регистра либо корректно обрабатывают оба варианта, но если проверка неожиданно «провалилась» при визуально совпадающих строках, регистр — первая вещь, которую стоит проверить.
Шаг 2. Подготовьте структуру папок
Ключевое условие успешной пакетной проверки: пути в списке должны соответствовать фактическому расположению файлов относительно папки, из которой вы запускаете команду. Это самая частая причина ошибок вида «файл не найден».
- Поместите файл со списком (обычно он называется вроде checksums.sha256, MD5SUMS или hashes.txt) в корневую папку набора файлов — туда же, куда указывают относительные пути из списка.
- Откройте терминал или командную строку и перейдите в эту папку командой смены каталога.
- Убедитесь, что имена файлов в списке совпадают с реальными с точностью до символа, включая расширения и регистр букв (на Linux и macOS регистр значим).
Если в списке указаны абсолютные пути с другого компьютера (например, C:\Users\ivan\downloads\…), их придётся поправить под вашу структуру — обычная замена текста в редакторе решает проблему.
Шаг 3. Запустите проверку
Linux
В Linux всё встроено. Для стандартного списка:
- sha256sum -c checksums.sha256 — проверка по SHA-256;
- md5sum -c MD5SUMS — проверка по MD5;
- аналогично работают sha1sum и sha512sum.
Утилита пройдёт по всем строкам списка, посчитает хеш каждого файла и выведет для каждого «OK» или «FAILED». Добавьте ключ —quiet, чтобы видеть только проблемы, а не подтверждения по каждому файлу. Если список в другом формате, его можно нормализовать: например, убрать лишние столбцы с помощью awk или sed так, чтобы осталась пара «хеш имя файла», а затем скормить результат той же утилите.
Если списка нет, а есть только отдельные хеши, можно сгенерировать свой список и сравнить: sha256sum *.iso > my.sums, затем сравнить содержимое my.sums с эталоном командой diff — но этот способ чувствителен к порядку строк и пробелам, поэтому надёжнее нормализовать оба списка (отсортировать и привести к одному виду) перед сравнением.
macOS
В macOS есть совместимая утилита shasum (Perl-скрипт) и BSD-версии md5/shasum. Удобнее всего:
- shasum -a 256 -c checksums.sha256 — проверка списка SHA-256;
- md5 -r файл — быстрый расчёт MD5 одного файла, если нужно проверить точечно.
Флаг -c работает так же, как в Linux, и ожидает стандартный формат списка. Если список создан на Windows в кодировке с BOM или с переводами строк CRLF, shasum может споткнуться — пересохраните список в UTF-8 без BOM с переводами строк LF.
Windows
В современных Windows есть встроенная утилита certutil, работающая в командной строке:
- certutil -hashfile «имя_файла» SHA256 — считает хеш одного файла.
Certutil проверяет по одному файлу за вызов, поэтому для пакета удобнее небольшой цикл в PowerShell, который читает ваш список и сравнивает значения. Логика такая: прочитать строки списка, для каждой извлечь хеш и имя файла, вычислить фактический хеш через Get-FileHash и вывести совпадение или расхождение. Готовые скрипты такой проверки легко находятся, но даже собственный цикл из десяти строк справляется с задачей.
Альтернатива — установить набор GNU-утилит (например, через подсистему WSL или пакет Git for Windows, где есть bash): тогда работают те же команды sha256sum -c, что и в Linux. Если вы регулярно работаете со списками хешей, вариант с WSL обычно оказывается самым простым.
Как читать результаты проверки
| Результат | Что означает | Что делать |
|---|---|---|
| OK / совпадает | Содержимое файла побитово соответствует тому, для которого считался хеш в списке | Ничего, файл цел относительно списка |
| FAILED / не совпадает | Файл повреждён, изменён или это другая версия файла | Перекачать/запросить файл заново; повторить проверку |
| Нет такого файла | Путь или имя в списке не соответствуют реальным | Сверить структуру папок и имена, исправить список или расположение |
| Ошибка чтения | Файл заблокирован, нет прав или носитель сбоит | Закрыть программы, проверить права и состояние диска |
Отдельно про расхождения: единичный FAILED почти всегда означает повреждение при передаче или скачивании — просто получите файл заново и проверьте снова. Если новый файл снова не сходится, сверьте, тем ли алгоритмом считался список и ту ли версию файла вы ожидаете (разные сборки и ревизии имеют разные хеши). Массовые расхождения по всем файлам чаще говорят о проблеме с самим списком: неверный алгоритм, лишние символы, другая кодировка или устаревшая версия набора.
Типичные ошибки
- Неверный алгоритм. Проверка SHA-256 списком от MD5 даст сто процентов «провалов». Всегда сверяйте длину хеша в списке с ожидаемой для выбранной команды.
- Несовпадение путей. Команда запущена не из той папки, либо в списке абсолютные пути другого компьютера. Решается переходом в нужный каталог или правкой списка.
- Кодировка и переводы строк. Список, сохранённый в Excel или блокноте с BOM и CRLF, может ломать разбор в Unix-утилитах. Пересохраните в UTF-8 без BOM.
- Лишние столбцы. Размер, дата или номер строки рядом с хешем мешают парсеру. Оставьте только хеш и имя файла.
- Доверие самому списку. Список, скачанный с того же зеркала, что и файлы, не защищает от подмены. Берите суммы с официального источника или по независимому каналу.
- Частичная проверка. «Проверил пару файлов наугад» не гарантирует целостность остальных. Запускайте проверку по всему списку — она автоматическая и занимает столько же времени, сколько чтение всех файлов один раз.
Что делать дальше
Главный принцип: одна команда должна пройти по всему списку и дать однозначный вердикт по каждому файлу. Перед запуском потратьте минуту на три проверки — алгоритм соответствует длине хеша, пути в списке соответствуют вашей структуре папок, список сохранён в простой кодировке. После запуска действуйте по результатам: одиночные расхождения устраняются перекачиванием файла, системные — пересмотром самого списка.
Если вы регулярно принимаете или передаёте большие наборы файлов, заведите привычку сразу генерировать список сумм вместе с данными (sha256sum * > SHA256SUMS в Linux/macOS, PowerShell-скрипт с Get-FileHash в Windows) и прикладывать его к передаче. Это превращает проверку целостности из разовой проблемы в стандартную двухминутную процедуру.
