Руководства по командной строке

Man » Онлайн-руководство bzip2 - подробная онлайн-документация для страницы руководства bzip2

🌍
bzip2, bunzip2 - блочный алгоритм сжатия файлов, v1.0.8
bzcat - распаковывает файлы в стандартный вывод
bzip2recover - восстанавливает данные из поврежденных файлов bzip2

СИНТАКСИС

bzip2 [ -cdfkqstvzVL123456789 ] [ имена_файлов ... ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ имена_файлов ... ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ имена_файлов ... ]
bzcat [ -h|--help ]
bzip2recover имя_файла

ОПИСАНИЕ

bzip2 сжимает файлы, используя алгоритм блочной сортировки текста Берроуза-Уиллера и кодирование Хаффмана. Сжатие, как правило, значительно лучше, чем при использовании более традиционных компрессоров на основе LZ77/LZ78, и приближается к производительности статистических компрессоров семейства PPM.

Параметры командной строки намеренно очень похожи на параметры GNU gzip, но они не идентичны.

bzip2 ожидает, что команда будет сопровождаться списком имен файлов. Каждый файл заменяется сжатой версией, имя которой имеет вид "исходное_имя.bz2". У каждого сжатого файла дата и время модификации, разрешения и, по возможности, владения совпадают с соответствующим исходным файлом, чтобы эти свойства можно было правильно восстановить во время распаковки. Обработка имен файлов проста в том смысле, что отсутствует механизм для сохранения исходных имен файлов, разрешений, владельцев или дат в файловых системах, которым не хватает этих концепций или которые имеют серьезные ограничения на длину имен файлов, такие как MS-DOS.

bzip2 и bunzip2 по умолчанию не перезаписывают существующие файлы. Если вы хотите, чтобы это происходило, укажите флаг -f.

Если имена файлов не указаны, bzip2 сжимает данные из стандартного ввода в стандартный вывод. В этом случае bzip2 не будет записывать сжатые данные в терминал, поскольку это было бы совершенно непонятно и, следовательно, бессмысленно.

bunzip2 (или bzip2 -d) распаковывает все указанные файлы. Файлы, которые не были созданы с помощью bzip2, будут обнаружены и проигнорированы, и будет выдано предупреждение. bzip2 пытается угадать имя файла для распакованного файла из имени сжатого файла следующим образом:

имя_файла.bz2 становится имя_файла
имя_файла.bz становится имя_файла
имя_файла.tbz2 становится имя_файла.tar
имя_файла.tbz становится имя_файла.tar
любое_другое_имя становится любое_другое_имя.out

Если файл не заканчивается ни одним из распознанных расширений, .bz2, .bz, .tbz2 или .tbz, bzip2 сообщает, что не может угадать имя исходного файла, и использует исходное имя с добавлением .out.

Как и в случае сжатия, отсутствие имен файлов приводит к распаковке из стандартного ввода в стандартный вывод.

^ unzip2 корректно распаковывает файл, являющийся конкатенацией двух или более сжатых файлов. Результатом является конкатенация соответствующих распакованных файлов. Поддерживается также проверка целостности (-t) конкатенированных сжатых файлов.

Вы также можете сжимать или распаковывать файлы в стандартный вывод, используя флаг -c. Несколько файлов могут быть сжаты и распакованы таким образом. Полученные результаты последовательно передаются в stdout. Сжатие нескольких файлов таким образом создает поток, содержащий несколько представлений сжатых файлов. Такой поток можно корректно распаковать только с помощью версии bzip2 0.9.0 или более поздней. В более ранних версиях bzip2 распаковка прекратится после распаковки первого файла в потоке.

^ zcat (или bzip2 -dc) распаковывает все указанные файлы в стандартный вывод.

^ zip2 считывает аргументы из переменных среды BZIP2 и BZIP в указанном порядке и обрабатывает их перед любыми аргументами, считанными из командной строки. Это обеспечивает удобный способ предоставления аргументов по умолчанию.

Сжатие всегда выполняется, даже если сжатый файл немного больше исходного. Файлы размером менее ста байт, как правило, становятся больше, поскольку механизм сжатия имеет постоянные накладные расходы в размере около 50 байт. Случайные данные (включая вывод большинства программ сжатия файлов) кодируются со скоростью около 8,05 бит на байт, что приводит к увеличению примерно на 0,5%.

