<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://wiki.alex-master.com/index.php?action=history&amp;feed=atom&amp;title=Bzip2</id>
		<title>Bzip2 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.alex-master.com/index.php?action=history&amp;feed=atom&amp;title=Bzip2"/>
		<link rel="alternate" type="text/html" href="https://wiki.alex-master.com/index.php?title=Bzip2&amp;action=history"/>
		<updated>2026-05-06T21:48:10Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.alex-master.com/index.php?title=Bzip2&amp;diff=307&amp;oldid=prev</id>
		<title>Vaal: Новая страница: «'''bzip2''' — бесплатная свободная утилита командной строки с открытым исходным кодом для сж…»</title>
		<link rel="alternate" type="text/html" href="https://wiki.alex-master.com/index.php?title=Bzip2&amp;diff=307&amp;oldid=prev"/>
				<updated>2017-06-02T06:40:18Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «&amp;#039;&amp;#039;&amp;#039;bzip2&amp;#039;&amp;#039;&amp;#039; — бесплатная свободная утилита командной строки с открытым исходным кодом для сж…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''bzip2''' — бесплатная свободная утилита командной строки с открытым исходным кодом для сжатия данных, реализация алгоритма Барроуза — Уилера.&lt;br /&gt;
&lt;br /&gt;
Разработана и впервые опубликована Джулианом Сюардом (Julian Seward) в июле 1996 года (версия 0.15). Стабильность и популярность компрессора росли в течение нескольких лет, и версия 1.0 была опубликована в конце 2000 года.&lt;br /&gt;
&lt;br /&gt;
== Эффективность ==&lt;br /&gt;
&lt;br /&gt;
В соответствии с традициями UNIX, &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; единовременно может выполнять только одну операцию: либо сжатие, либо распаковку и только для одного файла. При сжатии &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; добавляет к имени файла расширение «&amp;lt;code&amp;gt;.bz2&amp;lt;/code&amp;gt;». Для упаковки нескольких файлов их сперва архивируют в один файл утилитой &amp;lt;code&amp;gt;[[tar]]&amp;lt;/code&amp;gt;, а затем сжимают при помощи &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt;. Такие архивы обычно имеют расширение «&amp;lt;code&amp;gt;.tar.bz2&amp;lt;/code&amp;gt;».&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; сжимает большинство файлов эффективнее, но медленнее, чем более традиционные утилиты &amp;lt;code&amp;gt;gzip&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;zip&amp;lt;/code&amp;gt;. В этом отношении он похож на другие современные алгоритмы сжатия.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; выполняет сжатие данных с существенной нагрузкой на CPU (что обусловлено его математическим аппаратом). &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; применяют, если нет ограничений на время сжатия и на нагрузку на CPU, например, для разовой упаковки большого объёма данных.&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; уступает по эффективности сжатия архиваторам &amp;lt;code&amp;gt;7-Zip&amp;lt;/code&amp;gt; (метод сжатия LZMA) и &amp;lt;code&amp;gt;rar&amp;lt;/code&amp;gt;. Согласно данным автора программы от 2005 года, метод сжатия &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; уступает по эффективности сжатия на 10‑15% наилучшим методом, известным на тот момент (PPM). На данный момент наиболее эффективно сжимают различные реализации метода PAQ. Однако, использование данного метода крайне затруднено по причине низкой производительности (сжатие требует больших временных затрат), но при этом в 2 раза быстрее при сжатии и в 6 раз быстрее при распаковке.&lt;br /&gt;
&lt;br /&gt;
== Описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Метод сжатия &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; работает следующим образом:&lt;br /&gt;
* несжатые данные делятся на блоки фиксированного размера;&lt;br /&gt;
* выполняется преобразование Барроуза — Уилера для превращения последовательностей многократно чередующихся символов в строки одинаковых символов;&lt;br /&gt;
* применяет преобразование Move-To-Front(MTF);&lt;br /&gt;
* используется кодирование Хаффмана.&lt;br /&gt;
&lt;br /&gt;
Приблизительный размер блока можно выбрать при помощи аргументов командной строки («&amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;» для 100 килобайт, «&amp;lt;code&amp;gt;-2&amp;lt;/code&amp;gt;» для 200 КБ, …, «&amp;lt;code&amp;gt;-9&amp;lt;/code&amp;gt;» для 900 КБ). Каждый блок сжимается независимо, сжатые блоки записываются последовательно друг за другом, в начале каждого используется 48-битная последовательность — магическое число 0x314159265359 (в кодировке ASCII при выравнивании на границу байта отображается как «1AY&amp;amp;SY»), то есть запись первых десятичных цифр числа Пи в формате BCD. Конец файла помечается 48-битной константой 0x177245385090, представляющей собой корень из числа Пи.&lt;br /&gt;
&lt;br /&gt;
Предшественник &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt;, программа &amp;lt;code&amp;gt;bzip&amp;lt;/code&amp;gt;, вместо кодирования Хаффмана использовала арифметическое кодирование. Из‑за патентных ограничений от этого алгоритма отказались.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
&lt;br /&gt;
Примеры использования &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Команда для сжатия файла «file»&lt;br /&gt;
bzip2 file&lt;br /&gt;
# или&lt;br /&gt;
bzip2 --compress file&lt;br /&gt;
&lt;br /&gt;
# Команда для распаковки файла «file.bz2»&lt;br /&gt;
bzip2 -d file.bz2&lt;br /&gt;
# или&lt;br /&gt;
bzip2 --decompress file.bz2&lt;br /&gt;
# или&lt;br /&gt;
bunzip2 file.bz2&lt;br /&gt;
# bunzip2 - копия bzip2 или ссылка на bzip2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аргументы командной строки &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt; в основном такие же, как и у утилиты &amp;lt;code&amp;gt;gzip&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Команда для распаковки архива tar, сжатого bzip2&lt;br /&gt;
bzip2 -cd file.tar.bz2 | tar -xvf -&lt;br /&gt;
# или&lt;br /&gt;
bzip2 --stdout --decompress file.tar.bz2 \&lt;br /&gt;
| tar --extract --verbose --file -&lt;br /&gt;
&lt;br /&gt;
# Команда для создания архива tar, сжатого bzip2&lt;br /&gt;
tar -cvf - files | bzip2 -9 &amp;gt; file.tar.bz2&lt;br /&gt;
# или&lt;br /&gt;
tar --create --verbose --file - files \&lt;br /&gt;
| bzip2 -9 &amp;gt; file.tar.bz2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Версия GNU &amp;lt;code&amp;gt;[[tar]]&amp;lt;/code&amp;gt; поддерживает флаг «&amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt;» («&amp;lt;code&amp;gt;--bzip2&amp;lt;/code&amp;gt;»), который позволяет создавать и распаковывать файлы «&amp;lt;tt&amp;gt;tar.bz2&amp;lt;/tt&amp;gt;» без использования перенаправлений ввода-вывода (pipeline). Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Упаковка данных в архив tar и сжатие bzip2 при помощи GNU tar&lt;br /&gt;
tar -cvjf file.tar.bz2 list_of_files&lt;br /&gt;
# или&lt;br /&gt;
tar --create --verbose --bzip2 --file file.tar.bz2 list_of_files&lt;br /&gt;
&lt;br /&gt;
# Распаковка архива tar, сжатого bzip2 при помощи GNU tar&lt;br /&gt;
tar -xvjf file.tar.bz2&lt;br /&gt;
# или&lt;br /&gt;
tar --extract --verbose --bzip2 --file file.tar.bz2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Современные версии GNU &amp;lt;code&amp;gt;tar&amp;lt;/code&amp;gt; могут автоматически определить метод сжатия данных, и поэтому флаг «&amp;lt;code&amp;gt;-j&amp;lt;/code&amp;gt;» («&amp;lt;code&amp;gt;--bzip2&amp;lt;/code&amp;gt;») можно не использовать. Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
tar -xvf file.tar.bz2&lt;br /&gt;
# или&lt;br /&gt;
tar --extract --verbose --file file.tar.bz2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме того, существует набор утилит для выполнения поиска, вывода, восстановления и сравнения данных в формате &amp;lt;code&amp;gt;bzip2&amp;lt;/code&amp;gt;:&lt;br /&gt;
* &amp;lt;code&amp;gt;bzcat&amp;lt;/code&amp;gt; — распаковка данных и вывод на терминал;&lt;br /&gt;
* &amp;lt;code&amp;gt;bzmore&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bzless&amp;lt;/code&amp;gt; — распаковка данных и постраничный вывод на терминал;&lt;br /&gt;
* &amp;lt;code&amp;gt;bzcmp&amp;lt;/code&amp;gt; — распаковка двух файлов, сравнение содержимого и сообщение результата: «равно» или «не равно»;&lt;br /&gt;
* &amp;lt;code&amp;gt;bzdiff&amp;lt;/code&amp;gt; — распаковка двух файлов, сравнение содержимого и вывод различий;&lt;br /&gt;
* &amp;lt;code&amp;gt;bzgrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bzegrep&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bzfgrep&amp;lt;/code&amp;gt; — распаковка данных и поиск в распакованном;&lt;br /&gt;
* &amp;lt;code&amp;gt;bzip2recover&amp;lt;/code&amp;gt; — распаковка любых блоков, которые только можно распаковать.&lt;br /&gt;
&lt;br /&gt;
== Формат файла ==&lt;br /&gt;
&lt;br /&gt;
Архив «&amp;lt;code&amp;gt;.bz2&amp;lt;/code&amp;gt;» содержит поток (stream) сжатых данных. Слово «поток» употребляется, так как данные нельзя разделить логически и блоки данных сжимаются независимо друг от друга. Сжатые данные состоят из следующих полей:&lt;br /&gt;
* заголовок размером 4 байта;&lt;br /&gt;
* ноль или более блоков сжатых данных различного размера;&lt;br /&gt;
* маркер, обозначающий конец сжатых данных и контрольная сумма(CRC) размером 32 бита, вычисленная для всего потока;&lt;br /&gt;
* несколько неиспользуемых бит для дополнения размера потока до целого количества байт.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Название поля || Размер поля в битах || Описание&lt;br /&gt;
|-&lt;br /&gt;
| .magic || 16 || &amp;lt;code&amp;gt;BZ&amp;lt;/code&amp;gt; — константа, сигнатура, магическое число.&lt;br /&gt;
|-&lt;br /&gt;
| .version || 8 || Байт, кодирующий номер версии.&lt;br /&gt;
; &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : Версия 1 (bzip1). Deprecated.&lt;br /&gt;
; &amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt; : Версия 2 (bzip2). «h» от англ. '''H'''uffman coding}}.&lt;br /&gt;
|-&lt;br /&gt;
| .hundred_k_blocksize || 8 || Размер блока несжатых данных в сотнях kB.&lt;br /&gt;
; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : Одна сотня kB (100 kB).&lt;br /&gt;
; &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; : Две сотни kB (200 kB).&lt;br /&gt;
; … : И так далее&lt;br /&gt;
; &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; : Девять сотен kB (900 kB).&lt;br /&gt;
|- &lt;br /&gt;
| .compressed_magic || 48 || &amp;lt;code&amp;gt;0x314159265359&amp;lt;/code&amp;gt; — константа, число Пи, записанное в двоично-десятичном коде(BCD).&lt;br /&gt;
|-&lt;br /&gt;
|| .crc || 32 || Контрольная сумма, рассчитанная для текущего блока.&lt;br /&gt;
|-&lt;br /&gt;
| .randomised || 1 ||&lt;br /&gt;
; &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : normal&lt;br /&gt;
; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : randomised (deprecated)&lt;br /&gt;
|-&lt;br /&gt;
| .origPtr || 24 || starting pointer into Преобразование Барроуза — Уилера(BWT) for after untransform&lt;br /&gt;
|-&lt;br /&gt;
| .huffman_used_map || 16 || bitmap, of ranges of 16 bytes, «имеется»/«отсутствует»&lt;br /&gt;
|-&lt;br /&gt;
|| .huffman_used_bitmaps || 0..256 || bitmap, of symbols used, «имеется»/«отсутствует» (кратно 16)&lt;br /&gt;
|-&lt;br /&gt;
| .huffman_groups || 3 || Число от 2 до 6, количество используемых таблиц Хаффмана.&lt;br /&gt;
|-&lt;br /&gt;
| .selectors_used || 15 || Число, показывающее сколько раз выполнялась смена таблицы Хаффмана (каждые 50 байт).&lt;br /&gt;
|-&lt;br /&gt;
| *.selector_list || 1..6 || zero-terminated bit runs (0..62) of Move-To-Front(MTF)'ed Huffman table (*selectors_used)&lt;br /&gt;
|-&lt;br /&gt;
| .start_huffman_length || 5 || 0..20 starting bit length for Huffman deltas&lt;br /&gt;
|-&lt;br /&gt;
| *.delta_bit_length || 1..40 ||&lt;br /&gt;
; &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : next symbol&lt;br /&gt;
; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : alter length&lt;br /&gt;
{ 1=&amp;gt;decrement length; 0=&amp;gt;increment length } (*(symbols+2)*groups)&lt;br /&gt;
|-&lt;br /&gt;
| .contents || 2..∞ || Huffman encoded data stream. Продолжается до конца блока. Максимальная длина равна formatnum:7372800 бит.&lt;br /&gt;
|-&lt;br /&gt;
| .eos_magic || 48 || &amp;lt;code&amp;gt;0x177245385090&amp;lt;/code&amp;gt; — константа, квадратный корень из числа Пи (sqrt(pi)) в двоично-десятичном коде(BCD).&lt;br /&gt;
|-&lt;br /&gt;
| .crc || 32 || Контрольная сумма, рассчитанная для всего потока.&lt;br /&gt;
|-&lt;br /&gt;
| .padding || 0..7 || Неиспользуемые биты (от 0 до 7). Назначение: увеличение размера архива до размера, кратного одному байту (8 битам) (выравнивание данных).&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Максимальный размер не сжатого блока равен 900 kB. Если блок состоит из одного повторяющегося символа, после кодирования RLE блок займёт около 46 MB (45899236 байт), а после выполнения всех операций размер файла &amp;lt;code&amp;gt;.bz2&amp;lt;/code&amp;gt; составит 46 байт. Если повторяющийся символ будет иметь код 251, размер файла &amp;lt;code&amp;gt;.bz2&amp;lt;/code&amp;gt; составит 40 байт, а коэффициент сжатия (compression ratio) будет равен 1147480.9:1.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.bzip.org/ Официальный сайт bzip.org]&lt;br /&gt;
* [http://faqs.lomonline.de/introdution-to-bzip2/ Введение в bzip2]&lt;/div&gt;</summary>
		<author><name>Vaal</name></author>	</entry>

	</feed>