Aprender a Comprimir y Descomprimir en GNU/Linux.
Jonathan Ruiz Gallardo.
La mayoría de los usuarios de otros Sistemas Operativos están familiarizados con el concepto “Archivos Comprimidos”. Un archivo Comprimido es un archivo que contiene uno o varios archivos en forma comprimida. Los archivos comprimidos son la forma habitual de distribuir software a través de Internet, normalmente en formato ZIP. Aunque Linux incluye el comando UNZIP para acceder a los contenidos de los archivos ZIP, en el mundo UNIX los archivos suelen usar el formato tar, y se comprimen con el gzip, que comprime archivos individuales.
En este trabajo, procederé a explicar los diferentes comandos usados en el Sistema Operativo GNU/Linux para comprimir, descomprimir y empaquetar un fichero ó ficheros. Empezaré por una breve explicación de cada uno de ellos y después indicaré su manera de utilizarlos incluso junto a otros comandos expuestos aquí. También incluyo distintas “Notas” personales para explicar varias maneras de realizar algo, o a tener en cuenta.
Tar: *Tar nunca comprime* Este comando (uno de los más potentes y complejos en GNU/Linux, por su gran cantidad de opciones que presenta) sirve normalmente para empaquetar o desempaquetar ficheros, con los de empaquetar me refiero al simple hecho de guardar en un único fichero una lista de varios ficheros; o el contenido de todo un directorio (o varios directorios). Con tar preservamos las estructuras de directorios y permisos de los mismos. Para comprimir usaremos otros comandos. Si realizamos un “man tar” en la shell de Linux, encontramos esto:
Aquí nos explica su utilidad, la manera correcta de usarlo y las posibles combinaciones que se nos dán.
El formato del comando tar sería: “tar [OPCIONES] [Fichero1] [Fichero2] .... [FicheroN]” Nota: todo los comandos libres de “comillas”.
En las posibles opciones podemos utilizar las siguiente: c:
Crea un nuevo archivo tar.
v:
Modo “verbose”, que esto quiere decir que se nos mostrará por pantalla los operaciones que va realizando archivo por archivo, si no se pone esta opción se ejecutara la acción pero en pantalla no
veremos el proceso. En resumidas cuentas, no hay ningún problema en no ponerla. x:
Extrae los archivos. ( Desempaqueta los ficheros que se encuentran dentro del archivo .tar ).
t:
Nos muestra el contenido del archivo tar. Cuando deseas saber lo que contiene ese archivo sin tener que desempaquetándolo se utiliza esta opción.
u:
Sólo añade ficheros que son más recientes que la copia en el archivo.
r:
Agregar ficheros a un archivo.tar
p:
Mantiene los permisos originales de los archivos.
f:
Cuando se usa con la opción c, usa el nombre del archivo especificado para la creación del archivo tar; cuando se usa con la opción x, retira del archivo el archivo específico. Esto sería para nombrar los tar.
z:
Comprime el archivo tar con gzip. (Hablaré de él después).
j:
Comprime el archivo tar con bzip2. (Hablaré de él más adelante).
k:
Mantiene los ficheros existentes; no los sobreescribe en el archivo.
Usos del tar Por ejemplo, Imaginemos que tenemos 4 carpetas(vacías o no) y las queremos empaquetar en un archivo .tar que contengan éstas. Carpetas:
hola0 hola1 hola2 hola3
En la shell pondríamos:
$tar cvf NombreQueQueramos.tar hola0 hola1 hola2 hola3 ó también poniendo al final hola* ; utilizando el comodín.
Así de fácil. Para volver a desempaquetarlas:
$tar xvf NOMBREqueLePusimos.tar
Si lo queremos descomprimir sin tener que estar en ese directorio:
$tar xvf NombreQueLePusimos.tar /directorio/a/descomprimir/
Las opciones básicas del comando tar son esas, nada más. Ahora bien, si queremos empaquetarlos y comprimirlos para que no ocupen demasiado espacio; deberemos aplicar otros comandos junto al tar. Para eso tenemos disponibles el “Gzip” y “Bzip2”. Para descomprimirlos usaremos “Gunzip” y “Bunzip2” respectivamente.
Nota: gzip ó bzip2 sólo comprimen ficheros (no directorios, para eso existe tar). Para comprimir y archivar al mismo tiempo hay que combinar el tar y el gzip o el bzip2.
Gzip:
Una herramienta especializada en la compresión y descompresión. El fichero a comprimir se reemplaza por otro con la “extensión.gz”, manteniéndose los mismos permisos, propietarios y tiempos de modificación.
Así de fácil. El resultado de este comando es un archivo terminado en la extensión .gz el cual generalmente debería ser algo más pequeño que el original. También hay que saber que el archivo que hicimos ( adios.txt ) ya no existirá más, ya que a sido reemplazado por “adios.txt.gz”. Si hubiéramos comprimido alguna imagen o algún archivo “.mp3” u otro de este tipo, este no se comprimirá de una forma notoria, ya que estos tipos de archivos ya están comprimidos y si llegaran a comprimirse la diferencia sería mínima. Si lo que deseamos es que “gzip” utilice el mayor factor de compresión posible utilizamos la opción “9” de la siguiente forma: $gzip 9 adios.txt
Claro está, que para notar alguna diferencia de compresión debemos comprimir a ser posibles directorios completos (usando tar para empaquetar), no simples ficheros de texto :) Al realizar una compresión con la opción “9” este comando tomará un poco más de tiempo que el común para comprimir el archivo. Para solucionar el problema podríamos usar valores más bajos desde la línea de comandos, pero esto tendrá como consecuencia un menor tiempo de
compresión, pero a la vez una no tan buena compresión del fichero “adios”.
Si ahora queremos descomprimirlo tenemos la opción de utilizar “gzip d” o el comando “gunzip”. Este comando básicamente lo que hace es descomprimir cualquier archivo que tenga una extensión reconocible. Entre las extensiones reconocibles tenemos: .gz gz .z z .Z Z
Algunas opciones que podemos utilizar con “gzip” son las siguientes: “gzip [opciones]” d:
Se usar para descomprimir
f:
Fuerza la compresión o descompresión. No hace ninguna pregunta si desea sobreescribir.
h:
Muestra la pantalla de ayuda.
l:
Muestra información sobre los archivos que están comprimidos, no los descomprime.
t:
Chequea la integridad del archivo comprimido.
r:
Comprime recursivamente, osea comprime el directorio principal y todos sus subdirectorios.
v:
Muestra el nombre y el porcentaje de reducción para cada archivo comprimido.
V:
Muestra el número de versión, y las opciones de compilación de este.
1 ó 9
El 1 aumenta la velocidad pero disminuye el total de compresión, así se puede ir subiendo hasta 9 donde la velocidad de compresión es lenta pero la cantidad de bytes reducidos es mayor.
S:
Se usa para cambiar el sufijo por defecto que es “.gz” .
name: El nombre de los archivos a comprimir, se puede usar comodines. Nota: El comando para descomprimir “gunzip” tiene los mismo argumentos, excepto “d” y los
números de 1 a 9 que son propios de “gzip”,
Bzip2:
Bzip2 está creado con una magnífico algoritmo sobre compresión de datos. Generalmente consigue que los ficheros queden en un 6070% del tamaño que tienen los ficheros comprimidos con gzip. La sintaxis es parecida a la del programa “gzip” . Bzip2 esta desarrollado bajo licencia BSD, gzip GNU. Al igual que “gzip” no comprime directorios, solo ficheros. Para comprimir directorios, tendremos antes que empaquetarlos en un “archivo.tar” . Por ejemplo, tenemos 4 carpetas, cada una tiene a su vez ficheros. Si queremos comprimirlos tendremos que empaquetarlos con “.tar” y una vez hecho esto comprimirlos con “bzip2”.
Lo primero de todo, es empaquetar las carpetas para ello:
Nota: Todos esto se puede realizar con el comando “tar z” para comprimir con “gzip” ó “tar j” para comprimir con “bzip2”; y así no tenerlo que hacer en diferentes pasos. En cambio, para realizar este ejemplo; lo realizo paso a paso. Quiero decir: primero empaquetaré con tar y seguidamente comprimiré, y no directamente empaquetar y comprimir en una sola línea con estos comandos: $tar czvf fichero.tar.gz $tar cvfj nombredelfichero.tbz2
Ahora comprobamos el tamaño que ocupan todas esas carpetas con sus respectivos ficheros:
Observamos que el “archivo.tar” ocupa 30720 bytes en total. Si lo comprimiéramos con “gzip”
Ocuparía 16874 bytes.
Ahora si lo hubiéramos comprimido con “bzip2”:
17767 bytes. Nota: Generalmente bzip2, comprime más los archivos debido al uso de más recursos y tiempo.
RESUMEN: Ficheros tar Empaquetar: tar cvf archivo.tar /dir/a/comprimir/ Desempaquetar: tar xvf archivo.tar Ver contenido tar tf archivo.tar Ficheros gz Comprimir: gzip 9 fichero Descomprimir: gzip d fichero.gz Ficheros bz2 Comprimir: bzip fichero
Descomprimir: bzip2 d fichero.bz2 Ficheros tar.gz Comprimir: tar czfv archivo.tar.gz ficheros Descomprimir: tar xzvf archivo.tar.gz Ver contenido: tar tzf archivo.tar.gz Ficheros tar.bz2 Comprimir: tar c ficheros | bzip2 > archivo.tar.bz2 Descomprimir: bzip2 dc archivo.tar.bz2 | tar xv Ver contenido: bzip2 dc archivo.tar.bz2 | tar t Ficheros zip Comprimir: zip archivo.zip ficheros Descomprimir: unzip archivo.zip Ver contenido: unzip v archivo.zip
Ficheros lha Comprimir: lha a archivo.lha ficheros Descomprimir: lha x archivo.lha Ver contenido: lha v archivo.lha Ver contenido: lha l archivo.lha
Ficheros arj Comprimir: arj a archivo.arj ficheros Descomprimir: unarj archivo.arj
Descomprimir: arj x archivo.arj Ver contenido: arj v archivo.arj Ver contenido: arj l archivo.arj
Ficheros zoo Comprimir: zoo a archivo.zoo ficheros Descomprimir: zoo x archivo.zoo Ver contenido: zoo L archivo.zoo Ver contenido: zoo v archivo.zoo
Rar Compresor bastante potente y es muy usual encontrar ficheros comprimidos por Internet. Ficheros rar Comprimir: rar a archivo.rar ficheros Descomprimir: rar x archivo.rar Ver contenido: rar l archivo.rar Ver contenido: rar v archivo.rar