В качестве самопроверки для вашей защиты bzip2 использует 32-битные CRC для проверки того, что распакованная версия файла идентична исходной. Это защищает от повреждения сжатых данных и от необнаруженных ошибок в bzip2 (что, надеюсь, крайне маловероятно). Вероятность того, что повреждение данных останется незамеченным, ничтожно мала, примерно один шанс на четыре миллиарда для каждого обработанного файла. Однако имейте в виду, что проверка выполняется при распаковке, поэтому она может только сообщить вам о проблеме. Она не может помочь вам восстановить исходные несжатые данные. Вы можете использовать bzip2recover, чтобы попытаться восстановить данные из поврежденных файлов.

Возвращаемые значения: 0 для нормального завершения, 1 для проблем с окружающей средой (файл не найден, неверные флаги, ошибки ввода-вывода и т. д.), 2 для указания на поврежденный сжатый файл, 3 для внутренней ошибки согласованности (например, ошибка), из-за которой bzip2 аварийно завершает работу.

ОПЦИИ

`-c` `--stdout`

Сжимать или распаковывать в стандартный вывод.

`-d` `--decompress`

Принудительно выполнить распаковку. bzip2, bunzip2 и bzcat по сути являются одной и той же программой, и решение о том, какие действия следует предпринять, принимается на основе того, какое имя используется. Этот флаг отменяет этот механизм и принуждает bzip2 к распаковке.

`-z` `--compress`

Дополнение к -d: принудительно выполнить сжатие, независимо от имени вызова.

`-t` `--test`

Проверить целостность указанных файлов, но не распаковывать их. Это фактически выполняет пробную распаковку и отбрасывает результат.


-f --force
Принудительная перезапись выходных файлов. Обычно bzip2 не перезаписывает существующие выходные файлы. Также заставляет bzip2 разрывать жесткие ссылки на файлы, что он в противном случае не делает.

Обычно bzip2 отказывается распаковывать файлы, у которых нет правильных магических заголовковых байтов. Если указать принудительный режим (-f), то такие файлы будут передаваться без изменений. Так ведет себя GNU gzip.

-k --keep
Сохранять (не удалять) входные файлы во время сжатия или распаковки.

-s --small
Уменьшить использование памяти для сжатия, распаковки и тестирования. Файлы распаковываются и тестируются с использованием модифицированного алгоритма, который требует всего 2,5 байта на байт блока. Это означает, что любой файл можно распаковать, используя 2300 КБ памяти, хотя и примерно в два раза медленнее, чем обычно.

Во время сжатия опция -s выбирает размер блока 200 КБ, что ограничивает использование памяти примерно до той же величины, но за счет снижения степени сжатия. Короче говоря, если на вашем компьютере мало памяти (8 МБ или меньше), используйте -s для всего. См. РАЗДЕЛ «УПРАВЛЕНИЕ ПАМЯТЬЮ» ниже.

-q --quiet
Подавлять несущественные предупреждающие сообщения. Сообщения, касающиеся ошибок ввода-вывода и других критических событий, подавляться не будут.

-v --verbose
Подробный режим — отображать степень сжатия для каждого обработанного файла. Дальнейшие опции -v увеличивают уровень детализации, выводя множество информации, которая представляет интерес в основном для целей диагностики.

-h --help
Вывести сообщение о справке и выйти.

-L --license -V --version
Отобразить версию программного обеспечения, условия лицензии.

-1 (или --fast) до -9 (или --best)
Установить размер блока равным 100 КБ, 200 КБ ... 900 КБ при сжатии. Не влияет при распаковке. См. РАЗДЕЛ «УПРАВЛЕНИЕ ПАМЯТЬЮ» ниже. Псевдонимы --fast и --best предназначены в основном для совместимости с GNU gzip. В частности, --fast не делает работу существенно быстрее. А --best просто выбирает поведение по умолчанию.

--
Рассматривает все последующие аргументы как имена файлов, даже если они начинаются с дефиса. Это позволяет обрабатывать файлы с именами, начинающимися с дефиса, например: bzip2 -- -myfilename.

--repetitive-fast --repetitive-best
Эти флаги избыточны в версиях 0.9.5 и выше. Они обеспечивали некоторый грубый контроль над поведением алгоритма сортировки в более ранних версиях, что иногда было полезно. В версиях 0.9.5 и выше используется улучшенный алгоритм, который делает эти флаги неактуальными.

УПРАВЛЕНИЕ ПАМЯТЬЮ

