¿Te ha gustado el artículo?
0
¿Te ha gustado el artículo?
0

Comprimir y descomprimir archivos como gzip o tar en Linux

El archivado de datos se basa en la idea fundamental de guardar ficheros o directorios por entero en un lugar seguro, a menudo en su forma comprimida. Por razones de seguridad, archivar datos en entornos de servidor siempre ha sido de gran importancia. En un comienzo, los datos de un servidor se copiaban en unidades de cinta magnética, algo que aún hoy en día es utilizado, especialmente para realizar copias de seguridad de grandes volúmenes de datos. Con el fin de potenciar la eficiencia de este proceso, en 1979 se desarrolló el programa de compresión de archivos tar (del inglés “tape archiver”=“archivador en cinta”) para sistemas UNIX, por medio del cual se comprimen ficheros y directorios en un solo archivo y se pueden recuperar desde este, aunque los permisos de usuario solo se mantienen si el origen y el destino soportan los derechos de archivo de UNIX.

Para ahorrar espacio adicional en disco durante el proceso de almacenamiento, los archivos .tar suelen comprimirse con herramientas como gzip, bzip2 o lzop. Ahora bien, ¿en qué se diferencian entre sí los diferentes programas de compresión de archivos y sus formatos? Y ¿por qué aún van de la mano tar y Linux hoy en día?

Los programas más populares para comprimir en Linux

Existe un gran número de herramientas gratuitas para comprimir archivos en Linux y todas ellas comparten una característica en común, que pueden ser manejadas desde la interfaz de línea de comandos, también llamada terminal o consola. Estas órdenes breves permiten crear fácilmente un archivo comprimido de, por ejemplo, documentos HTML, con el que ahorrar espacio en la memoria, así como ancho de banda durante su transferencia. Si no se está habituado a trabajar con la consola, también se puede recurrir a interfaces gráficas creadas para estas herramientas, así como a los denominados gestores de archivos, que combinan múltiples programas de compresión en una única interfaz -aunque deben estar también instalados en el sistema. Esta opción necesita, lógicamente, más recursos del sistema, por lo que comprimir archivos en Linux desde la interfaz de línea de comandos sigue siendo la opción más sencilla y asequible.

Los diferentes programas se diferencian entre sí por el grado de compresión, lo cual va ligado a una velocidad diferente, aunque, por lo general, es posible seleccionar diferentes modos dentro de cada herramienta con el fin de proporcionar, por ejemplo, un mejor rendimiento en cuanto a la memoria de almacenamiento o simplemente para comprimir archivos lo más rápidamente posible. Otra característica diferenciadora en los programas de compresión es el formato de salida. Debido a la variedad de algoritmos utilizados, los archivos comprimidos obtienen diferentes formatos y requieren el uso de diferentes programas para poder extraerlos.

gzip

gzip (GNU zip) es uno de los métodos más utilizados para comprimir en Linux. Especialmente relevante en el desarrollo web, gzip está basado en el algoritmo de deflación y fue desarrollado originariamente para la plataforma GNU como sucesoro del veterano compress. Gracias a diversas variantes, hoy esta aplicación programada en C puede no solo utilizarse para comprimir y descomprimir archivos en Linux, sino también en sistemas Windows y macOS.

Gzip genera bloques de datos de un tamaño de 32.000 bytes (32kB), lo que le ha llevado a quedarse algo obsoleto frente a programas de compresión más modernos.

En velocidad, por otro lado, este programa libre aventaja a todos los demás, razón por la cual los programas de servidor web más habituales como Apache, IIS o NGINX lo han implementado en forma de módulos propios con el objetivo de responder a las peticiones de los usuarios en el tiempo más breve posible con paquetes de archivos comprimidos. Si quieres saber más sobre el funcionamiento y el uso de esta herramienta de compresión GPL, dirígete a este artículo donde profundizamos en gzip.

Ventajas Inconvenientes
Alta velocidad de compresión Los bloques de datos tienen un tamaño reducido
Software estándar en los servidores web habituales Escaso grado de compresión

bzip2

bzip2, distribuido con una licencia similar a BSD, permite comprimir archivos en Linux sin pérdidas con una gran calidad. La aplicación utiliza una compresión en tres fases: primero tiene lugar una clasificación de los datos entrantes en diferentes bloques mediante la transformación de Burrows-Wheeler. Estos bloques, con un tamaño de hasta 900.000 bytes (900 kB), son sometidos a continuación a una transformación Move-to-front, para ser finalmente comprimidos utilizando la codificación de Huffman. Los archivos empaquetados con bzip2 obtienen la extensión .bz2.

