bunzip2 - справочное руководство, опции, примеры команд


ИМЯ

bunzip2 - файловый компрессор с блочной сортировкой, v1.0.8

СИНТАКСИС

bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ]


bunzip2 [ -fkvsVL ] [ filenames ... ]
bzcat [ -s ] [ filenames ... ]
bzip2recover filename

ОПИСАНИЕ

bzip2, bunzip2

файловый компрессор с блочной сортировкой

bzcat

распаковывает файлы в стандартный вывод

bzip2recover

восстанавливает данные из поврежденных файлов bzip2

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

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

bzip2 ожидает, что список имен файлов будет сопровождать флаги командной строки. Каждый файл заменяется сжатой версией самого себя с именем «original_name.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.

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

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

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

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

bzip2 будет считывать аргументы из переменных среды 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 увеличивают уровень детализации, извергая много информации, которая в первую очередь представляет интерес для диагностических целей.

-L --license -V --version

Отображение версии программного обеспечения, условий лицензии.

-1 (or --fast) to -9 (or --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 до 900 000 байт (по умолчанию) соответственно. Во время распаковки размер блока, используемого для сжатия, считывается из заголовка сжатого файла, а затем bunzip2 выделяет себе ровно столько памяти, сколько нужно для распаковки файла. Поскольку размеры блоков хранятся в сжатых файлах, флаги от -1 до -9 не имеют значения и игнорируются при распаковке.

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

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

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

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

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

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

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

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

Сжать Распаковать Распаковать Корпус Флаг использования Использование -s Использование Размер

-1 1200k 500k 350k 914704 -2 2000k 900k 600k 877703 -3 2800k 1300k 850k 860338 -4 3600k 1700k 1100k 846899 -5 4400k 2100k 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, поэтому поврежденные блоки можно отличить от неповрежденных.

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

bzip2recover принимает единственный аргумент, имя поврежденного файла, и записывает ряд файлов "rec00001file.bz2", "rec00002file.bz2" и т. д., содержащих извлеченные блоки. Имена выходных файлов спроектированы таким образом, чтобы использование подстановочных знаков при последующей обработке, например, «bzip2 -dc rec*file.bz2 > восстановленные_данные», обрабатывало файлы в правильном порядке.

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

ПРИМЕЧАНИЯ ПО ЭКСПЛУАТАЦИИ

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

Эти явления не влияют на скорость декомпрессии.

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

ПРЕДОСТЕРЕЖЕНИЯ

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

Эта страница руководства относится к версии 1.0.8 bzip2. Сжатые данные, созданные этой версией, полностью совместимы с предыдущими общедоступными версиями, версиями 0.1pl2, 0.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 мегабайт. Версии 1.0.2 и выше используют 64-битные целые числа на некоторых платформах, которые их поддерживают (поддерживаемые цели GNU и Windows). Чтобы установить, был ли bzip2recover собран с таким ограничением, запустите его без аргументов. В любом случае вы можете создать себе неограниченную версию, если сможете перекомпилировать ее с MaybeUInt64, установленным как 64-битное целое число без знака.

АВТОР

Джулиан Сьюард, jseward@acm.org.

https://sourceware.org/bzip2/

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