XZ Utils

Программное обеспечение для сжатия данных без потерь
XZ Utils
Оригинальный автор(ы)Лассе Коллин
Разработчик(и)Проект Тукаани
Стабильный релиз
5.6.3 / 1 октября 2024 г. ; 3 месяца назад ( 2024-10-01 )
Репозиторий
  • github.com/tukaani-project/xz
Написано вС
Операционная системаКроссплатформенный
ТипСжатие данных
Лицензия
Веб-сайтtukaani.org/xz/
.xz
Расширение имени файла
.xz
Тип интернет-СМИ
приложение/x-xz
Магическое числоFD 37 7A 58 5A 00
РазработаноЛассе Коллин
Игорь Павлов
Первоначальный выпуск14 января 2009 г. ; 15 лет назад ( 2009-01-14 )
Последний релиз
1.2.1
8 апреля 2024 г. ; 9 месяцев назад ( 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 состоит из двух основных компонентов:

Существуют различные сочетания клавиш для команд, такие как 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

Формат 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]

Ссылки

  1. ^ ab Лицензирование на tukaani.org "Наиболее интересные части XZ Utils (например, liblzma) находятся в общественном достоянии. Вы можете делать все, что захотите, с частями, находящимися в общественном достоянии. Некоторые части XZ Utils (например, система сборки и некоторые утилиты) находятся под различными лицензиями свободного программного обеспечения, такими как GNU LGPLv2.1, GNU GPLv2 или GNU GPLv3."
  2. ^ LZMA Util , получено 25.01.2011
  3. ^ Vivek, Gite. "Как сжать весь каталог с помощью xz и tar в Linux". Например, я сжал каталог размером 37M, используя и xz, и zip. Размер файла zip составил 31M, в то время как файл xz после сжатия стал 16M
  4. ^ Генри-Стокер, Сандра (12.12.2017). «Как выжать максимум из сжатия файлов в Linux». Network World . Получено 09.02.2020 .
  5. ^ "Сравнение производительности Gzip, Bzip2 и XZ". RootUsers . 2015-09-16 . Получено 2020-02-09 .
  6. ^ ab "xz, unxz, xzcat, lzma, unlzma, lzcat – Сжатие и распаковка файлов .xz и .lzma". Linux Manpages Online .
  7. ^ "Заметки о выпуске XZ Utils". git.tukaani.org .
  8. ^ "Официальная спецификация XZ". tukaani.org . Лассе Коллин . Получено 8 октября 2024 г. .
  9. ^ Лассе Коллин (28.01.2009). «Новости: спецификация формата файла .xz версии 1.0.0 теперь официально выпущена».
  10. ^ «В каких случаях вывод программы GPL также подпадает под действие GPL?». GNU.org . Получено 21 августа 2019 г.
  11. ^ Пьер Шмитц (23.03.2010). «Новости: Переход на сжатие xz для новых пакетов».
  12. ^ "Arch Linux - Новости: Теперь для сжатия пакетов используется Zstandard вместо xz". www.archlinux.org . Получено 07.01.2020 .
  13. ^ Мах, Дэниел. "Изменение/переключение RPM на сжатие zstd". Fedora Project Wiki . Получено 30 марта 2024 г.
  14. ^ "oss-security - бэкдор в upstream xz/liblzma, ведущий к компрометации сервера ssh". www.openwall.com . Получено 2024-04-08 .
  15. ^ "Бэкдор в xz". LWN.net . Получено 2024-03-30 .
Взято с "https://en.wikipedia.org/w/index.php?title=XZ_Utils&oldid=1264547555"