2.9.1. Compresión

Los compresores más habituales en sistemas Linux son:

gzip (extensión asociada: .gz),

que se basa (al igual que el formato zip muy habitual en sistemas Windows) en la versión DEFLATE del algoritmo LZ77.

bzip2 (extensión asociada: .bz2 o .bzip2.),

que frente al anterior obtiene unos ratios de compresión mucho mayores a costa de penalizar mucho los tiempos de compresión y la descompresión.

xz (extensión asociada: .xz),

más moderno y que, comprimiendo aún más que bzp2, logra reducir enormemente sus tiempos de descompresión. Su extensión asociada habitual es .xz. Prácticamente, ha desplazado por completo a bzip2 en los usos a los que se destinaba este formato[1].

zstd (extensión asociada: .zst),

desarrollado por Facebook, se basa en la versión LZ4 de LZ77. Su propósito es competir en los mismos usos que gzip[2].

Para facilitar su uso, las cuatro órdenes tiene una interfaz de uso común.

2.9.1.1. Compresiones habituales

gzip

Su sintaxis básica, análoga a la del resto de compresores es la siguiente:

gzip [<opciones>] [archivo1 [archivo2 ...]]

y su modo de proceder, también. La orden:

$ gzip archivo.txt

Convierte el archivo original en el archivo comprimido archivo.txt.gz. Obsérvese, pues, que el original se pierde. Si pasamos varios archivos:

$ gzip archivo1.txt archivo2.txt

Obtendremos los archivos archivo1.txt.gz y archivo2.txt.gz comprimidos por separado, ya que la fusión de varios archivos en uno sólo es labor de empaquetación y la realiza un empaquetador como veremos más adelante (tar). Esto lo diferencia de herramientas de compresión típicas de los sistemas windows como zip o rar, que además de comprimir generan un archivo contenedor para poder incluir distintos archivos en uno sólo.

Las opciones más recurrentes de gzip son:

-1, … -9:

Indica el nivel de compresión desde 1, el nivel más bajo. a 9, el nivel más alto. Cuanto mayor sea el nivel de compresión más pequeño será el resultado, pero más costoso en procesador y tiempo llegar a él. Cuando no se indica ningún nivel explícitamente, se usa -6.

-c:

Comprime en la salida estándar. Esto permite tanto no perder el archivo original como cambiar el nombre del archivo resultante:

$ gzip -c archivo.txt > archivo.comprimido.txt.gz

La opción es obligada cuando no se comprime el contenido de un archivo, sino que al no indicarse ninguno como argumento, se toma el flujo de datos de la entrada estándar:

$ echo "Quiero comprimir esto" | gzip -c > frase.txt.gz
-t:

Comprueba la integridad de un archivo comprimido:

$ gzip -t frase.txt.gz
-l:

Devuelve el grado de compresión del archivo y los tamaños antes y después de la compresión:

$ gzip -l frase.txt.gz
-d

En vez de comprimir, descomprime. Por ejemplo:

$ gzip -dc frase.txt.gz
Quiero comprimir esto
$ gzip -d frase.txt.gz
$ cat frase.txt
Quiero comprimir esto

Para la labor de descompresión se puede usar también la variante gunzip.

gunzip

Equivale a gzip -d, y por tanto, se usa y admite los mismos comandos que gzip.

bzip2

Comprime archivos usando el algoritmo de Burrows-Wheeler. Los archivos comprimidos suelen marcarse con la extensión .bz2.

Su forma de funcionamiento y sintaxis son análogos a los de gzip con lo que no requiere explicaciones adicionales.

bunzip2

Equivale a bzip2 -d, y por tanto, se usa y admite los mismos comandos que bzip2.

xz

Comprime archivos usando el algoritmo LZMA. Los archivos comprimidos suelen marcarse con la extensión .xz.

Su forma de funcionamiento y sintáxis son análogos a los de gzip y bzip2 con lo que no requiere explicaciones adicionales.

unxz

Equivale a xz -d, y por tanto, se usa y admite los mismos comandos que xz.

zstd

La diferencia fundamental con el resto de órdenes es que comprime (o descomprime con -d) sin eliminar el original. Por tanto:

$ zstd archivo

creará el archivo archivo.zst sin que desaparezca archivo.

unzstd

Equivale a unzstd -d.

Nota

Existen, además, las órdenes zcat, bzcat, xzcat y zstdcat que descomprimen mostrando por la salida estándar el archivo comprimido a la manera en que lo haría cat con un archivo de texto. También existen los equivalentes a grep, more o less.

2.9.1.2. Otros compresores

Aunque lo habitual es usar alguno de los cuatro compresores arriba descritos, junto a tar para poder crear un único archivo contenedor, en linux están disponibles comandos para poder tratar archivos zip (para comprimir zip y para descomprimir unzip), archivos rar (para comprimir rar y para descomprimir unrar, aunque ambos están en la rama non-free) o archivos 7z (mediante el comando p7zip). No obstante, no es habitual usarlos y, por lo general, su uso se limita a descomprimir archivos que nos hayan podido proporcionar terceras personas en estos formatos.

Por supuesto, también existen herramientas gráficas, que permiten de forma sencilla elegir el formato entre todos los disponibles.

Notas al pie