Введение
Утилита bzip2 давно зарекомендовала себя в экосистеме Linux как надежный инструмент с высокой степенью компрессии данных. В данном руководстве мы подробно разберем ключевые параметры этой команды и ее практическое применение при администрировании системы. На наглядных примерах в терминале мы изучим процесс сжатия с сохранением исходных файлов, протестируем целостность архивов, научимся работать с утилитами bunzip2 и bzcat, а также сравним различные уровни сжатия по скорости и объему.
Проверка наличия утилиты, базовое сжатие и защита исходника (-k, -v)
Перед началом экспериментов убедимся, что пакет присутствует в операционной системе, а при его отсутствии выполним быструю установку.

Для первого теста сформируем небольшой текстовый документ sample1.txt при помощи стандартной команды echo.

В основе работы bzip2 лежит алгоритм блочной сортировки Барроуза — Уилера (BWT), обеспечивающий плотную упаковку информации.
Важная особенность стандартного поведения программы: после создания архива с расширением .bz2 первоначальный файл безвозвратно удаляется с диска. Чтобы отслеживать ход операции и итоговый коэффициент сжатия, к вызову добавляют флаг -v.
⚙️ [Ключевые параметры запуска]
-d : переводит утилиту в режим декомпрессии архивов .bz2.-k : предотвращает удаление исходных файлов после завершения сжатия или извлечения.-v : включает подробный вывод с процентом уменьшения размера и ходом обработки.-f : принудительно перезаписывает существующие целевые файлы без предупреждений.-t : выполняет тест целостности архива без извлечения данных на накопитель.-c : направляет распакованный или сжатый поток данных в стандартный вывод (stdout).-1 … -9 : задает размер рабочего блока памяти, балансируя между скоростью и эффективностью (по умолчанию активен -9).

Для демонстрации безопасного сжатия подготовим еще один текстовый файл sample2.txt.

Выполним архивацию командой bzip2 -vk sample2.txt. Сочетание флагов позволяет видеть статистику компрессии и одновременно сохраняет оригинальный документ нетронутым.
Благодаря ключу -k в текущей директории останутся как исходный sample2.txt, так и вновь созданный sample2.txt.bz2.

Проверим состояние директории с помощью команды ls -l sample*. На выводе наглядно видно различие: sample1.txt исчез, уступив место архиву, тогда как sample2.txt сохранился рядом со своей сжатой копией.

Декомпрессия и верификация структуры (-d, -t, bunzip2)
Перед распаковкой критически важных данных разумно убедиться в их сохранности. Команда bzip2 -tv sample1.txt.bz2 позволяет протестировать контейнер на ошибки.
Опция -t считывает блоки и валидирует контрольные суммы без записи файлов на диск, а -v подтверждает корректность каждого блока.

Извлечем содержимое первого архива посредством bzip2 -dv sample1.txt.bz2.
Поскольку ключ -k не был передан, после успешного восстановления файла sample1.txt архив .bz2 будет автоматически удален системой.

Второй архив распакуем специализированной командой bunzip2 -vk sample2.txt.bz2.
Синтаксически bunzip2 является прямым эквивалентом вызова bzip2 -d, а указание флага -k гарантирует сохранность архива sample2.txt.bz2 после декомпрессии.

Команда ls -l sample* подтверждает успешное восстановление исходных данных и наглядно демонстрирует результат работы флага сохранения.

Чтение данных на лету и перенаправление потоков (-c, bzcat)
Нередко возникает необходимость просмотреть текстовые логи или конфигурации внутри архива без предварительного распаковывания на накопитель. Создадим файл sample3.txt для проверки потоковой обработки.

Запустим сжатие с перенаправлением вывода: bzip2 -c sample3.txt > sample3.txt.bz2.
Флаг -c транслирует поток сжатых байтов в stdout, что при использовании стандартного оператора перенаправления оболочки (>) создает архивный файл, вообще не затрагивая оригинал.

Для мгновенного чтения упакованного текста в терминале применим команду bzcat sample3.txt.bz2.
Данная утилита работает аналогично связке bzip2 -dc: она распаковывает поток в оперативную память и тут же выводит содержимое на экран, экономя время и дисковое пространство.

Проверим директорию через ls -l sample3* и убедимся, что оба объекта находятся на своих местах в целости и сохранности.

Уровни компрессии (-1 … -9) и анализ плотности данных
Для оценки влияния глубины сжатия на конечный объем сформируем объемный массив числовых данных при помощи генератора последовательностей: seq 1 50000 > large_data.txt.

Протестируем наиболее скоростной режим компрессии с ключом -1: bzip2 -1 -vk -c large_data.txt > large_fast.bz2.
В этом режиме размер блока ограничен 100 КБ, что минимизирует нагрузку на оперативную память и сокращает время обработки ценой некоторого снижения плотности архива.

Теперь упакуем тот же массив с максимальным коэффициентом сжатия: bzip2 -9 -vk -c large_data.txt > large_best.bz2.
Режим -9 задействует блоки по 900 КБ. Этот уровень активен в bzip2 по умолчанию и ориентирован на максимальное уменьшение занимаемого дискового пространства.

Сравним метаданные полученных файлов с помощью ls -lh large*.
Исходный файл размером 283K при быстром сжатии (large_fast.bz2) уменьшился до 56K, а при максимальной компрессии (large_best.bz2) показал результат 67K. На примере структурированных числовых данных можно отчетливо наблюдать, как размер блока и специфика алгоритма влияют на итоговую плотность архива.

Мы подробно рассмотрели инструментарий bzip2, bunzip2 и bzcat в среде Ubuntu, разобрав ключевые сценарии от безопасного сжатия до тонкой настройки уровней компрессии. Грамотный подбор параметров позволяет системным инженерам гибко оптимизировать дисковые ресурсы и автоматизировать рутинные задачи обслуживания серверов.