bzip2 сжимает большие файлы блоками. Размер блока влияет как на степень сжатия, так и на объем памяти, необходимый для сжатия и распаковки. Флаги -1–-9 указывают размер блока равным 100 000, 200 000 ... 900 000 байт соответственно (по умолчанию). Во время распаковки размер блока, используемый при сжатии, считывается из заголовка сжатого файла, и bunzip2 выделяет себе ровно столько памяти, сколько необходимо для распаковки файла. Поскольку размеры блоков хранятся в сжатых файлах, следует, что флаги -1–-9 не имеют значения и игнорируются во время распаковки.

Приблизительную оценку требований к объему памяти для сжатия и распаковки можно получить по следующим формулам:

Сжатие:   400 к + (8 x размер блока)

Распаковка: 100 к + (4 x размер блока) или
100 к + (2,5 x размер блока)

Более крупные размеры блоков дают все меньше и меньше дополнительного сжатия. Большая часть сжатия достигается за счет первых двух-трех сотен килобайт размера блока, и это следует учитывать при использовании bzip2 на машинах с ограниченной памятью. Важно также понимать, что объем памяти, необходимый для распаковки, определяется на этапе сжатия выбором размера блока.

Для файлов, сжатых с использованием размера блока по умолчанию, 900 к, bunzip2 потребует около 3700 кбайт для распаковки. Чтобы обеспечить возможность распаковки любого файла на машине с 4 мегабайтами памяти, bunzip2 имеет опцию для распаковки с использованием примерно половины этого объема памяти, около 2300 кбайт. Скорость распаковки также уменьшится вдвое, поэтому используйте эту опцию только при необходимости. Соответствующий флаг — -s.

В общем, старайтесь использовать максимально возможный размер блока, который позволяет объем доступной памяти, поскольку это максимизирует достигаемое сжатие. Скорость сжатия и распаковки практически не зависит от размера блока.

Еще один важный момент относится к файлам, которые помещаются в один блок, — это означает большинство файлов, которые вы будете встречать при использовании большого размера блока. Объем реально используемой памяти пропорционален размеру файла, поскольку файл меньше блока. Например, сжатие файла длиной 20000 байт с использованием флага -9 приведет к тому, что компрессор выделит около 7600 к памяти, но будет использовать только 400 к + 20000 * 8 = 560 кбайт. Аналогично, декомпрессор выделит 3700 к, но будет использовать только 100 к + 20000 * 4 = 180 кбайт.

В таблице ниже суммированы максимальные требования к объему памяти для различных размеров блоков. Также указан общий размер сжатых файлов для 14 файлов из Calgary Text Compression Corpus, общий размер которых составляет 3141622 байт. Эта колонка дает некоторое представление о том, как сжатие меняется в зависимости от размера блока. Эти значения, как правило, занижают преимущество больших размеров блоков для больших файлов, поскольку в Corpus преобладают файлы меньшего размера.

Сжатие Распаковка Распаковка Размер Флаг объем объем -s объем файла

-1      1200 к      500 к         350 к      914704
-2      2000 к      900 к         600 к      877703
-3      2800 к      1300 к        850 к      860338
-4      3600 к      1700 к        1100 к     846899
-5      4400 к      2100 к        1350 к     845160
-6      5200 к      2500 к        1600 к     838626
-7      6100 к      2900 к        1850 к     834096
-8      6800 к      3300 к        2100 к     828642
-9      7600 к      3700 к        2350 к     828642

ВОССТАНОВЛЕНИЕ ДАННЫХ ИЗ ПОВРЕЖДЕННЫХ ФАЙЛОВ

bzip2 сжимает файлы блоками, обычно длиной 900 кбайт. Каждый блок обрабатывается независимо.

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


Сжатое представление каждого блока ограничено 48-битным шаблоном, что позволяет с разумной уверенностью определить границы блоков. Каждый блок также содержит свою 32-битную CRC, поэтому поврежденные блоки можно отличить от неповрежденных.

^ zip2recover — это простая программа, предназначенная для поиска блоков в файлах .bz2 и записи каждого блока в отдельный файл .bz2. Затем вы можете использовать bzip2 -t для проверки целостности полученных файлов и распаковки тех, которые не повреждены.

^ zip2recover принимает один аргумент — имя поврежденного файла — и записывает ряд файлов rec00001file.bz2, rec00002file.bz2 и т. д., содержащих извлеченные блоки. Имена выходных файлов разработаны таким образом, чтобы при последующей обработке с использованием подстановочных знаков, например, bzip2 -dc rec\*file.bz2 > recovered\_data, файлы обрабатывались в правильном порядке.

^ zip2recover наиболее полезен при работе с большими файлами .bz2, поскольку в них содержится много блоков. Бессмысленно использовать его для поврежденных файлов, содержащих только один блок, поскольку поврежденный блок не может быть восстановлен. Если вы хотите свести к минимуму возможную потерю данных из-за ошибок носителя или передачи, вы можете рассмотреть возможность сжатия с использованием меньшего размера блока.

ЗАМЕЧАНИЯ О ПРОИЗВОДИТЕЛЬНОСТИ

На этапе сортировки сжатия похожие строки в файле собираются вместе. Из-за этого файлы, содержащие очень длинные последовательности повторяющихся символов, такие как «aabaabaabaab…» (повторяется несколько сотен раз), могут сжиматься медленнее, чем обычно. Версии 0.9.5 и выше работают гораздо лучше, чем предыдущие версии. Отношение между худшим и средним временем сжатия составляет примерно 10:1. Для предыдущих версий это соотношение было больше, около 100:1. Вы можете использовать опцию -vvvv, чтобы отслеживать ход выполнения в мельчайших деталях, если хотите.

Скорость распаковки на это не влияет.

^ zip2 обычно выделяет несколько мегабайт памяти для работы, а затем использует ее довольно случайным образом. Это означает, что производительность как сжатия, так и распаковки в значительной степени определяется скоростью, с которой ваша машина может обслуживать промахи кэша. Из-за этого, даже небольшие изменения в коде, направленные на снижение частоты промахов кэша, показали непропорционально большие улучшения производительности. Я предполагаю, что bzip2 будет работать лучше всего на машинах с очень большим кэшем.

ОГРАНИЧЕНИЯ

Сообщения об ошибках ввода-вывода не такие информативные, как могли бы быть. bzip2 старается обнаруживать ошибки ввода-вывода и завершать работу без ошибок, но детали того, в чем заключается проблема, иногда кажутся довольно вводящими в заблуждение.

Эта страница руководства относится к версии 1.0.8 программы bzip2. Сжатые данные, созданные этой версией, полностью совместимы как с предыдущими, так и с будущими общедоступными версиями (версии 0.1pl2, 9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 и выше), за исключением следующего: версии 0.9.0 и выше могут правильно распаковывать несколько последовательно сжатых файлов. Версия 0.1pl2 не может этого делать; она остановится после распаковки только первого файла в потоке.


Версии bzip2recover до 1.0.2 использовали 32-битные целые числа для представления позиций битов в сжатых файлах, поэтому они не могли обрабатывать сжатые файлы размером более 512 мегабайт.
    Версии 0.2 и выше используют 64-битные целые числа на некоторых платформах, которые их поддерживают (поддерживаемые GNU платформы и Windows). Чтобы определить, была ли версия bzip2recover собрана с таким ограничением, запустите ее без аргументов. В любом случае вы можете самостоятельно собрать версию без ограничений, если сможете перекомпилировать ее с установкой MaybeUInt64 в качестве беззнакового 64-битного целого числа.

АВТОР

Джулиан Сьюард, _.

https://sourceware.org/bzip2/

Идеи, воплощенные в bzip2, принадлежат (по крайней мере) следующим людям: Майклу Берроузу и Дэвиду Уилеру (за преобразование блочной сортировки), Дэвиду Уилеру (снова, за кодировщик Хаффмана), Питеру Фенвику (за структурированную модель кодирования в исходном bzip и многочисленные улучшения) и Аластеру Моффату, Радфорду Нилу и Яну Виттену (за арифметический кодировщик в исходном bzip). Я очень благодарен им за их помощь, поддержку и советы. См. руководство в исходном дистрибутиве для получения ссылок на источники документации. Кристиан фон Рокес побудил меня искать более быстрые алгоритмы сортировки, чтобы ускорить сжатие. Бела Любкин посоветовал мне улучшить наихудшую производительность сжатия. Донна Робинсон преобразовала документацию в формат XML. Скрипты bz* основаны на скриптах GNU gzip. Многие люди отправляли исправления, помогали с проблемами переносимости, предоставляли машины, давали советы и вообще оказывали помощь.