El programa desarrollado por Julian Seward supera con creces a otras herramientas en cuanto a compresión, aunque requiere más tiempo que las demás para su ejecución. Una de sus grandes ventajas al descomprimir con bzip2 es que se puede trabajar, incluso, con archivos parcialmente dañados. Con el bzip2recover se pueden extraer al menos todos los bloques legibles y descomprimirlos a continuación.

Bzip2 es el sucesor oficial de bzip, que utilizaba la codificación aritmética, pero cuyo desarrollo no se pudo continuar por motivos de derechos de patente.

Ventajas Inconvenientes
Elevado grado de compresión Muy lento
Descompresión de archivos dañados (parcialmente)  

p7zip

En el caso de p7zip nos encontramos ante una adaptación para plataformas POSIX del programa libre de archivado 7-zip con licencia LGPL. La portabilidad representa la única solución para poder soportar el formato .7z en Linux. El programa recurre al algoritmo de cadena de Lempel-Ziv-Markov o LZMA, desarrollado en 1998 por Igor Wiktorowitsch Pawlow, que utiliza un método basado en diccionario y puede considerarse, en general, un desarrollo ulterior del algoritmo de deflación (alrededor de un 50 % más de compresión). El archivo creado se podría, en caso necesario, subdividir en partes de cualquier tamaño, protegerlas con contraseña y cifrarlas opcionalmente por AES de 256 bits (el encabezado).

Gracias a su elevada tasa de compresión, con el algoritmo Lempel-Ziv-Markow se obtienen resultados excelentes, además de sacar buena nota también en cuanto a velocidad. Sin embargo, como contrapartida, esta herramienta requiere mucha potencia, lo que tiene como consecuencia que, especialmente para fases de compresión más altas, sea necesario disponer de un buen procesador de mínimo 2 GHz y de memoria suficiente (2 GB o más).

Además de poder utilizarla en la interfaz de línea de comandos o con el gestor de archivos, con p7zip-gui 7-Zip cuenta también con una interfaz gráfica.

Ventajas Inconvenientes
Excelente proporción entre compresión y tiempo de ejecución Altas exigencias al sistema
Protección con contraseña y cifrado del encabezado opcionales  

lzop

El programa de compresión lzop (Lempel-Ziv-Oberhumer Packer) está especializado, como gzip, en la velocidad de la compresión y descompresión, llegando incluso a obtener mejores resultados que la herramienta libre. Su fundamento lo constituye el algoritmo de Lempel-Ziv-Oberhumer (LZO) que le da nombre, publicado en 1996 con una licencia GNU General Public.

Esta herramienta, no excesivamente exigente en cuanto a recursos del sistema, lleva a cabo una compresión por diccionario: aquellas secuencias de caracteres que se repiten se sustituyen por un símbolo que remite a la entrada en el diccionario de esa misma secuencia previamente registrada en él. Los datos se comprimen en bloques de 256.000 bytes (256 kB) y el archivo original se mantiene invariable por defecto.

Durante el desarrollo de lzop, además de la velocidad de compresión y la compatibilidad con gzip, también se trató de conseguir una elevada portabilidad. Este es el motivo por el que existen versiones para casi todas las plataformas, incluidos los sistemas macOS y Windows.

Los datos comprimidos con lzop obtienen la extensión .lzo.

Ventajas Inconvenientes
Compresión muy rápida Debido a su alta velocidad, el grado de compresión es menor
Elevada portabilidad  

Herramientas y formatos más habituales para comprimir en Linux

  gzip bzip2 p7zip lzop
Sistema operativo Multiplataforma Linux/Unix, Windows Sistemas Unix-like Multiplataforma
Licencia GNU GPL BSD GNU LGPL GNU GPL
Procedimiento de compresión Algoritmo de deflación Transformación de Burrows-Wheeler y Move-to-front, codificación de Huffman Algoritmo de LZMA Algoritmo de LZO
Formato de archivo .gz .bz2 .7z .lzo
Cifrado     AES de 256 bits  
Modos de compresión 1–9 1–9 0–9 1, 3, 7–9
Puntos fuertes Muy rápido Muy buen grado de compresión Grado de compresión excelente, se pueden comprimir directorios Muy rápido, se pueden comprimir directorios
Puntos débiles Solo se pueden comprimir archivos individuales Velocidad media, solo se pueden comprimir archivos individuales Emplea mucha potencia del sistema Grado de compresión débil

