Cómo comprimir y descomprimir archivos con Gzip en Linux

Hay muchas utilidades de compresión de archivos, pero la que está garantizado que encontrará en cada distribución de Linux es gzip
. Si solo aprende a usar una herramienta de compresión, debería ser gzip
.
RELACIONADA: ¿Cómo funciona la compresión de archivos?
Algoritmos y árboles
Él gzip
La herramienta 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, encontrará gzip
en eso. Así que si sabes cómo usar gzip
estás listo para irte sin necesidad de instalar nada.
gzip
es 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 token de ID único en virtud de su posición en el árbol. Los tokens se usan 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 vitalmente importante, 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.
Compresión de archivos
Para comprimir un archivo, todo lo que necesita hacer es pasar el nombre del archivo al gzip
dominio. Verificaremos el tamaño original del archivo, lo comprimiremos y luego verificaremos el tamaño del archivo comprimido.
ls -lh calc-sheet.ods
gzip calc-sheet.ods
ls -lh cal-*
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 de la ls
El comando apunta a un archivo específico, la hoja de cálculo. El segundo uso de ls
busca todos los archivos que comienzan con "calc-", pero solo encuentra el archivo comprimido. Eso es porque, por defecto, gzip
crea 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 el -k
(mantener) opción.
gzip -k calc-sheet.ods
ls -lh calc-sheet.*
Esta vez se conserva el archivo ODS original.
Descomprimir a archivo
Para descomprimir un archivo de almacenamiento GZ, use el -d
(descomprimir) opción. Esto extraerá el archivo comprimido del archivo y lo descomprimirá para que no se distinga del archivo original.
ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*
Esta vez, podemos ver que gzip
ha eliminado el archivo de almacenamiento después de extraer el archivo original. Para retener el archivo de almacenamiento, necesitamos usar el -k
(mantener) opción de nuevo, así como la -d
(descomprimir) opción.
ls calc-sheet.*
gzip -d calc-sheet.ods.gz
ls calc-sheet.*
Esta vez, gzip no elimina el archivo comprimido.
RELACIONADA: Por qué se pueden recuperar los archivos eliminados y cómo puede evitarlo
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
le pedirá que elija abandonar la extracción o sobrescribir el archivo existente.
gzip -d text-file.txt.gz
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 text-file.txt.gz
El archivo se sobrescribe y vuelve silenciosamente a la línea de comandos.
Comprimir árboles de directorios
Él -r
Causas de opciones (recursivas) gzip
para comprimir los archivos en un árbol de directorio 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.
tree level1
usemos gzip
en el árbol de directorios y ver qué sucede.
gzip -r level1/
tree level1
El resultado es gzip
ha 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, gzip
solo 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. Él tar
El programa se usa para crear archivos comprimidos de muchos archivos, pero no tiene sus propias rutinas de compresión. Pero usando las opciones apropiadas con tar
podemos causar tar
para empujar el archivo de almacenamiento a través gzip
. De esa forma obtenemos un archivo comprimido y un archivo de varios archivos o varios directorios.
tar -czvf level1.tar.gz level1
Él tar
las opciones son:
- C: Crear un archivo.
- z: Empuje los archivos a través
gzip
. - v: Modo detallado. Imprime en la ventana de terminal lo que
tar
es hasta. - f nivel1.tar.gz: Nombre de archivo a utilizar para el archivo de almacenamiento.
Esto archiva la estructura del árbol de directorios y todos los archivos dentro del árbol de directorios.
RELACIONADA: Cómo comprimir y extraer archivos usando el comando tar en Linux
Obtener información sobre archivos
Él -l
La opció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 leve1.tar.gz
gzip -l text-file.txt.gz
Puede verificar la integridad de un archivo comprimido con el -t
(prueba) opción.
gzip -t level1.tar.gz
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 not-an-archive.gz
Velocidad versus 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 -1
a través de la parte superior -9
. Él -1
La opción ofrece la velocidad más rápida sacrificando la compresión y -9
da la compresión más alta sacrificando la velocidad.
A menos que proporcione una de estas opciones, gzip utiliza -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
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 usar gzip
para descomprimirlo.
RELACIONADA: Enumere los 10 archivos o directorios más grandes en Linux