En este momento estás viendo Compresión de ficheros bzip2, gzip, xz y zip en GNU/Linux

Compresión de ficheros bzip2, gzip, xz y zip en GNU/Linux

Compresión de ficheros bzip2, gzip, xz y zip en GNU/Linux

La compresión de ficheros consiste en reducir el espacio que ocupa, o pesa, un determinado fichero. Esto es importante tanto para reducir el espacio que ocupará en disco, como para reducir la cantidad de datos que se enviarán por la red, optimizando la transmisión.

Para conseguir nuestro objetivo utilizaremos las herramientas tar, bzip2, gzip, xz y zip.

Sumario

  • Como funciona la compresión
  • Tipos de compresión
  • Las herramientas de compresión y archivo
  • Sistemas de compresión
  • Herramientas de compresión
  • bzip2, gzip y xz
  • Niveles de compresión
  • Herramientas de archivo
  • Ficheros zip

Como funciona la compresión

La compresión de ficheros es utilizada, generalmente, para reducir el espacio de almacenamiento o reducir el tamaño de los ficheros a transmitir por la red. Pero ¿como funciona?.

Herramienta de compresión de ficheros
Herramienta de compresión de ficheros

Básicamente consiste en el reemplazo de patrones repetitivos en los datos. Los algoritmos de compresión buscan patrones en el texto de un documento, como por ejemplo la preposición «de», la más usada en español. Para reducir el tamaño del documento significativamente, se reemplaza esta palabra y sus patrones comunes por un solo caracter, generalmente un caracter del alfabeto griego que no se usa en el resto del texto.

Podemos afirmar que los algoritmos de compresión tratan los datos de manera similar, pero de una forma más compleja.

Tipos de compresión

Los tipos de compresión a aplicar tienen que ver con el tipo de fichero a tratar. Según esto, establecemos los tipos de compresión en dos grupos.

Compresión sin pérdida «lossless» y compresión con pérdida «lossy».

La información contenida en un fichero comprimido con un algoritmo «lossless», podemos descomprimirla sin pérdida alguna, en su forma original.

No es el caso de los ficheros comprimidos con un algoritmo «lossy», ya que los datos reducidos para la compresión, no pueden ser recuperados. Este tipo de compresión se utiliza para imágenes, video y audio, donde la pérdida de calidad no es perceptible para los humanos, es irrelevante para el contexto, o es importante para optimizar el rendimiento de la red.

Por ejemplo, en un fichero de audio, si eliminamos las frecuencias de sonido que no son perceptibles por el oído humano, reducimos el peso del fichero sin que notemos diferencia alguna en la reproducción. O reduciendo el número de colores de un fichero de imagen.

Las herramientas de compresión y archivo

En los sistemas GNU/Linux, se suelen utilizar las herramientas de archivo y compresión conjuntamente.

Las «archiving tools», o herramientas de archivo, se utilizan para agrupar ficheros y directorios en un único fichero y aumentar la eficiencia en las copias de seguridad o en la agrupación del código fuente.

La herramienta de archivo más común en sistemas GNU/Linux es «tar», que ya hemos visto en este blog «Compress, un programa para hacer paquetes tar».

Esta herramienta, por sí sola, únicamente crea un fichero que agrupa otros ficheros y directorios, y la tenemos disponible en la gran mayoría de distribuciones. Normalmente estos paquetes de datos, después se comprimen creando un «tarball».

Sistemas de compresión

Encontramos muchas herramientas de compresión en los sistemas UNIX, las más utilizadas son bzip2, gzip, y xz. Las tenemos disponibles en casi todos las distribuciones, aunque pueden existir sistemas antiguos o mínimos donde xz o bzip no estén instalados.

Los usuarios de sistemas GNU/Linux utilizamos las tres herramientas, según convenga. Las tres usan algoritmos diferentes, por lo que un fichero comprimido con una herramienta no puede ser descomprimido por otra diferente.

También nos permiten establecer diferentes niveles de compresión, pero hay que tener en cuenta que, a mayor compresión, más tardará el proceso de compresión y descompresión, al requerir mayor tiempo de procesamiento la búsqueda de patrones más complejos.

Sistemas de compresión vistos en este artículo
Sistemas de compresión vistos en este artículo

Estas herramientas libres, no están disponibles para los sistemas MSWindows. En estos sistemas, las herramientas de archivo y compresión están juntas, más adelante las veremos (zip y unzip). De todas formas será una cuestión a tener muy en cuenta si tenemos sistemas GNU/Linux y MSWindows que necesiten compartir ficheros.

Para facilitar las cosas, aunque la mayoría de los sistemas no tienen zip y unzip instaladas, las podemos instalar desde los repositorios fácilmente.

Herramientas de compresión

Cuando comprimimos un fichero, la cantidad de espacio en disco que ahorraremos dependerá de varios factores, la naturaleza de los datos que se comprimen, el algoritmo utilizado para comprimir los datos y el nivel de compresión. Pero no siempre podremos establecer diferentes niveles de compresión, ya que no todos los algoritmos los implementan.

bzip2, gzip y xz

Vemos unos casos prácticos para ver su uso y compararlos. Creamos unos directorios para pruebas, y unos ficheros.

mkdir ~/CompresionPruebas
cd /CompresionPruebas
mkdir Compresion Archivo
cd Compresion
Creamos unos directorios para pruebas
Creamos unos directorios para pruebas

Y un fichero del que hacemos tres copias.

cat /etc/* > FichGrande 2>/dev/null
cp FichGrande FichGrande2
cp FichGrande FichGrande3
cp FichGrande FichGrande4
Creamos unos ficheros en nuestra estructura
Creamos unos ficheros en nuestra estructura

Vemos que la sintaxis de las herramientas es la misma. Comprimimos cada fichero con una herramienta…

bzip2 FichGrande2
gzip FichGrande3
xz FichGrande4
Comprimimos cada uno con un algoritmo
Comprimimos cada uno con un algoritmo

Observamos la salida del comando «ls -lh» y vemos el tamaño inicial del fichero «FichGrande» sin comprimir. También comprobamos que cada herramienta ha añadido una extensión al nombre del fichero, lo que nos permite identificarlas, y que el fichero original, en cada caso, ha sido borrado.

Ahora que las hemos identificado podemos comprobar el nivel de compresión de cada una de ellas.

Para el proceso de descompresión tenemos que ejecutar los siguientes comandos, en cada caso.

bunzip2 FichGrande2.bz
gunzip FichGrande3.gz
unxz FichGrande4.xz

Comprobamos que el tamaño de los ficheros es el mismo. No hay pérdida. Y los ficheros iniciales comprimidos han sido borrados.

Descompresión de ficheros
Descompresión de ficheros

Niveles de compresión

Algunas de estas herramientas nos permiten establecer diferentes niveles de compresión. Un nivel más alto de compresión requerirá más tiempo de procesador y más memoria, pero el resultado es un fichero más pequeño. Lo vemos con unos ejemplos con las herramientas xz y gzip.

gzip

Utilizamos un nivel 1 y 9 de compresión con gzip

cp FichGrande FichGrande-gz1 
cp FichGrande FichGrande-gz9
gzip -1 FichGrande-gz1 
gzip -9 FichGrande-gz9
Establecemos niveles de compresión gz
Establecemos niveles de compresión gz

xz

Utilizamos un nivel 1 y 9 de compresión con xz

cp FichGrande FichGrande-xz1 
cp FichGrande FichGrande-xz9
xz -1 FichGrande-xz1 
xz -9 FichGrande-xz9
ls -lh
Establecemos niveles de compresión xz
Establecemos niveles de compresión xz

No es necesario descomprimir un fichero comprimido cada vez que se necesite. Las herramientas de compresión, normalmente incluyen versiones de herramientas estandar para leer ficheros de texto, por ejemplo gzip dispone de una versión de cat, grep, diff, less, more, etc…, solo hay que añadir el prefijo.

  • gzip, utilizan el prefijo z
  • bzip2, utilizan el prefijo bz
  • xz, utilizan el prefijo xz

Para ver el contenido de un fichero comprimido con gzip, utilizamos la herramienta zcat. Le paso el filtro head para que muestre las 20 primeras líneas.

zcat FichGrande-gz1.gz
Consultamos el contenido
Consultamos el contenido

Herramientas de archivo

Ya hemos definido lo que hace una herramienta de archivo. En los sistemas GNU/Linux, la más utilizada es tar, abreviatura de «tape archive», por ello los ficheros resultantes se llaman «tarball». En este formato se suele distribuir el código fuente de los programas.

El comando tar tiene muchas opciones que podemos explorar ejecutando

man tar
Manual de la herramienta tar
Manual de la herramienta tar

Vemos su funcionamiento con unos ejemplos prácticos, siguiendo con la estructura de directorios creada. Ejecutamos el comando, indicando como primer argumento, el nombre del fichero a crear, y los demás argumentos con los ficheros a incluir después.

cd ~/CompresionPruebas/Compresion
ls
tar -czvf NuevoPaquete.tar.gz FichGrande2 FichGrande3 FichGrande4 
Creamos un paquete .tar
Creamos un paquete .tar

En la salida nos indica los ficheros incluidos. Nos ha creado «NuevoPaquete.tar.gz», y vemos que está archivado y comprimido

Con la opción -t vemos el contenido

tar -tf fichero
Vemos el contenido de un paquete tar sin extraerlo
Vemos el contenido de un paquete tar sin extraerlo

Y para desempaquetarlo, primero borramos los ficheros originales que están en el paquete

rm FichGrande2 FichGrande3 FichGrande4
tar -xzvf NuevoPaquete.tar.gz
Extraemos el contenido de un paquete tar
Extraemos el contenido de un paquete tar

Las opciones utilizadas son

  • -c, –create, Para crearlo
  • -x, –extract, Para extraer el contenido
  • -z, –gzip, –gunzip, –ungzipz, Elegir la herramienta de compresión
  • -v, –verbose, Para listar los ficheros procesados
  • -f, –file, Para indicar el nombre del fichero
  • -t, –list, Muestra el contenido de un fichero

Otras opciones interesantes

  • -u, –update, Para añadir ficheros
  • -w, –interactive, –confirmation, Nos pregunta confirmación de cada acción

La herramienta tar también nos permite elegir el algoritmo de compresión, llamando a alguna de las herramientas vistas, con las siguientes opciones.

  • bzip2, opción -j
  • xz, opción -J
  • gzip, opción -z

Lo vemos con unos ejemplos. Utilizando las opciones antes vistas, usamos diferentes algoritmos.

cd ~/CompresionPruebas/Compresion
ls -l
tar -czvf FichGrande2.gz FichGrande2
tar -cjvf FichGrande3.bz FichGrande3
tar -cJvf FichGrande4.xz FichGrande4
Cada fichero comprimido con diferente algoritmo
Cada fichero comprimido con diferente algoritmo

Como vemos en la captura anterior, los ficheros .gz, .bz y .xz, tienen diferentes tamaños al ser comprimidos con diferentes algoritmos y se han añadido extensiones al nombre del fichero para identificarlo.

Ficheros zip

Como hemos comentado, los sistemas MSWindows, no disponen de aplicaciones para manejar ficheros .tar ni de las propias de sistemas GNU/Linux, para compresión de ficheros. Por ello si necesitas compartir ficheros en tu red con un sistema MSWindows, puedes utilizar una herramienta común como ZIP. Los ficheros .zip son similares a los .tar comprimidos.

Es posible que tengas que instalar zip y unzip en tu sistema GNU/Linux, pero las encontrarás en los repositorios de casi todas las distribuciones.

El uso es muy sencillo. Lo vemos.

cd ~/CompresionPruebas/Compresion
ls -lh

Para empaquetar estos ficheros y comprimirlos, utilizamos zip como sigue

zip Fichero.zip FichGrande2 FichGrande3 FichGrande4
Creamos un fichero zip con tres ficheros
Creamos un fichero zip con tres ficheros

Se utiliza la opción -r para añadir recursividad y que se incluyan los subdirectorios. Para descomprimirlo, ejecuta

unzip Fichero.zip
Extraemos el contenido de un fichero zip
Extraemos el contenido de un fichero zip

Nos pregunta si queremos reemplazar el fichero existente o renombrarlo.

Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.

Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.

Y para suscribirte y recibir las novedades publicadas, tienes un enlace en pie de la página o desde aquí mismo.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.