Imprimir
Categoría: Unix

Comprimir archivos o empaquetarlos en Unix nos ayuda a ocupar menos espacio en nuestro disco duro, o por ejemplo mantener vesiones de nuestros códigos fuentes empaquetados. Muy útil para respaldos o copias de seguridad, hay diversos tipos de compresión y se pueden aún combinar entre ellos. Aquí veremos las funciones y parámetros más utilizados de cada uno de ellos.

Vamos a comenzar con una pequeña descripción de que es comprimir y que es empaquetar

Un archivo comprimido es aquel que es una copia de menor tamaño de un archivo original. Para reducir su tamaño se utilizan modelos y algoritmos matemáticos de forma que la información del mismo ocupa un menor espacio de almacenamiento en disco duro.

Al comprimir un archivo este normalmente queda ilegible en su formato habitual, es decir si tengo un archivo de texto y lo comprimo, este no podrá se leído mientras este comprimido, para leerlo será necesario descomprimirlo nuevamente.

Empaquetar archivos se refiere a la acción de en un solo archivo tener la información de diferentes archivos que ocupan menor espacio en disco que están desempaquetados.

Tal vez te sea un poco confuso si sólo conoces la compresión mediante Winzip, a grandes rasgos, podríamos decir que si en un archivo Winzip pones un solo archivo este esta comprimido, pero si pones dos o más archivos, estos están empaquetados (La diferencia no es del todo correcta pero muestra la diferencia entre comprimir y empaquetar.)

Una buena técnica para respaldos es primero comprimir los archivos y después empaquetarlos, con lo que la reducción de uso de disco duro es considerable. Es recomendable utilizar estás técnicas con la información que no utilizas de manera continua.

Vamos a comenzar con los comandos de compresión de archivos.


compress, uncompress

Comprime descomprime archivos

Sintaxis básica :

$ compress [archivo]
$ uncompress [archivo]

La utilidad compress reduce el tamaño del archivo, y los archivos son reemplazados por uno con la extension .Z (Nota: que la Z es mayúscula) mantiene los mismo modos del dueño del archivo, y mantiene también la fecha y hora de modficación del archivo.

El procentaje de compresión depende del tamaño del archivo de entrada, entre otros aspectos. Por ejemplo un texto en inglés (o un código fuente) puede ser comprimido entre un 50% o 60%.

Se puede utilizar el parámetro -b bitspara establecer el límite máximo (en bits) para subcadenas de código comunes. bits puedes ser un valor comprendido entre 9 y 16, donde por default es 16. Entre menor sea el número, menor será la compresión.

uncompress restaura los archvos a su estado original una vez que han sido comprimidos utilizando la utilidad compress.

Ejemplo práctico:

$ ls -l modulos.txt
-rwxr--r-- 1 condor staff 130275 dbre 3 18:24 modulos.txt


Es un archivo que contiene 130,275 caracteres

$ compress modulos.txt
$ ls -l modulos.txt.Z
-rwxr--r-- 1 condor staff 46147 dbre 3 18:24 modulos.txt.Z


Después de la compresión el archivo es sólo de 46,147 caracteres

omo se menciono el archivo modulos.txt fue reemplazado por modulos.txt.Z por lo tanto al ejecutar ls -l modulos.txt nos regresará un mensaje de aviso informando que no encontró el archivo.

Para descomprimir:

$ uncompress modulos.txt.Z
$ ls -l modulos.txt
-rwxr--r-- 1 condor staff 130275 dbre 3 18:24 modulos.txt

Ahora si la compresión la hicieramos con el comando -b 9 el el archivo .Z sería mayor al anterior.

$ compress -b 9 modulos.txt
$ ls -l modulos.txt.Z
-rwxr--r-- 1 condor staff 96348 dbre 3 18:24 modulos.txt.Z

Como vemos, ahora el archivo es de 96,348 caracteres.

gzip, gunzip

Sintaxis básica

$ gzip [archivo]
$ gunzip [archivo]

gzip reduce el tamaño del archivo nombrado, cuando es posible, cada archivo es remplazado por otro con el mismo nombre agregando la extension .gz manteneidno el mismo dueño del archivo, tiempos de acceso y modificación. En particula, gzip solo intenta comprimir archivos regulares ignorando ligas simbólicas.

gunzip, toma la lista de archivos de la lista de comando y reemplaza aquellos cuyo nombres terminan con .gz, -gz, .z, -z, _z ó .Z, puede descomprimir archivos creados con otros comandos diferentes al gzip como compress ó pack

Un archivo comprimido con gzip puede ser regresado a su forma original utilizando gzip -d o gunzip.

Para indicarle a gzip el tamaño de compresión podemos utiliar los parámetros numéricos del -1 al -9 donde -1 nos genera un archivo más grande pero es más rápido y -9 nos genera un archivo más pequeño pero es más lento. Si no especificamos esta característica por default se ejcuta con -6

Utilicemos el mismo archivo para comparar la compresión.

$ gzip modulos.txt
$ ls -l modulos.txt.gz
-rwxr--r-- 1 renan staff 30356 dbre 3 18:24 modulos.txt.gz

Ahora el archivo contiene tan sólo 30,356 caracteres. Para descomprimir:

$ gzip modulos.txt


zip, unzip

Sintaxis básica

$ zip [-opciones] nombre_archivo lista_de_archivos

zip es una utilidad para comprimir y empaquetar archivos, para ver las posibles opcion que puede tener cada uno de estos comandos se puede ejecutar zip y unzip sin ningún parámetro.

La lista de archivos a empaquetar puede ser el resultado o salida estándar de la ejecución de una instrucción, como ls, find, etc.

Este programa es útil para empaquetar y comprimir un conjunto de archivos para ser distribuídos o para utilizar un menor espacio en disco. En los archivos generados por este programa se puede almacenar también la ruta o estructura de directorios de los archivos empaquetados.

Ejemplos:

Para crear un paquete zip con tres archivos y máxima compresión:

$ zip -v9 paquete.zip archivo1 archivo2 archivo3

Para leer los archivos que hay en un paquete zip sin extraerlos:

$ unzip -l paquete.zip

Para extraer los archivos de un paquete zip:

$ unzip -v paquete.zip

tar

tar es sin duda el programa más utilizado para la comprimir y empaquetar archivos en Unix, su nombre proviene de "Tape ARchiver" (Almacenador de cinta).

Sintaxis básica

$ tar parametros lista_de_archivos

Como hemos mencionado, tar nos sirve para comprimir, empaquetar archivos, además de extraer o agregar archivos a los ya empaquetados. Conserva la estructura de los directorios dentro del paquete.

Al igual que zip se puede pasar la lista de archivos mediante la salida estándar.

La combinación de parámetros más utilizados serían:

 

$tar cvf archivo.tar archivo1.txt archivo2.txt archivo3.txt

Con esta instrucción se creará el archivo.tar conteniendo los archivos listados.

 

$tar xvf archivo.tar [lista_de_archivos]

Se utiliza para extraer el contenido de un archivo .tar, como parámetro opcional se le pude indicar que sólo extraiga los archivos con ese nombre o bien mediante un comando.

 

$tar tvf archivo.tar [lista_de_archivos]

Se utiliza para mostrar el contenido de un archivo .tar, como parámetro opcional se le pude indicar que sólo extraiga los archivos con ese nombre o bien mediante un comando.

La lista de opciones utilizadas fucionan como sigue:

c Crear un archivo tar
x Extraer los archivos dentro de un archivo .tar.
t Listar los archivos contenidos en un archivo .tar
v Muestra en la salida el nombre de cada arhivo procesado
f Toma el nombre del archivo .tar com parámetro