La tabla anterior revela que no existe la herramienta de empaquetado imprescindible y, además, que es importante considerar el escenario de aplicación a la hora de elegir el programa de compresión más adecuado. P7zip, por ejemplo, ofrece claras ventajas en términos de tasa de compresión, permitiendo, a la vez, el cifrado de datos AES de 256 bits, una característica altamente valorada en cualquier entorno donde la seguridad sea prioritaria. Adicionalmente, con p7zip, así como con lzop, es posible comprimir directorios completos, mientras que gzip y bzip2 solo permiten comprimir archivos independientes. Por otra parte, este tipo de ventajas exigen ciertos requisitos del sistema, una característica que hace de p7zip un programa menos adecuado para la compresión a menor escala.

Comprimir archivos en Linux: manual de uso

Los programas mencionados revelan grandes diferencias en lo que respecta a la tasa y a la velocidad de compresión, aunque, cuando se trata de su sintaxis y de su aplicación, saltan a la vista los elementos en común. Todas pueden utilizarse a través de la línea de comandos y no requieren necesariamente una interfaz gráfica o un gestor de archivos. Los más inexpertos, por su parte, se familiarizarán rápidamente con los diversos parámetros y comandos necesarios.

A modo de ejemplo, ilustramos a continuación cómo comprimir archivos con bzip2 y cómo descomprimirlos en .bz2.

La sintaxis general de bzip2 tiene la siguiente forma:

bzip2 opciones fichero(s)

Para una compresión estándar no es necesario indicar opciones. Estas son solo necesarias en caso de modificar la configuración de la compresión, abrir el menú general o querer descomprimir un archivo .bz2. Para comprimir el documento test.txt solo hace falta este comando:

bzip2 test.txt

Con él se elimina el documento original y se sustituye por el archivo comprimido test.txt.bz2. Si se desean comprimir varios archivos, es suficiente con escribirlos uno detrás del otro:

bzip2 test.txt test2.txt test3.txt

Para descomprimir un documento, solo hay que añadir la opción correspondiente (-d):

bzip2 -d test.txt

A continuación, presentamos un listado con el resto de comandos en bzip2:

Opción Descripción            
-1 … -9 Indica el grado de compresión en una escala del 1 al 9, donde 1 representa el más bajo y 9 el más alto. El valor establecido por defecto es el 5.            
-f Inicia la compresión, incluso en el caso de que ya exista un archivo .bz2 con el mismo nombre. En este caso, el archivo anterior se sobrescribe.            
-c Escribe el fichero comprimido en la salida estándar (stdout), generalmente el escritorio            
-q Bloquea todas las notificaciones de bzip2            
-v Muestra información adicional, como la tasa de compresión de cada archivo comprimido            
-t Comprueba la integridad del archivo seleccionado            
-k Añadiéndolo a un comando de compresión, el archivo original no se pierde            
-h Abre el menú general            

Tar y Linux: por qué es tan popular este programa de compresión

El programa de archivado tar se utiliza desde hace más de 30 años y su uso sigue estando vigente. Esto se debe, en parte, a que con esta herramienta el usuario conserva los derechos de uso, aun después del empaquetado, pero también a la posibilidad de comprimir directorios completos. Esta característica hace de tar el complemento perfecto de herramientas de compresión como gzip y bzip2, los cuales solo pueden comprimir archivos individuales.

En un primer paso, el programa reúne todos los archivos del directorio seleccionado en un único fichero, en el que los archivos se encadenan unos a otros sin ser modificados. A continuación, se lleva a cabo el empaquetado con la ayuda de un programa específico. Como resultado de este proceso, denominado empaquetamiento progresivo, pero también compacto o sólido, los archivos comprimidos reciben extensiones de formato como .tar.gz (.tgz) y tar.bz2 (.tbz2). El programa de compresión de archivos tar también puede descomprimir este tipo de archivos.

Cómo (des)comprimir archivos en Linux

No es obligatorio combinar tar con una herramienta de compresión, de tal modo que también es posible empaquetar diversos archivos sin comprimir en un único fichero. Si, por ejemplo, queremos empaquetar dos documentos no comprimidos, test.txt y test2.txt, en un solo archivo denominado archivo.tar, es suficiente con utilizar el siguiente comando:

tar -cf archivo.tar test.txt test2.txt

Para descomprimirlo, se substituye el parámetro -c, con el que se genera un archivo nuevo, por -x, con el que se extraen los archivos de un fichero comprimido. Si no se tiene que extraer un archivo específico, no hace falta indicar de qué archivos se trata:

tar -xf archivo.tar

Si se quiere comprimir un archivo ya comprimido, por ejemplo, con gzip, con la extensión de formato .tar.gz, tar también incluye la opción adecuada. Como el programa ha implementado opciones para la compresión y la descompresión con bzip2, xz, compress y gzip, es suficiente igualmente con un único comando:

tar -czf archivo.tar.gz test.txt test2.txt

La extracción de un archivo .tar.gz se diferencia de su equivalente para archivos no comprimidos, asimismo, en el parámetro del programa de compresión:

tar -xzf archivo.tar.gz
Consejo

el parámetro -f, con cuya ayuda se selecciona el archivo que queremos descomprimir, siempre se ha de indicar en la última posición, porque todos los caracteres que le siguen se interpretan como el nombre del archivo:

Los comandos más importantes para el archivado con tar en Linux

Además de estos comandos básicos que permiten el archivado de directorios, también existe una serie de parámetros que permiten especificar el proceso de compresión y extracción. Entre ellos se cuentan, por ejemplo, los mencionados métodos de compresión, pero también algunas opciones de configuración para directorios u opciones de comprobación y vista previa de los archivos tar, como muestra la siguiente tabla:

Opción Descripción
--help Abre el menú de tar
-c Crea un nuevo archivo
-d Permite comparar archivos en el directorio y en el sistema de archivos
-f Escribe los documentos seleccionados en un archivo con el nombre proporcionado; lee los datos del archivo con el nombre proporcionado
-j Comprime archivos con bzip2 o los extrae
-J Comprime archivos con xz o los extrae
-k Evita que, al extraerse un archivo, se sobrescriban los ficheros existentes
-p Se encarga de mantener los permisos de acceso en la extracción
-r Añade carpetas a un archivo ya existente
-t Muestra el contenido del archivo seleccionado
-u Agrega a un archivo solo aquellas carpetas más recientes que las versiones existentes
-x Extrae documentos de un archivo
-z Comprime archivos con gzip o los extrae
-Z Comprime archivos con compress o los extrae
-A Implementa el contenido de un archivo en otro diferente
-C Se cambia al directorio indicado para seguidamente descomprimir aquí el archivo seleccionado
-M Opción para depositar, mostrar o extraer un archivo con varias partes
-W Comprueba el archivo tras el proceso de archivado
Consejo

algunas opciones, como agregar carpetas a archivos existentes (-r) no funcionan con archivos comprimidos. Para poder hacerlo, se tienen que extraer antes.

Ejemplos:

Mostrar el contenido de un archivo:

tar -tf archivo.tar

Actualizar el contenido de un archivo (no tiene en cuenta los subdirectorios):

tar -uf archivo.tar documento(s)

Ampliar el contenido de un archivo:

tar -rf archivo.tar documento nuevo

Comparar el contenido de un archivo con el sistema de archivos (ejecutar en el directorio de archivos):

tar -dvf archivo.tar

File Roller: el gestor de archivos para GNOME

File Roller es una interfaz gráfica para diferentes herramientas de empaquetamiento y compresión que se ejecutan de forma predeterminada en la terminal. Este gestor de archivos está disponible para entornos de escritorio GNOME y Unity, y se distribuye desde 2001 bajo la licencia GNU GPL. File Roller permite visualizar el contenido de diferentes ficheros, así como extraer, añadir o eliminar archivos. También facilita la creación de nuevos archivos comprimidos o sin modificar, así como su conversión a otros formatos. Para este propósito, la ventana principal del programa cuenta con diferentes botones y menús, así como con la función drag and drop.

Además de los formatos de archivo tar, como .tar.gz, File Roller soporta los siguientes formatos:

  • .7z
  • .tar
  • .gzip
  • .bzip2
  • .ar
  • .jar
  • .cpio

Por defecto, File Roller está instalado en algunas de las distribuciones Linux, como Ubuntu, pero también puede ser instalado posteriormente con ayuda del gestor de paquetes o se puede descargar directamente desde su página web oficial. Una alternativa para el entorno de escritorio KDE es Ark.

Herramientas Sistemas Operativos Código Abierto Tutoriales