Команда tar -czf backup.tar.gz ./folder && md5sum backup.tar.gz > backup.tar.gz.md5 решает задачу «сделать tar md5» буквально в одну строку: первый вызов упаковывает каталог в архив, второй вычисляет контрольную сумму и сохраняет её в отдельный файл. Такая связка — стандартный способ убедиться, что архив не повредился при передаче по сети или хранении на съёмном носителе.

Ниже разберём, что именно делает каждая команда, какие ключи использовать в разных ситуациях и как проверить целостность архива на другой машине. Все примеры работают в стандартных дистрибутивах Linux, а также в окружениях с GNU-утилитами — например, в WSL на Windows или в терминале macOS (с поправкой на команду md5 вместо md5sum).

Что такое tar и зачем нужна сумма MD5

Tar (tape archiver) — утилита для объединения множества файлов в один потоковый архив. Сама по себе она не сжимает данные: сжатие добавляется через внешние кодеки — gzip (ключ z), bzip2 (ключ j) или xz (ключ J). Результатом обычно становится файл вида архив.tar или архив.tar.gz.

MD5 — алгоритм хеширования, выдающий 128-битную контрольную сумму в виде строки из 32 шестнадцатеричных символов. Для задач контроля целостности (не криптографической защиты) этого достаточно: если хотя бы один байт архива изменился, сумма будет совершенно другой. Именно поэтому рядом с файлами на зеркалах дистрибутивов часто лежат файлы .md5.

⚠️ Внимание: MD5 считается уязвимым для намеренных коллизий. Для проверки случайных повреждений он подходит, но для защиты от подмены файла злоумышленником используйте sha256sum — синтаксис команд полностью аналогичен.

Базовая команда: создать архив и посчитать сумму

Минимальный рабочий вариант выглядит так:

tar -czf project.tar.gz /путь/к/каталогу

md5sum project.tar.gz > project.tar.gz.md5

Разберём ключи. c — создать архив, z — сжать через gzip, f — записать результат в указанный файл. Вторая команда вычисляет хеш и перенаправляет его в текстовый файл рядом с архивом. Внутри .md5-файла окажется строка вида:

d41d8cd98f00b204e9800998ecf8427e  project.tar.gz

Если нужно обойтись без промежуточного файла и просто увидеть сумму на экране, достаточно md5sum project.tar.gz. Для пакетной обработки нескольких архивов удобно передать их списком: md5sum *.tar.gz > checksums.md5 — тогда один файл будет хранить суммы сразу всех архивов в каталоге.

☑️ Порядок создания tar-архива с MD5

Выполнено: 0 / 5

Проверка целостности архива на другой машине

Главная ценность связки «архив + сумма» проявляется при проверке. Скопируйте оба файла в один каталог и выполните:

md5sum -c project.tar.gz.md5

Ключ -c (check) читает файл с суммами, пересчитывает хеши указанных в нём файлов и сравнивает. Успешный результат выглядит как строка project.tar.gz: OK. Если архив повреждён или подменён, утилита выведет FAILED и завершится с ненулевым кодом возврата — это удобно использовать в скриптах для автоматической проверки.

Вам нужно проверить архив вручную, без файла сумм? Просто сравните вывод md5sum project.tar.gz со значением, которое сообщил отправитель. Совпадение всех 32 символов означает, что файл дошёл без изменений.

💡

Храните .md5-файл рядом с архивом и передавайте их вместе — md5sum -c автоматически найдёт архив по имени, записанному внутри файла сумм.

Полезные варианты и дополнительные ключи tar

Базовый синтаксис покрывает большинство задач, но несколько опций заметно упрощают жизнь:

  • 🔹 -v — показывать список добавляемых файлов во время упаковки (полезно для контроля, но замедляет вывод на больших каталогах);
  • 🔹 --exclude='*.log' — исключить из архива файлы по шаблону;
  • 🔹 -C /другой/путь — сменить каталог перед упаковкой, чтобы в архиве не было лишних уровней вложенности;
  • 🔹 -t — просмотреть содержимое готового архива без распаковки: tar -tzf project.tar.gz;
  • 🔹 -x — распаковать архив: tar -xzf project.tar.gz.

Отдельного упоминания заслуживает потоковый режим. Если нужно посчитать сумму содержимого до записи на диск, можно передать вывод tar напрямую в md5sum:

tar -c /путь/к/каталогу | md5sum

Такой приём не создаёт файл архива — он лишь показывает хеш потока. Учтите, что сумма потока без сжатия и сумма готового .tar.gz-файла будут разными, потому что gzip добавляет собственные заголовки и временные метки.

📊 Как вы чаще всего используете tar с контрольными суммами?
Резервное копирование данных
Передача файлов между серверами
Публикация файлов для скачивания
Только изучаю тему

Сравнение MD5 с другими алгоритмами хеширования

MD5 — не единственный вариант. В Linux из коробки доступны несколько утилит с идентичным синтаксисом, и выбор между ними зависит от задачи:

