Lzma-компрессия

Подавляющее большинство пользователей FOSS-систем хранят свои архивы в форматах tar.gz или tar.bz2. В том же виде распространяется и большинство ориентированных на них материалов — от исходных текстов программ до подборок документации. Сжатие методами gzip или bzip2 до недавнего времени преобладало и при создании дистрибутивных бинарных пакетов. Однако в последнее время появился резон изменить эту традицию. И таким резоном стал метод сжатия по алгоритму LZMA.

Сам по себе метод сжатия LZMA (Lempel-Ziv-Markov chain-Algorithm) существует достаточно давно: он был разработан нашим соотечественником Игорем Павловым с использованием достижений предшественников, разработавших алгоритмы LZ77, LZ78 и LZV -- что, впрочем, могло бы составить предмет отдельной истории, которую когда-нибудь кто-нибудь напишет.

А метод LZMA был задействован его автором в собственной же разработке -- утилите компрессии 7-Zip для Windows, быстро снискавшей славу несравненного “сжимателя” файлов. Инструментарий для разработки программ, использующих данный метод (LZMA SDK) распространялся сначала на условиях лицензии GPL, что позволяло использовать его в соответствующих проектах (например, в GNU tar). Однако в конце 2008 года Игорь Павлов превратил его в общественное достояние (Public Domain). Что, заметим в скобках, вовсе не повод забывать об имени автора и полагать эту разработку бесхозной халявой. Но что открывает возможности для использования LZMA, например, в BSD-системах и даже за пределами мира FOSS.

Впрочем, последний случай нас не интересует. А вот офоциальный порт LZMA Utils и её встраивание в тот же tar делает этот метод компрессии столь же простым и обыденным, как gzip или bzip2. И ныне эта возможность штатно присутствует во всех дистрибутивах Linux, которые ещё не покрыты паутиной времени, и во всех BSD-системах.

Так что теперь для применения LZMA-компрессии при создании tar-архива достаточно указать соответствующую опцию:

$ tar --create --lzma --file filename.tar.lzma path2/arch_dir

Или, в более употребимой простыми людьми краткой форме:

$ tar cJf filename.tar.lzma path2/arch_dir

где опция J и представляет собой алиас для полной формы -lzma. Если присваивать архивному файлу суффикс по правилам утилиты tar, опцию J можно заменить на a (что эквивалентно полной форме –auto-compress), обеспечивающей определение типа компрессии по “расширению” *.lzma.

Распаковка lzma-компрессированного архива выполняется в обратном порядке:

$ tar xJf filename.tar.lzma

или
$ tar xaf filename.tar.lzma
Более того, скажу по секрету: если архив именован по правилам, то можно опустить даже опцию –auto-compress — она и так будет задействована по умолчанию.

Метод LZMA вследствие эффективности копмрессии быстро нашёл себе применение в пакетировании дистрибутивных пакетов, о чём мы поговорим в соответствующем месте и в соответствующее время.


Содержание


Теги: