Оригинальный автор(ы) | Лассе Коллин |
---|---|
Разработчик(и) | Проект Тукаани |
Стабильный релиз | 5.6.3 / 1 октября 2024 г. ( 2024-10-01 ) |
Репозиторий |
|
Написано в | С |
Операционная система | Кроссплатформенный |
Тип | Сжатие данных |
Лицензия |
|
Веб-сайт | tukaani.org/xz/ |
Расширение имени файла | .xz |
---|---|
Тип интернет-СМИ | приложение/x-xz |
Магическое число | FD 37 7A 58 5A 00 |
Разработано | Лассе Коллин Игорь Павлов |
Первоначальный выпуск | 14 января 2009 г. ( 2009-01-14 ) |
Последний релиз | 1.2.1 8 апреля 2024 г. ( 2024-04-08 ) |
Тип формата | Сжатие данных |
Открытый формат ? | Да |
Свободный формат ? | Да |
Веб-сайт | tukaani.org/xz/format.html |
XZ Utils (ранее LZMA Utils ) — это набор бесплатных программных командных строковых компрессоров данных без потерь , включая программы lzma и xz, для Unix-подобных операционных систем и, начиная с версии 5.0, Microsoft Windows . Для сжатия/распаковки используется алгоритм цепей Лемпеля–Зива–Маркова (LZMA). XZ Utils начинался как Unix-порт LZMA- SDK Игоря Павлова , который был адаптирован для бесшовного встраивания в среды Unix и их обычную структуру и поведение.
XZ Utils может сжимать и распаковывать форматы файлов xz и lzma . Поскольку формат LZMA считается устаревшим , [2] XZ Utils по умолчанию сжимает в xz.
В большинстве случаев xz достигает более высоких показателей сжатия, чем альтернативы, такие как zip , [3] gzip и bzip2 . Скорость распаковки выше, чем у bzip2, но ниже, чем у gzip. Сжатие может быть намного медленнее, чем у gzip, и медленнее, чем у bzip2 для высоких уровней сжатия, и наиболее полезно, когда сжатый файл будет использоваться много раз. [4] [5]
XZ Utils состоит из двух основных компонентов:
xz
, командный компрессор и декомпрессор (аналог gzip )Существуют различные сочетания клавиш для команд, такие как lzma
(для xz --format=lzma
), unxz
(для xz --decompress
; аналогично gunzip
) и xzcat
(для unxz --stdout
; аналогично zcat
).
Поведение программного обеспечения и свойства формата файла были разработаны так, чтобы работать аналогично популярным инструментам сжатия Unix gzip и bzip2 .
Так же, как gzip и bzip, xz и lzma могут сжимать только отдельные файлы (или потоки данных) в качестве входных данных. Они не могут объединять несколько файлов в один архив — для этого сначала используется программа архивации, например tar .
Сжатие архива:
xz my_archive.tar # результаты в my_archive.tar.xz
lzma my_archive.tar # результаты в my_archive.tar.lzma
Распаковка архива:
unxz my_archive.tar.xz # результаты в my_archive.tar
unlzma my_archive.tar.lzma # результаты в my_archive.tar
Реализация tar GNU версии 1.22 или выше имеет прозрачную поддержку tar-архивов, сжатых с помощью lzma и xz, с использованием ключей --xz
или -J
для сжатия xz, а также --lzma
для сжатия LZMA.
Создание архива и его сжатие:
tar -c --xz -f my_archive.tar.xz /some_directory # результат в my_archive.tar.xz
tar -c --lzma -f my_archive.tar.lzma /some_directory # результат в my_archive.tar.lzma
Распаковываем архив и извлекаем его содержимое:
tar -x --xz -f my_archive.tar.xz # результат в /some_directory
tar -x --lzma -f my_archive.tar.lzma # результат в /some_directory
Пример однобуквенного tar для архива со сжатием и распаковкой с извлечением с использованием короткого суффикса :
tar cJf keep.txz keep # архивировать, а затем сжать каталог ./keep/ в файл ./keep.txz
tar xJf keep.txz # распаковать, а затем извлечь файл ./keep.txz, создав каталог ./keep/
xz поддерживает многопоточное сжатие (с -T
флагом) [6] с версии 5.2.0 2014 года; [7] с версии 5.4.0 реализована потоковая распаковка. Поточная распаковка требует нескольких сжатых блоков в потоке, которые создаются интерфейсом потоковой компрессии. Количество потоков может быть меньше определенного, если файл недостаточно велик для потоковой обработки с заданными настройками или если использование большего количества потоков превысит лимит использования памяти. [6]
Формат xz улучшает lzma, позволяя использовать фильтры предварительной обработки. Точные используемые фильтры аналогичны тем, что используются в 7z , поскольку фильтры 7z доступны в открытом доступе через LZMA SDK.
Разработка XZ Utils проходила в рамках проекта Tukaani, небольшой группы разработчиков, которые когда-то поддерживали дистрибутив Linux на основе Slackware . Выбранное название «XZ» не является аббревиатурой, а, по-видимому, является случайным именем для компрессоров данных, поскольку нигде в официальной спецификации не упоминается значение «XZ». [8] Спецификация формата файла .xz версии 1.0.0 была официально выпущена в январе 2009 года. [9]
Весь исходный код для xz и liblzma был передан в общественное достояние . Исходный дистрибутив XZ Utils дополнительно включает некоторые дополнительные скрипты и пример программы, которые подпадают под действие различных версий GNU General Public License (GPL). [1] Полученное программное обеспечение xz и двоичные файлы liblzma являются общественным достоянием, если не включена дополнительная реализация LGPL getopt . [10]
Двоичные файлы доступны для FreeBSD , NetBSD , систем Linux , Microsoft Windows и FreeDOS . Ряд дистрибутивов Linux , включая Fedora , Slackware , Ubuntu и Debian , используют xz для сжатия своих программных пакетов. Arch Linux ранее использовал xz для сжатия пакетов, [11] но с 27 декабря 2019 года пакеты сжимаются с помощью сжатия Zstandard . [12] Fedora Linux также перешла на сжатие своих RPM-пакетов с помощью Zstandard в Fedora Linux 31. [13] Архив GNU FTP также использует xz.
29 марта 2024 года Андрес Фройнд, разработчик PostgreSQL , работающий в Microsoft , объявил, что он нашел бэкдор в XZ Utils, влияющий на версии 5.6.0 и 5.6.1. Сжатые тестовые файлы были добавлены в код для настройки бэкдора через дополнения к скрипту конфигурации в файлах tar . Он начал свое расследование, потому что «после наблюдения нескольких странных симптомов вокруг liblzma (часть пакета xz)», поскольку он обнаружил, что входы по sshsshd
с использованием «занимали много процессорного времени , ошибки valgrind ». [14] Уязвимость получила оценку Common Vulnerability Scoring System (CVSS) 10 (самая высокая). [15]
Например, я сжал каталог размером 37M, используя и xz, и zip. Размер файла zip составил 31M, в то время как файл xz после сжатия стал 16M