УтилитаДлина хешаСкоростьРекомендуемое применение
md5sum128 битвысокаяконтроль случайных повреждений
sha1sum160 битвысокаяустаревший стандарт, лучше избегать
sha256sum256 битсредняяуниверсальный выбор, в т.ч. защита от подмены
sha512sum512 битсредняямаксимальная стойкость хеша

Синтаксис у всех четырёх утилит одинаковый: sha256sum file.tar.gz > file.tar.gz.sha256 и проверка через sha256sum -c. Если вы только начинаете использовать контрольные суммы, разумно сразу брать SHA-256 — он лишён известных слабостей MD5 и при этом достаточно быстр.

💡

MD5 годится для обнаружения случайных повреждений архива, но для защиты от намеренной подмены используйте sha256sum — команды работают идентично.

Типичные ошибки и их решения

Первая частая проблема — сообщение md5sum: project.tar.gz: No such file or directory при проверке. Оно возникает, когда .md5-файл и архив лежат в разных каталогах: утилита ищет файл по относительному пути, записанному внутри. Решение — запускать md5sum -c из каталога, где лежат оба файла.

Вторая ситуация — несовпадение сумм при заведомо целом архиве. Возможная причина: файл сумм создан на Windows и содержит символы возврата каретки (CRLF), из-за которых имя файла внутри читается некорректно. Проверьте файл командой cat -A checksums.md5 и при необходимости удалите лишние символы через dos2unix или sed.

Третий нюанс касается воспроизводимости. Два архива одного и того же каталога, созданные в разное время, почти наверняка дадут разные MD5, потому что gzip записывает метку времени в заголовок. Для побайтово одинаковых архивов используйте gzip -n или ключ tar --mtime, иначе сравнение хешей двух сборок будет бессмысленным.

⚠️ Внимание: не прерывайте процесс упаковки по Ctrl+C на больших каталогах — получится усечённый архив, который может выглядеть как обычный файл, но не пройдёт проверку и не распакуется полностью. Перед удалением исходных данных всегда выполняйте md5sum -c и тестовый просмотр tar -tzf.

Как проверить архив без файла сумм

Если .md5-файл утерян, но известна исходная сумма, выполните md5sum имя_архива и сравните вывод с эталонным значением вручную. Для автоматизации можно сохранить эталон в файл командой echo "СУММА имя_файла" > check.md5 (два пробела между суммой и именем) и проверить через md5sum -c.

Автоматизация: скрипт резервного копирования с проверкой

Связка tar и md5sum легко встраивается в shell-скрипты. Простейший вариант, который пакует каталог, считает сумму и сразу проверяет результат:

#!/bin/sh

tar -czf backup.tar.gz /путь/к/данным || exit 1

md5sum backup.tar.gz > backup.tar.gz.md5

md5sum -c backup.tar.gz.md5 || exit 1

echo "Архив создан и проверен"

Здесь каждый шаг завершит скрипт с ошибкой, если предыдущий не удался: оператор || exit 1 останавливает выполнение при ненулевом коде возврата. Такой скрипт можно повесить на cron для регулярного резервного копирования — проверка суммы гарантирует, что на диск записался читаемый архив, а не обрезанный файл.

Для больших каталогов имеет смысл добавить логирование вывода и уникальные имена архивов с датой, например через $(date +%F). Конкретный формат имени выбирайте под свою ротацию копий — главное, чтобы файл сумм назывался так же, как архив, плюс расширение .md5.

💡

Добавьте в скрипт команду tar -tzf backup.tar.gz > /dev/null после упаковки — это быстрая проверка читаемости архива до того, как вы удалите исходные данные.

Часто задаваемые вопросы

Можно ли встроить MD5-сумму внутрь самого tar-архива?

Формат tar не предусматривает встроенной контрольной суммы всего архива — только контрольные суммы заголовков отдельных файлов внутри. Поэтому стандартная практика — хранить хеш в отдельном файле .md5 рядом с архивом.

Почему MD5 одного и того же каталога получается разным?

Gzip записывает время создания в заголовок архива, поэтому два запуска упаковки дают разные байты и разные суммы. Используйте gzip -n или ключ --mtime у tar для воспроизводимых сборок.

Чем заменить md5sum в macOS?

В macOS используется команда md5 вместо md5sum. Синтаксис вывода немного отличается, но для ручного сравнения сумм этого достаточно. Либо установите GNU coreutils, чтобы получить привычный md5sum.

Насколько надёжен MD5 для проверки бэкапов?

Для обнаружения случайных повреждений (битые сектора, обрыв передачи) MD5 полностью надёжен. Его слабость проявляется только при целенаправленной подделке файла — в таких сценариях переходите на sha256sum.

Как проверить несколько архивов одной командой?

Создайте общий файл сумм командой md5sum *.tar.gz > checksums.md5, а затем проверьте все архивы разом: md5sum -c checksums.md5. Утилита выведет статус OK или FAILED по каждому файлу.