Введение
При администрировании серверов Ubuntu нередко требуется сопоставить содержимое архивных копий или сжатых логов. Традиционное предварительное извлечение файлов на диск отнимает драгоценное время и память. Встроенная утилита bzcmp решает эту проблему, выполняя побайтовую сверку упакованных в формат bzip2 данных прямо на лету. В данном руководстве подробно рассмотрены практические сценарии: анализ возвращаемых кодов завершения, локализация несовпадений и кросс-сравнение архива с обычным текстовым файлом.
Развертывание пакета bzip2 и подготовка тестовых стендов
Для доступа к набору инструментов bzcmp убедимся в наличии пакета bzip2 в системе и выполним его установку при необходимости:

Сформируем тестовый набор данных: подготовим пару абсолютно одинаковых текстовых документов и третий файл с измененной строкой:

Упакуем созданные документы в формат .bz2. Параметр -k критически важен — он предотвратит удаление исходных текстовых файлов после компрессии:

Сопоставление идентичных архивов и анализ кода возврата ($?)
Проверим идентичность содержимого двух эквивалентных архивов с помощью вызова bzcmp sample1.txt.bz2 sample2.txt.bz2:
В соответствии со стандартным поведением Unix-утилит при полном совпадении данных вывод в терминал отсутствует.

Для программного контроля успешности операции в bash-скриптах запросим статус последнего выполненного процесса: echo "Exit Code: $?".
Код возврата 0 однозначно подтверждает эквивалентность информации внутри обоих архивов.

Обнаружение расхождений и детальная побайтовая локализация
Теперь сопоставим архивы с несовпадающими данными: bzcmp sample1.txt.bz2 sample3.txt.bz2.
Утилита моментально зафиксирует разницу и укажет точный номер байта и строку, где обнаружено первое расхождение.

Проверим переменную $? после обнаружения несовпадений командой echo "Exit Code: $?":
Ненулевой статус свидетельствует о завершении операции с обнаруженными отличиями в потоках данных.

Если требуется полная таблица всех несовпадающих байтов, воспользуемся флагом -l: bzcmp -l sample1.txt.bz2 sample3.txt.bz2.
Утилита транслирует поведение cmp -l, последовательно выводя смещение каждого отличного байта в десятичном виде и его значения для обоих источников в восьмеричном формате.

Кросс-сравнение архива с несжатым файлом и очистка стенда
Уникальное преимущество bzcmp заключается в способности сопоставлять запакованный документ напрямую с несжатым оригиналом: bzcmp sample1.txt.bz2 sample1.txt.
Благодаря прозрачной распаковке утилита подтверждает эквивалентность данных без лишнего мусора на накопителе.

Смоделируем сценарий расхождения между архивом и несжатым текстовым документом: echo 'Different text' > sample_diff.txt && bzcmp sample1.txt.bz2 sample_diff.txt.
Инструмент корректно перехватывает расхождение и выводит маркеры смещения.

Завершив практические эксперименты, удалим все временные документы и сжатые файлы, восстанавливая исходное состояние каталога:

Инструмент bzcmp из экосистемы Linux позволяет быстро и ресурсоэффективно проверять целостность данных в архивах bzip2. Его интеграция в сценарии мониторинга и резервного копирования исключает лишние операции дискового ввода-вывода при валидации больших объемов сжатой информации.