Cómo comprimir y descomprimir archivos con Gzip en Linux

Terminal Linux sobre un fondo rojo.
fatmawati achmad zaenuri/Shutterstock.com

Existen muchas utilidades de compresión de archivos , pero la que seguramente encontrará en todas las distribuciones de Linux es gzip. Si solo aprende a usar una herramienta de compresión, debería ser gzip.

Algoritmos y árboles

La gzipherramienta de compresión de datos se escribió a principios de la década de 1990 y todavía se encuentra en todas las distribuciones de Linux. Hay otras herramientas de compresión disponibles, pero no importa en qué computadora Linux necesite trabajar, las encontrará gzip. Entonces, si sabe cómo usar gzip, está listo para comenzar sin la necesidad de instalar nada.

gzipes una implementación del algoritmo DEFLATE que fue inventado y patentado por  Phil Katz  de  PKZIP  . El algoritmo DEFLATE mejoró los algoritmos de compresión anteriores que operaban con variaciones de un tema. Los datos que se van a comprimir se escanean y las cadenas únicas se identifican y agregan a un árbol binario.

A las cadenas únicas se les asigna un identificador único en virtud de  su posición en el árbol . Los tokens se utilizan para reemplazar las cadenas en los datos y, debido a que los tokens son más pequeños que los datos que reemplazaron, el archivo se comprime. Al sustituir los tokens por las cadenas originales, los datos vuelven a inflarse a su estado sin comprimir.

El algoritmo DEFLATE agregó el giro de que a las cadenas encontradas con más frecuencia se les asignaban los tokens más pequeños y a las cadenas encontradas con menos frecuencia se les asignaban las más grandes. El algoritmo DEFLATE también incorporó ideas de dos métodos de compresión anteriores,  la codificación Huffman  y  la compresión LZ77 .

En el momento de escribir este artículo, el algoritmo DEFLATE tiene casi tres décadas de antigüedad. Hace tres décadas, los costos de almacenamiento de datos eran altos y las velocidades de transmisión eran lentas. La compresión de datos era de vital importancia.

El almacenamiento de datos es mucho más barato hoy en día, y las velocidades de transmisión son mucho más rápidas. Pero tenemos muchos más datos para almacenar y, en todo el mundo, las personas acceden a los servicios de transmisión y almacenamiento en la nube . La compresión de datos sigue siendo de  vital  importancia, incluso si todo lo que está haciendo es reducir algo que necesita cargar o transmitir, o si está tratando de recuperar algo de espacio en un disco duro local .

El comando gzip

Cuanto más grande es un archivo, mejor puede ser la compresión. Esto es por dos razones. Una es que habrá muchas secuencias de bytes idénticas y repetidas a lo largo de un archivo grande. La segunda razón es que la lista de cadenas y tokens debe almacenarse en el archivo comprimido para que pueda realizarse la descompresión. Con un archivo muy pequeño, esa sobrecarga puede acabar con los beneficios de la compresión. Pero incluso con un archivo bastante pequeño, es probable que haya alguna reducción de tamaño.

Relacionado:  ¿Qué es la minería criptográfica y cómo funciona?

Comprimir un archivo

Para comprimir un archivo, todo lo que necesita hacer es pasar el nombre del archivo al gzipcomando. Verificaremos el tamaño original del archivo, lo comprimiremos y luego verificaremos el tamaño del archivo comprimido.

ls -lh calc-sheet.ods
hoja de cálculo gzip.ods
ls -lh cal-*

Comprimir una hoja de cálculo

El archivo original, una hoja de cálculo llamada «calc-sheet.ods» tiene 11 KB, y el archivo comprimido, también conocido como archivo de almacenamiento, tiene 9,3 KB. Tenga en cuenta que el nombre del archivo de almacenamiento es el nombre del archivo original con «.gz» adjunto.

El primer uso del lscomando apunta a un archivo específico, la hoja de cálculo. El segundo uso de lsbusca todos los archivos que comienzan con «calc-«, pero solo encuentra el archivo comprimido. Esto se debe a que, de forma predeterminada, gzipcrea el archivo de almacenamiento y elimina el archivo original.

Eso no es un problema. Si necesita el archivo original, puede recuperarlo del archivo de almacenamiento. Pero si prefiere conservar el archivo original, puede utilizar la -kopción (conservar).

gzip -k calc-sheet.ods
ls -lh hoja de cálculo.*

Comprimir un archivo y conservar el archivo original

Esta vez se conserva el archivo ODS original.

Descomprimir un archivo

Para descomprimir un archivo de almacenamiento GZ, use la -dopción (descomprimir). Esto extraerá el archivo comprimido del archivo y lo descomprimirá para que no se distinga del archivo original.

ls hoja de cálculo.*
gzip -d calc-sheet.ods.gz
ls hoja de cálculo.*

Descomprimir un archivo con gzip

Esta vez, podemos ver que gzipha eliminado el archivo comprimido después de extraer el archivo original. Para conservar el archivo comprimido, debemos usar la -kopción (mantener) nuevamente, así como la -dopción (descomprimir).

ls hoja de cálculo.*
gzip -d calc-sheet.ods.gz
ls hoja de cálculo.*

Descomprimir un archivo y conservar el archivo de almacenamiento

Esta vez, gzip no elimina el archivo comprimido.

Relacionado:  Revisión de Razer Basilisk V3: comodidad de alta calidad

Descompresión y sobreescritura

Si intenta extraer un archivo en un directorio donde existe el archivo original, o un archivo diferente con el mismo,   gzip  se le pedirá que elija abandonar la extracción o sobrescribir el archivo existente.

gzip -d archivo-de-texto.txt.gz

Sobrescribir solicitud de gzip cuando el archivo en el archivo ya existe en el directorio

Si sabe de antemano que está feliz de tener el archivo en el directorio sobrescrito por el archivo del archivo comprimido, use la opción -f (forzar).

gzip -df archivo-texto.txt.gz

Forzar la sobrescritura de un archivo existente

El archivo se sobrescribe y vuelve silenciosamente a la línea de comandos.

Comprimir árboles de directorios

La -ropción (recursiva) hace gzipque se compriman los archivos en un árbol de directorios completo. Pero el resultado puede no ser el esperado.

Aquí está el árbol de directorios que vamos a usar en este ejemplo. Cada directorio contiene un archivo de texto.

árbol nivel1

Estructura de árbol de directorios de prueba

Usemos gzipen el árbol de directorios y veamos qué sucede.

gzip -r nivel1/
árbol nivel1

Estructura del directorio después de ejecutar gzip en él

El resultado es que se gzipha creado un archivo de almacenamiento para cada archivo de texto en la estructura de directorios. No creó un archivo de todo el árbol de directorios. De hecho, gzipsolo puede poner un solo archivo en un archivo.

Podemos crear un archivo de almacenamiento que contenga un árbol de directorios y todos sus archivos, pero necesitamos poner en juego otro comando. El tarprograma se usa para crear archivos de muchos archivos, pero no tiene sus propias rutinas de compresión. Pero al usar las opciones apropiadas con tar, podemos hacer  tar que se transfiera el archivo comprimido  gzip. De esa forma obtenemos un archivo comprimido y un archivo de varios archivos o varios directorios.

tar -czvf nivel1.tar.gz nivel1

Las taropciones son:

  • c : Crear un archivo.
  • z : Empuje los archivos a través de gzip.
  • v : Modo detallado. Imprime en la ventana de la terminal lo que tarestá haciendo.
  • f level1.tar.gz : Nombre de archivo a usar para el archivo de almacenamiento.
Relacionado:  Cómo habilitar el modo de bajo consumo en Mac

Salida de tar abriéndose camino a través del árbol de directorios

Esto archiva la estructura del árbol de directorios y todos los archivos dentro del árbol de directorios.

Obtener información sobre archivos

La -lopción (lista) proporciona información sobre un archivo de almacenamiento. Le muestra los tamaños comprimidos y sin comprimir del archivo en el archivo, la relación de compresión y el nombre del archivo.

gzip -l nivel1.tar.gz
gzip -l archivo-de-texto.txt.gz

Uso de la opción -l list para ver las estadísticas de compresión de un archivo

Puede verificar la integridad de un archivo comprimido con la -topción (prueba).

gzip -t nivel1.tar.gz

Probar un archivo con la opción -t

Si todo va bien, volverás silenciosamente a la línea de comandos. La ausencia de malas noticias son buenas noticias.

Si el archivo está corrupto o no es un archivo, se le informa al respecto.

gzip -t no-un-archivo.gz

Usar la opción -t para probar un archivo que no es un archivo

Velocidad frente a compresión

Puede elegir priorizar la velocidad de creación del archivo o el grado de compresión. Para ello, proporcione un número como opción, desde -1arriba -9. La -1opción brinda la velocidad más rápida sacrificando la compresión y -9brinda la compresión más alta sacrificando la velocidad.

A menos que proporcione una de estas opciones, gzip usa -6.

gzip -1 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -9 calc-sheet.ods
ls -lh calc-sheet.ods.gz
gzip -6 calc-sheet.ods
ls -lh calc-sheet.ods.gz

Uso de gzip con diferentes prioridades de velocidad y compresión

Con un archivo tan pequeño como este, no vimos ninguna diferencia significativa en la velocidad de ejecución, pero hubo una pequeña diferencia en la compresión.

Curiosamente, no hay diferencia entre usar compresión de nivel 9 y compresión de nivel 6. Solo puede exprimir tanta compresión de un archivo determinado y, en este caso, ese límite se alcanzó con la compresión de nivel 6. Subirlo a 9 no trajo más reducción en el tamaño del archivo. Con archivos más grandes , la diferencia entre el nivel 6 y el nivel 9 sería más pronunciada.

Comprimido, No Protegido

No confunda la compresión con el cifrado o cualquier forma de protección. Comprimir un archivo no le otorga seguridad ni privacidad mejorada. Cualquier persona con acceso a su archivo puede usarlo gzippara descomprimirlo.