Команда bzip2

Команда bzip2 предназначена для сжатия данных без потерь с помощью соответствующей утилиты, использующей алгоритм Барроуза-Уилера. Целью использования данной утилиты является экономия дискового пространства. Упомянутый алгоритм позволяет достичь лучшей степени сжатия данных, чем тот, который реализован в рамках утилит gzip и zip, но зачастую худшей степени сжатия данных, чем тот, который реализован в рамках утилиты xz. Кроме того, на уровне декомпресии данных он является более ресурсоемким, чем алгоритм, который реализован в рамках утилиты xz. Последнее обстоятельство обуславливает переход пальмы первенства от утилиты bzip2 к утилите xz, но рассматриваемая утилита все еще активно используется и в некоторых случаях позволяет сэкономить больше дискового пространства, чем утилита xz.

Базовый синтаксис команды выглядит следующим образом:

$ bzip2 [параметры] <имена файлов>

Чаще всего bzip2 используется вообще без каких-либо параметров, причем в качестве аргументов может передаваться неограниченное количество имен файлов, которые следует сжать. По умолчанию оригинальные версии файлов заменяются на их сжатые версии с соответствующими метаданными (то есть, меткой времени модификации, правами доступа, именами владельца и группы владельцев и так далее). Если вас не устраивает такое положение дел, вы можете воспользоваться параметром -k для сохранения оригинальных версий файлов. Кроме того, вы можете использовать параметр -s для того, чтобы сэкономить оперативную память, но приготовьтесь к длительному ожиданию, ведь в этом случае скорость обработки данных снизится практически вдвое. Параметры из диапазона от -1 до -9 позволяют задать степень сжатия (от самой низкой до самой высокой соответственно), при этом  чем выше степень сжатия, тем больше системных ресурсов требуется утилите. Параметр -t предназначен для тестирования целостности сжатого файла и не оказывает какого-либо влияния на него (следует комбинировать его с параметром -v для подробного вывода). Параметр -d позволяет восстановить оригинальные версии  файлов с переданными именами на основе их сжатых версий.

Если же вам нужно создать архив с несколькими файлами внутри, одной утилиты bzip2 будет явно мало. Для этой цели также понадобится утилита tar, с помощью которой можно создать архив с файлами, после чего сжать этот архив с помощью утилиты bzip2. Например, вы можете использовать следующую последовательность команд для создания архива с именем archive.tar.bz2:

$ tar -cf archive.tar <имена файлов>
$ bzip2 archive.tar

Параметры -c и -f утилиты tar предназначены для указания на необходимость добавления всех файлов в один архив (-c) и чтения имени файла архива из следующего аргумента (-f). Альтернативным вариантом является замена последней команды на параметр -j утилиты tar, позволяющий автоматически сжать полученный архив с помощью bzip2:

$ tar -cfj archive.tar.bz2 <имена файлов>

Примеры использования

Сжатие одного файла

$ bzip2 text.txt

В результате оригинальный файл text.txt будет заменен на свою сжатую версию text.txt.bz2.

Одновременное сжатие нескольких файлов

$ bzip2 text1.txt text2.txt text3.txt

В этом случае также все оригинальные версии файлов (text1.txt, text2.txt, text3.txt) будут заменены на сжатые версии (text1.txt.bz2, text2.txt.bz2, text3.txt.bz2). Добавление нескольких файлов в единый файл архива будет рассмотрено ниже.

Сжатие одного файла с сохранением оригинала

$ bzip2 -k text.txt

Теперь оригинальный файл text.txt будет оставлен в директории вместе со сжатой версией text.txt.bz2.

Восстановление оригинальной версии файла из сжатой версии

$ bzip2 -d text.txt.bz2

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

Сжатие файла с указанием степени сжатия

Степень сжатия файла может регулироваться с помощью параметров из диапазона от -1 (минимальная) до -9 (максимальная). Ввиду того, что bzip2 осуществляет поблочную обработку данных из файлов, размер блока влияет на степень сжатия и необходимый для сжатия и восстановления объем оперативной памяти, причем каждый из упомянутых параметров соответствует размеру обрабатываемого блока данных (-1 — 100 КБ, -2 — 200 КБ и так далее). Команда для сжатия файла с минимальной степенью сжатия:

$ bzip2 -1 text.txt

С максимальной степенью сжатия:

$ bzip2 -9 text.txt

Для совместимости с gtzip параметр -1 может заменяться на параметр --fast, а параметр -9 — на параметр --best. По умолчанию bzip2 сжимает файлы с максимальной степенью сжатия.

Создание сжатого архива со всеми файлами из директории

$ tar -cfj etc.tar.bz2 /etc/

В результате будет создан архив etc.tar.bz2 с файлами из директории /etc/.

Проверка целостности сжатой версии файла

$ bzip2 -vt text.txt.bz2
  text.txt.bz2: ok

Для проверки целостности сжатых версий файлов используются контрольные суммы (CRC). В случае повреждения сжатой версии файла выводится сообщение об ошибке, в противном случае — лишь слово «ok».