bzip2 — бесплатная свободная утилита командной строки с открытым исходным кодом для сжатия данных, реализация алгоритма Барроуза — Уилера.
Разработана и впервые опубликована Джулианом Сюардом (англ. Julian Seward) в июле 1996 года (версия 0.15). Стабильность и популярность компрессора росли в течение нескольких лет, и версия 1.0 была опубликована в конце 2000 года.
В соответствии с традициями UNIX, bzip2 единовременно может выполнять только одну операцию: либо сжатие, либо распаковку и только для одного файла. При сжатии bzip2 добавляет к имени файла расширение «.bz2». Для упаковки нескольких файлов их сперва архивируют в один файл утилитой tar, а затем сжимают при помощи bzip2. Такие архивы обычно имеют расширение «.tar.bz2».
bzip2
.bz2
tar
.tar.bz2
bzip2 сжимает большинство файлов эффективнее, но медленнее, чем более традиционные утилиты gzip или zip. В этом отношении он похож на другие современные алгоритмы сжатия.
gzip
zip
bzip2 выполняет сжатие данных с существенной нагрузкой на CPU (что обусловлено его математическим аппаратом). bzip2 применяют, если нет ограничений на время сжатия и на нагрузку на CPU, например, для разовой упаковки большого объёма данных.
В некоторых случаях bzip2 уступает по эффективности сжатия архиваторам 7-Zip (метод сжатия LZMA) и rar. Согласно данным автора программы от 2005 года, метод сжатия bzip2 уступает по эффективности сжатия на 10‑15 %[3] наилучшим методам, известным на тот момент (PPM)[4], но при этом в 2 раза быстрее при сжатии и в 6 раз быстрее при распаковке.
7-Zip
rar
Метод сжатия bzip2 работает следующим образом:
Приблизительный размер блока можно выбрать при помощи аргументов командной строки («-1» для 100 килобайт, «-2» для 200 КБ, …, «-9» для 900 КБ). Каждый блок сжимается независимо, сжатые блоки записываются последовательно друг за другом, в начале каждого используется 48-битная последовательность — магическое число 0x314159265359 (в кодировке ASCII при выравнивании на границу байта отображается как «1AY&SY»), то есть запись первых десятичных цифр числа π в формате BCD[5]. Конец файла помечается 48-битной константой 0x177245385090, представляющей собой корень из числа Пи. В начале файлов формата bzip2 используется следующий заголовок: двухбайтовая сигнатура «BZ», затем указание на метод энтропийного сжатия — «h» (Хаффман) и размер блока (десятичное число от 0 до 9).
-1
-2
-9
За счет использования независимого сжатия отдельных блоков возможны реализации формата с параллельным сжатием или распаковкой (для распаковки может потребоваться индекс смещений для каждого блока)[6].
Примеры использования bzip2.
# Команда для сжатия файла «file» bzip2 file # или bzip2 -z file # или bzip2 --compress file # Команда для распаковки файла «file.bz2» bzip2 -d file.bz2 # или bzip2 --decompress file.bz2 # или bunzip2 file.bz2 # bunzip2 - копия bzip2 или ссылка на bzip2
Аргументы командной строки bzip2 в основном такие же, как и у утилиты gzip.
# Команда для распаковки архива tar, сжатого bzip2 bzip2 -cd file.tar.bz2 | tar -xvf - # или bzip2 --stdout --decompress file.tar.bz2 \ | tar --extract --verbose --file - # Команда для создания архива tar, сжатого bzip2 tar -cvf - files | bzip2 -9 > file.tar.bz2 # или tar --create --verbose --file - files \ | bzip2 -9 > file.tar.bz2
Версия GNU tar поддерживает флаг «-j» («--bzip2»), который позволяет создавать и распаковывать файлы «tar.bz2» без использования перенаправлений ввода-вывода (англ. pipeline). Пример:
-j
--bzip2
# Упаковка данных в архив tar и сжатие bzip2 при помощи GNU tar tar -cvjf file.tar.bz2 list_of_files # или tar --create --verbose --bzip2 --file file.tar.bz2 list_of_files # Распаковка архива tar, сжатого bzip2 при помощи GNU tar tar -xvjf file.tar.bz2 # или tar --extract --verbose --bzip2 --file file.tar.bz2
Современные версии GNU tar могут автоматически определить метод сжатия данных, и поэтому флаг «-j» («--bzip2») можно не использовать. Пример:
tar -xvf file.tar.bz2 # или tar --extract --verbose --file file.tar.bz2
Кроме того, существует набор утилит для выполнения поиска, вывода, восстановления и сравнения данных в формате bzip2:
bzcat
bzmore
bzless
bzcmp
bzdiff
bzgrep
bzegrep
bzfgrep
bzip2recover
Архив «.bz2» содержит поток (англ. stream) сжатых данных. Слово «поток» употребляется, так как данные нельзя разделить логически и блоки данных сжимаются независимо друг от друга. Сжатые данные состоят из следующих полей:
BZ
0
h
1
2
9
0x314159265359
{ 1=> уменьшить длину на 1; 0=> увеличить длину на 1} (*(symbols+2)*groups)
0x177245385090
Максимальный размер несжатого блока для классического формата равен 900 килобайтам. Если блок состоит из одного повторяющегося символа, после кодирования RLE блок займёт около 46 мегабайт (45 899 236 байт), а после выполнения всех операций размер файла .bz2 составит 46 байт. Если повторяющийся символ будет иметь код 251, размер файла .bz2 составит 40 байт, а коэффициент сжатия будет равен 1 147 480,9:1.
Lokasi Pengunjung: 18.189.185.42