Открыть сервис

BZip2

bzip2 — это свободная утилита для сжатия данных, работающая в командной строке, и одноимённый формат сжатия, основанный на алгоритме Барроуза — Уилера (Burrows–Wheeler transform). Отличается более высокой степенью сжатия по сравнению с традиционными методами (например, gzip и deflate), но за счёт более медленной работы. Широко применяется для сжатия файлов в операционных системах на базе Unix и Linux, а также в составе архиваторов высокого уровня и для распространения исходных кодов программного обеспечения.

История

Разработка bzip2 началась как продолжение проекта bzip, созданного Джулианом Сьюардом (Julian Seward) в 1996 году. Первая публичная версия bzip2 (0.1) была выпущена в июне 1996 года, а стабильная версия 1.0 — в 2000 году. Изначально bzip использовал сжатие на основе алгоритма LZW, но вскоре был заменён на преобразование Барроуза — Уилера (BWT) с марковским кодированием (MTF), что дало существенный выигрыш.

С 2000 года bzip2 стал стандартным средством сжатия во многих дистрибутивах Linux и BSD. Инструмент вошёл в состав GNU project, хотя и не являлся частью ядра GNU. В 2008 году вышла версия 1.0.5 с рядом исправлений и оптимизаций. Активная разработка вела́сь до 2019 года; после этого проект поддерживался сообществом через патчи.

С 2000-х годов bzip2 постепенно вытесняется более современными алгоритмами (например, xz, zstd), однако остаётся популярным для задач, где важна совместимость с историческими данными или архивами.

Алгоритм сжатия

В отличие от gzip, использующего алгоритм Deflate (LZ77 + Хаффман), bzip2 основан на преобразовании Барроуза — Уилера (BWT). Последовательность операций:

  1. Преобразование Барроуза — Уилера — переставляет символы входной строки так, чтобы одинаковые символы группировались вместе. Это делает данные более предсказуемыми для последующего сжатия.
  2. Move-To-Front (MTF) — кодирует повторяющиеся символы малыми числами, что улучшает эффективность следующего этапа.
  3. Run-Length Encoding (RLE) — упаковывает последовательности одинаковых символов.
  4. Энтропийное кодирование — сжатие с помощью комбинированного алгоритма Хаффмана и арифметического кодирования (начиная с версии 1.0.2 — только Хаффман).

Основное преимущество BWT+MTF — высокая степень сжатия для текстовых данных, особенно для естественных языков и кода. Однако процесс требует значительных вычислительных ресурсов (как CPU, так и памяти) по сравнению с gzip.

Программная реализация

Утилита bzip2 работает в командной строке и предоставляет следующие ключевые опции:

Файлы, сжатые bzip2, обычно имеют расширение .bz2. Утилита может работать как фильтр (через stdin/stdout), что позволяет объединять её с другими инструментами (например, tar, gzip).

Применение

Архивация

bzip2 чаще всего применяется для сжатия файлов перед длительным хранением или передачей по сети. В связке с tar (команда tar -c -I bzip2 -f archive.tar.bz2) создаются архивы .tar.bz2, которые до недавнего времени были распространены в Linux.

Распространение программного обеспечения

До появления форматов .tar.xz и .deb/.rpm с встроенным сжатием, многие проекты поставляли исходные коды в архивах .tar.bz2 — например, ядро Linux, GCC, Python. До сих пор ряд старых репозиториев или зеркал содержат такие архивы.

Обработка логов

Из-за высокой степени сжатия текста bzip2 иногда используется для сжатия журналов (логов) в серверных дистрибутивах — например, утилита logrotate может сжимать старые логи с помощью bzip2.

Сравнение с другими алгоритмами

АлгоритмСтепень сжатияСкорость сжатияСкорость распаковкиПотребление памяти
gzip (Deflate)СредняяВысокаяВысокаяМалое
bzip2ВысокаяСредняяСредняяСреднее
xz (LZMA2)Очень высокаяНизкаяСредняяБольшое
zstdВысокаяОчень высокаяВысокаяСреднее

Bzip2 обычно обеспечивает степень сжатия на 15–25 % лучше gzip, но уступает 10–20 % xz. Скорость распаковки bzip2 в 2–3 раза ниже, чем у gzip, и в 1,5–2 раза выше, чем у xz. Потребление памяти при сжатии составляет около 4,5 МБ для стандартного (200-килобайтного) блока, при распаковке — около 3 МБ.

Критика

Несмотря на критику, bzip2 остаётся одним из самых надёжных и распространённых инструментов для сжатия текстовых данных, особенно в унаследованных системах и для длительного хранения.

Лицензия и распространение

bzip2 распространяется на условиях лицензии BSD (BSD-2-Clause), что позволяет свободное использование, модификацию и распространение как в свободном, так и в проприетарном ПО. Исходный код доступен на официальном сайте проекта и в репозиториях большинства дистрибутивов Linux.

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →