Tabla de contenidos
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 gzip
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, las encontrará gzip
. Entonces, si sabe cómo usar gzip
, está listo para comenzar sin la 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 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.
Comprimir un archivo
Para comprimir un archivo, todo lo que necesita hacer es pasar el nombre del archivo al gzip
comando. 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-*
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 ls
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. Esto se debe a que, de forma predeterminada, 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 la -k
opción (conservar).
gzip -k calc-sheet.ods
ls -lh hoja de cálculo.*
Esta vez se conserva el archivo ODS original.
Descomprimir un archivo
Para descomprimir un archivo de almacenamiento GZ, use la -d
opció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.*
Esta vez, podemos ver que gzip
ha eliminado el archivo comprimido después de extraer el archivo original. Para conservar el archivo comprimido, debemos usar la -k
opción (mantener) nuevamente, así como la -d
opción (descomprimir).
ls hoja de cálculo.*
gzip -d calc-sheet.ods.gz
ls hoja de cálculo.*
Esta vez, gzip no elimina el archivo comprimido.
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
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
El archivo se sobrescribe y vuelve silenciosamente a la línea de comandos.
Comprimir árboles de directorios
La -r
opción (recursiva) hace gzip
que 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
Usemos gzip
en el árbol de directorios y veamos qué sucede.
gzip -r nivel1/
árbol nivel1
El resultado es que se 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. El tar
programa 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 tar
opciones 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
tar
está haciendo. - f level1.tar.gz : Nombre de archivo a usar para el archivo de almacenamiento.
Esto archiva la estructura del árbol de directorios y todos los archivos dentro del árbol de directorios.
Obtener información sobre archivos
La -l
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 nivel1.tar.gz
gzip -l archivo-de-texto.txt.gz
Puede verificar la integridad de un archivo comprimido con la -t
opción (prueba).
gzip -t nivel1.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 no-un-archivo.gz
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 -1
arriba -9
. La -1
opción brinda la velocidad más rápida sacrificando la compresión y -9
brinda 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
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 gzip
para descomprimirlo.