Entrega 30. Compresión y descompresión (I).
% man you
No manual entry for you.
Introducción.
En esta nueva serie de entregas vamos a ver todo lo necesario para comprimir y descomprimir en nuestro sistema GNU/Linux, como de costumbre empezaremos desde la consola de comandos y continuaremos por la interfaz gráfica.
Empaquetando y desempaquetando.
Lo primero que veremos no es propiamente un compresión o descompresión de datos, sino un empaquetamiento de los mismos. Esto es algo muy común en los sistemas basados en Unix como Linux, primero realizar un empaquetamiento en donde lo único que se hace es pasar varios archivos a uno solo (como el que guarda libros en una caja, o encuaderna varios fascículos y lo convierte en un libro).
Esto lo conseguimos con el comando:
tar [opciones] [nombre_fichero.tar] [ficheros]
Primero empezaremos empaquetando y para eso necesitamos dos opciones: '-c' para decirle que vamos a crear un archivo nuevo y '-f' para decirle que use el sistema de ficheros.
matados2k@fortaleza:~$ tar -cf curso.tar curso
matados2k@fortaleza:~$ ls
amsn_received curso curso.tar Desktop matados2k matados2k.tar.gz
matados2k@fortaleza:~$
Ahora necesitamos realizar el paso contrario y para ello disponemos de las opciones '-x' para decirle que queremos extraer, '-v' para que nos diga qué es lo que va haciendo y 'f' para lo mismo comentado anteriormente:
matados2k@fortaleza:~$ mv curso cursoOLD
matados2k@fortaleza:~$ ls
amsn_received cursoOLD curso.tar Desktop matados2k matados2k.tar.gz
matados2k@fortaleza:~$ tar -xvf curso.tar
curso/
curso/supertux-0.1.2/
......
curso/getleft_1.1.2-2_all.deb
curso/getleft_1.1.1-2_all.deb
matados2k@fortaleza:~$ ls
amsn_received curso cursoOLD curso.tar Desktop matados2k matados2k.tar.gz
matados2k@fortaleza:~$
Pero... ¿y si nos interesa ver el contenido del '.tar' antes de descomprimir? Pues usamos la opción '-t' con '-f', lo que hará que nos muestre todo el contenido dentro del fichero '.tar' de la misma forma que lo vimos al descomprimir.
Como vemos, este comando puede ser una buena opción para crear nuestras copias de seguridad, pero tiene una pega y es que no comprime, cosa que solucionaremos más adelante.
Compresión y descompresión en gzip.
Gzip, con extensión '.gz', es uno de los formatos más comunes que podemos encontrar dentro del mundo del software libre (formato de compresión LZ77), en un principio mantenido por Jean-loup Gailly y actualmente por la Free Software Fundation, Inc. Empecemos viendo cómo usarlo:
gzip [-opciones] [ficheros]
Y lo primero es comprimir un fichero, para ello usaremos gzip sin opción:
matados2k@fortaleza:~$ gzip curso.tar
matados2k@fortaleza:~$ ls
amsn_received cursoOLD Desktop matados2k.tar.gz
curso curso.tar.gz matados2k
matados2k@fortaleza:~$
Como observaréis no ha hecho falta indicar una extensión, nuestro fichero resultante es curso.tar.gz. Pues bien, acabamos de crear un fichero con una de las extensiones que más os encontrareis: 'tar.gz', y ahora ya sabéis su significado. Ojo, daos cuenta de que 'curso.tar' ha sido sustituido por 'curso.tar.gz'. Para descomprimirlo usamos la opción '-d' y el nombre del fichero:
matados2k@fortaleza:~$ gzip -d curso.tar.gz
matados2k@fortaleza:~$ ls
amsn_received curso cursoOLD curso.tar Desktop mata
matados2k@fortaleza:~$
Ahora pasamos de tener un archivo .tar.gz a un .tar si os fijáis. Para ver el contenido de un .tar.gz usaremos la opción '-l'.
Pues yo lo quiero todo en uno.
Sí, lo sé, es muy pesado usar dos comandos para una cosa simple, pero esto tiene fácil solución: el comando 'tar' es capaz de hacerlo directamente usando la opción '-z' en cada una de las formas que vimos antes (incluso para ver su contenido):
matados2k@fortaleza:~$ tar -czf curso.tar.gz curso
matados2k@fortaleza:~$ ls
amsn_received cursoOLD curso.tar.gz matados2k
curso curso.tar Desktop matados2k.tar.gz
matados2k@fortaleza:~$ matados2k@fortaleza:~$ tar -xvzf curso.tar.gz
curso/
curso/supertux-0.1.2/
....
curso/getleft_1.1.2-2_all.deb
curso/getleft_1.1.1-2_all.deb
matados2k@fortaleza:~$
Quiero una mejor compresión, bzip2.
Este formato de compresión está basado en el algoritmo de compresión Burrows-Wheeler block sorting text y Huffman coding, que suele comportarse mejor que el anterior y su autor es Julian Seward. Y por suerte su uso es igual que gzip (para lo que nosotros lo hemos usado, otras opciones pueden cambiar) así que veamos la diferencia entre uno y otro:
matados2k@fortaleza:~$ bzip2 curso.tar
matados2k@fortaleza:~$ ls -l
total 3599112
drwx------ 2 matados2k matados2k 4096 2005-06-01 20:29 amsn_received
drwxr-xr-x 4 matados2k matados2k 4096 2005-05-16 08:40 curso
drwxr-xr-x 4 matados2k matados2k 4096 2005-05-16 08:40 cursoOLD
-rw-r--r-- 1 matados2k matados2k 31261885 2005-06-12 18:24 curso.tar.bz2
-rw-r--r-- 1 matados2k matados2k 33918144 2005-06-14 19:18 curso.tar.gz
drwxr-xr-x 5 matados2k matados2k 4096 2005-06-07 23:26 Desktop
drwxr-xr-x 32 matados2k matados2k 4096 2005-06-14 19:09 matados2k
-rwxrwxrwx 1 matados2k matados2k 3616666651 2005-05-08 23:44 matados2k.tar.gz
matados2k@fortaleza:~$
Como veis hemos comprimido más, la pega ... que tarda también bastante más, así que sopesad vosotros mismo si preferís tiempo o espacio

