XZ Utils (anteriormente LZMA Utils ) es un conjunto de compresores de datos sin pérdida de línea de comandos de software gratuito , incluidos los programas lzma y xz, para sistemas operativos tipo Unix y, a partir de la versión 5.0, Microsoft Windows . Para la compresión/descompresión se utiliza el algoritmo de cadena Lempel-Ziv-Markov (LZMA). XZ Utils comenzó como una adaptación Unix del LZMA- SDK de Igor Pavlov que se ha adaptado para encajar perfectamente en entornos Unix y su estructura y comportamiento habituales.
XZ Utils puede comprimir y descomprimir los formatos de archivo xz y lzma . Dado que el formato LZMA se considera heredado , [2] XZ Utils comprime de forma predeterminada a xz.
En la mayoría de los casos, xz logra tasas de compresión más altas que alternativas como gzip y bzip2 . La velocidad de descompresión es mayor que bzip2, pero menor que gzip. La compresión puede ser mucho más lenta que gzip y es más lenta que bzip2 para altos niveles de compresión, y es más útil cuando un archivo comprimido se usará muchas veces. [3] [4]
XZ Utils consta de dos componentes principales:
xz
, el compresor y descompresor de línea de comandos (análogo a gzip )Existen varios atajos de comando, como lzma
(para xz --format=lzma
), unxz
(para xz --decompress
; análogo a gunzip
) y xzcat
(para unxz --stdout
; análogo a zcat
).
Tanto el comportamiento del software como las propiedades del formato del archivo han sido diseñados para funcionar de manera similar a las de las populares herramientas de compresión de Unix, gzip y bzip2 .
Al igual que gzip y bzip, xz y lzma solo pueden comprimir archivos individuales (o flujos de datos) como entrada. No pueden agrupar varios archivos en un solo archivo ; para ello, primero se utiliza un programa de archivo, como tar .
Comprimir un archivo:
xz my_archive.tar # resultados en my_archive.tar.xz
lzma my_archive.tar # resultados en my_archive.tar.lzma
Descomprimiendo el archivo:
unxz my_archive.tar.xz # resultados en my_archive.tar
unlzma my_archive.tar.lzma # resultados en my_archive.tar
La versión 1.22 o superior de la implementación GNU de tar tiene soporte transparente para archivos tar comprimidos con lzma y xz, usando los conmutadores --xz
o -J
para la compresión xz, y --lzma
para la compresión LZMA.
Creando un archivo y comprimiéndolo:
tar -c --xz -f mi_archivo.tar.xz /algún_directorio # da como resultado mi_archivo.tar.xz
tar -c --lzma -f mi_archivo.tar.lzma /algún_directorio # da como resultado mi_archivo.tar.lzma
Descomprimiendo el archivo y extrayendo su contenido:
tar -x --xz -f my_archive.tar.xz # da como resultado /algún_directorio
tar -x --lzma -f my_archive.tar.lzma # da como resultado /algún_directorio
Ejemplo de tar de una sola letra para archivar con compresión y descompresión con extracción usando un sufijo corto :
tar cJf keep.txz keep # archivo y luego comprime el directorio ./keep/ en el archivo ./keep.txz
tar xJf keep.txz # descomprime y luego extrae el archivo ./keep.txz creando el directorio ./keep/
xz admite la compresión multiproceso (con la -T
bandera) [5] desde 2014, versión 5.2.0; [6] desde la versión 5.4.0 se ha implementado la descompresión de subprocesos. La descompresión por subprocesos requiere múltiples bloques comprimidos dentro de una secuencia que se crean mediante la interfaz de compresión por subprocesos. La cantidad de subprocesos puede ser menor que la definida si el archivo no es lo suficientemente grande para subprocesos con la configuración dada o si el uso de más subprocesos excedería el límite de uso de memoria. [5]
El formato xz mejora a lzma al permitir filtros de preprocesamiento. Los filtros exactos utilizados son similares a los utilizados en 7z , ya que los filtros de 7z están disponibles en el dominio público a través del SDK de LZMA.
El desarrollo de XZ Utils se llevó a cabo dentro del Proyecto Tukaani, un pequeño grupo de desarrolladores que alguna vez mantuvieron una distribución de Linux basada en Slackware . La versión 1.0.0 de la especificación del formato de archivo .xz se lanzó oficialmente en enero de 2009 [7] .
Todo el código fuente de xz y liblzma ha sido liberado al dominio público . La distribución fuente de XZ Utils incluye además algunos scripts opcionales y un programa de ejemplo que están sujetos a varias versiones de la Licencia Pública General GNU (GPL). [1] Los binarios resultantes del software xz y liblzma son de dominio público, a menos que se incorpore la implementación opcional LGPL getopt . [8]
Los binarios están disponibles para FreeBSD , NetBSD , sistemas Linux , Microsoft Windows y FreeDOS . Varias distribuciones de Linux , incluidas Fedora , Slackware , Ubuntu y Debian, utilizan xz para comprimir sus paquetes de software. Arch Linux usaba anteriormente xz para comprimir paquetes, [9] pero a partir del 27 de diciembre de 2019, los paquetes se comprimen con compresión Zstandard . [10] Fedora Linux también cambió a comprimir sus paquetes RPM con Zstandard con Fedora Linux 31. [11] El archivo FTP de GNU también usa xz.
El 29 de marzo de 2024, Andrés Freund, un desarrollador de PostgreSQL que trabaja en Microsoft , anunció que había encontrado una puerta trasera en XZ Utils, que afectaba a las versiones 5.6.0 y 5.6.1. Se agregaron archivos de prueba comprimidos al código para configurar la puerta trasera mediante adiciones al script de configuración en los archivos tar . Comenzó su investigación porque "Después de observar algunos síntomas extraños en torno a liblzma (parte del paquete xz)", descubrió que los inicios de sesión sshsshd
estaban "consumiendo muchos errores de CPU y valgrind ". [12] La vulnerabilidad recibió una puntuación de 10 (la más alta) en el Sistema de puntuación de vulnerabilidad común (CVSS). [13]