En este caso el comando 'tar' ya no comprime directamente en este formato así que debemos usar las tuberías para este menester, ¿que no sabes cómo? Si es así es que no has aprendido con el curso.
Pues yo quiero el zip de toda la vida.
Para ello utilizaremos dos comandos que lo mismo puede que necesitemos instalar, ellos son 'zip' y 'unzip', y su forma de uso es la siguiente:
zip [-r] nombre_archivo.zip lista_de_ficheros
unzip [-v] nombre_archivo.zip
El primero es para comprimir con la opción '-r' si queremos que nos incluya todo el contenido de un directorio (y no sólo el directorio), y el segundo para descomprimir con la opción '-v' en el caso de que queramos ver sólo el contenido:
matados2k@fortaleza:~$ zip -r curso.zip curso
...
adding: curso/getleft_1.1.2-2_all.deb (deflated 0%)
adding: curso/getleft_1.1.1-2_all.deb (deflated 0%)
matados2k@fortaleza:~$ ls -l
total 3632588
drwx------ 2 matados2k matados2k 4096 2005-06-01 20:29 amsn_received
drwxr-xr-x 4 matados2k matados2k 4096 2005-05-16 08:40 curso
drwxr-xr-x 4 matados2k matados2k 4096 2005-05-16 08:40 cursoOLD
-rw-r--r-- 1 matados2k matados2k 31261885 2005-06-12 18:24 curso.tar.bz2
-rw-r--r-- 1 matados2k matados2k 33918144 2005-06-14 19:18 curso.tar.gz
-rw-r--r-- 1 matados2k matados2k 34236271 2005-06-14 19:36 curso.zip
drwxr-xr-x 5 matados2k matados2k 4096 2005-06-07 23:26 Desktop
drwxr-xr-x 32 matados2k matados2k 4096 2005-06-14 19:09 matados2k
-rwxrwxrwx 1 matados2k matados2k 3616666651 2005-05-08 23:44 matados2k.tar.gz
matados2k@fortaleza:~$
Como vemos, en este caso gzip y bzip2 ganan.