7- Guardando Archivos

  • gzip
  • bzip2
  • tar
  • zip
  • Resumen

    Introducción

    Como es lo común hoy en día, existen varios tipos de programas que sirven tanto para comprimir y descomprimir archivos. Slackware Linux posee varias utilidades que cumplen estas funciones y varias otras además, entre las cuales podemos mencionar el respaldo de archivos para enviarlos entre las diferentes máquinas que se encuentran conectadas  a internet en el menor tiempo posible. Estas utilidades  nos sirven tanto para manipular los archivos de tipo Unix como para los archivos de tipo Microsoft Windows.


    gzip

    gzip(1) reduce el tamaño de un archivo usando el codigo Lempel-Ziv (LZ77). Este es un programa de compresión GNU. Sencillamente lo que este hace es tomar un archivo y comprimirlo. El comando sin opciones sería este:

       $ gzip prueba1

    El resultado de este comando es un archivo llamado prueba1.gz el cual generalmente debería ser algo más pequeño que el archivo prueba1. Es también conveniente mencionar que el archivo prueba1 ya no existirá más, ya que a sido reemplazado por prueba1.gz. Si por ejemplo lo que deceeamos es comprimir alguna imágen 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 comprimirce la diferencia sería despreciable.
    Si lo que deceamos es  que gzip utilice el mayor factor de compresión posbile utilizamos la opción -9 de la siguiente forma:

       $ gzip -9 archivo1

    Este tomará un poco más de tiempo que el común para comprimir el archivo1. Para solucionar el problema del tiempo podríams utilizar los valores más bajos desde la línea de comandos, pero esto tendrá como concecuencia un menor tiempo de compresión, pero a la vez una no tan buena compresión del archivo1.

    Ahora si lo que deceamos es descomprimir archivos que hayan sido comprimidos con gzip tenemos la opción de utilizar el comando "gzip -d" o el comando gunzip. Este comando basicamente lo que hace es descomprimir cualquier archivo que tenga una extensión reconocible. Entre las extensiones reconocibles por gunzip tenemos : .gz, -gz,.z, -z, .Z, o -Z. Lo más sencillo sería usar el comandpo de la siguiente forma:

       $ gunzip archivo1.gz

    Lo que aquí ocurre esque nos descomprime el archivo1.gz dejandonos un archivo llamado archivo1 en el directorio en donde aplicamos el comando. Como mencioné un par de líneas atrás, también podríamos haber usado el comando gzip con la opción -d, lo cual sería de la siguiente forma:

       $ gzip -d archivo1.gz

    Con lo que obtendríamos un resultado igual que si aplicaramos el comando "gunzip archivo1.gz". La explicación para esto esque, gunzip es nada más y nada menos que un link blando ( o link simbólico) a /bin/gzip. Esto lo podrémos verificar realizando lo siguiente:

       $ whereis gunzip
    gunzip: /bin/gunzip /usr/bin/gunzip /usr/man/man1/gunzip.1.gz /usr/share/man/man1/gunzip.1.gz
    $ ls -l /bin/gunzip
    lrwxrwxrwx 1 root root 4 jun 4 16:09 /bin/gunzip -> gzip

    Como ya sabemos que gunzip simplemente es un link blando a gzip, podremos deducir facilmente que podemos descomprimir cualquier archivo gzipeado tanto con gunzip como con gzip.


    bzip2

    bzip2 comprime archivos usando el algoritmo de la compresión del texto, el clasificar de bloque del Madriguera-Rodador, y la codificación de Huffman. La compresión es generalmente considerablemente mejor que la alcanzada por compresores mas convencionales como los basados en LZ77/LZ78, y se aproxima al rendimiento de un compresor estatistico de la familia PPM lo que es realmente una gran ventaja para los usuarios desdichados( como yo) que solo poseemos una conexión dial up convencional :( .

    Uno de los puntos "debiles" de bzip2 es que requiere de una intensidad mayor de CPU, lo uqe significa que necesitaremos más tiempo para realizar la compresión que si utilizaramos gzip, pero obviamente el resultado es superior en la gran mayoría de los casos.

    La forma básica de utilizar bzip2 es bastante sencilla, esta es así :

       $ bzip2 archivo1

    El resultado obviamente será un archivo de menor tamaño llamado archivo1.bz2. Este es igual a gzip en lo que a procedimiento se refieres, ya que el archivo inicial ( osea archivo1 ) ya no existirá, porque fué reemplazado por el nombre del archivo seguido de la extensión .bz2.

    Como es de imaginar, ya que, bzip2 y gzip funcionan de forma parecida, también podemos modificar lla fuerza de compresión y hacer más rápida su ejecución. Esto sería de la siguiente forma:

       $ bzip2 -9 archivo1

    Ahora bien para descomprimir archvios con la extensión .bz2, tenemos la opción de utilizar bzip2(1) o bunzip2(1). La primera opción es usar bzip2 con la opción adecuada ( de igual forma que sucedía con gzip ) la cual es esta:

       $ bzip2 -d archivo1.bz2

    Lo que descomprimirá el archivo y reeemplazará por el nombre del archivo sin la extensión .bz2. Ahora bien si lo que deceamos es utilizar la opción bunzip(1) la forma sería la siguiente:

       $ bunzip2 archivo1.bz2

    Con lo cual obtenemos el mismo resultado. Esto es porque bunzip(1) es un link blando a gzip2(1) al igual como lo es gunzip(1) a gzip(1). Esto lo podemos verificar de igual forma que hicimos con gzip anteriormente, osea así:

       $ whereis bunzip2
    bunzip2: /bin/bunzip2 /usr/bin/bunzip2
    $ ls -l
    /bin/bunzip2
    lrwxrwxrwx 1 root root 5 jun 4 16:09 /bin/bunzip2 -> bzip



    tar

    tar(1) es una de las utilidades que nos permite archivar y guardar diferentes ficheros en un solo archivo, a este proceso se le conoce como  empaquetar. Un ejemplo practico de esto sería si decearamos guardar el contenido de todo un directorio incluyendo subdirectorios en un único archivo, al cual posteriormente realizado este proceso quedará con la extensión .tar. Este proceso de empaquetar es bastante útil, ya que ni con gzip(1) o bzip2(1) podríamos lograr semejante resultado. Pero nosotros podemos usar conjuntamente tar y gzip o bzip2 para lograr un empaquetamiento/compresión o desempaquetamient/descompresión de un directorio grande ( denominado arbol) el cual podría ser /etc o el mismisimo / .

    Para lograr un empaquetamiento basado en tar(1) más gzip(1) tipeamos lo siguiente:

    tar cvzf directorio1.tar /home/slacky/

    Lo que aquí sucede, esque tar toma todo el contenido del directorio /home/slacky/ ( tanto subdirectorios o archivos) y los deja en un archivo llamado directorio1.tar.gz. Si te fijas usamos la opción c, que le indica a tar que cree un nuevo fichero. Luego tenemos la opción z que hace que gzip gzipee el archivo.tar, despúes tenemos v la cual nos deja ver el proceso de empaquetación ( osea el output) y finalmente tenemos la opción f que es para que tar tome el siguiente argumento dado el cual será el nombre de nuestro  nuevo archivo tar gzipeado ( osea directorio1.tar.gz).

    SI deceamos tener un mejor resultado de compresión, lo que podemos hacer es utilizar tar(1) más bzip2(1) de la siguiente forma:

    tar cvjf  directorio1.tar.bz2 /home/slacky/

    Lo que sucede es basicamente lo mismo que con gzip(1), pero el nivel de compresión es mayor. La opción c es para desirle a tar que vamos a comprimir, la v es para que nos deje ver el proceso de empaquetación, la j es para indicarle que vamos a utilizar bzip2(1) para comprimir el archivo empaquetado con tar(1) y finalmente la f que nos servirá para designar el nombre del archivo con extensión .tar.bz2 creado.

    Una de las cosas más comunes con las que nos encontramos en la red a la hora de bajar algún programa es la alternativa de descargarnos el tarball, que no es nada mas que el source ( el codigo fuente) del programa para que nosotros mismos lo configures/compilemos e instalemos en nuestro sistema. Para poder ver ese tarball lo que primerpo debemos hacer es descomprimirlo/desempaquetarlo si se encuentra con una extensión como .tar.gz , .tar.bz o .tar.bz2. Es para esto que también usamos otra de las caracteristicas de tar(1) la cual es descomprimir y desempaquetar un tarball. Si se tratace de un tarball.tar.gz el comando es el siguiente:

    tar zxfv tarball.tar.gz

    Aquí usamos basicamente las mismas opciones, pero con alguna pequeña diferencia, esta diferencia es la opción x, la cual le indica a tar que vamos a extraer un archivo gzipeado ( designado por la opción z).

    Si deceamos descomprimir/desempaquetar un archivo de estensión .tar.bz2 utilizamos lo siguiente:

    tar xjfv tarball.tar.bz2

    La explicación es la misma, pero con la diferencia que usamos la opción j en vez de la z, ya que esta vez estamos extrallendo varios archivos que fueron bzipeados.

    También es interesante mencionar que podemos obtener estos mismo resultados mediante un comado más largo y con la ayuda de "|" ( tubería ) para filtrar el resultado de un comando y posteriormente enviarlo a otro, lo que en este caso sería de bzip a tar, veámos un ejemplo de esto:

    bzip2 -dc tarball.tar.bz2 | tar xvf -

    Y lo equivalente de esto, pero para un archivo con extensión .tar.gz es lo siguiente:

    gzip -dc tarball.tar.gz | tar xfv -


    zip

    zip(1) es una utilidad de compresión para Unix, VMS, MSDOS, OS/2, Windows NT, Minix, Atari y Machintosh, Amiga y Acorn RISC OS. Su combinación es análoga con  el comando tar(1) de UNIX y es compatible con PKZIP (Phil Katz's ZIP) para el sistema MSDOS. Obviamente esta utilidad tiene su programa acompañante que complementa esta utilidad, esta se llama unzip(1) el cual nos sirve para descomprimir los archivos zipeados con zip(1).

    Estas utilidades son de un uso bastante sencillo. Por ejemplo, si deceamos comprimir todos los archivos del directorio en el que nos encontramos simplemente tecleamos:

     $ zip zipeado  *

    Esto nos creará un archivo llamado zipeado.zip el cual conteandrá todos archivos que se encuentren en el directorio actual.  Ahora si lo que deceabamos es incluir todos los directorios que se encuentran el el directorio actual usamos la opción -r de la siguiente forma:

       $ zip -r zipeado *

    Para poder descomprimir los archvivos con la extensión .zip bastará teclear lo siguiente:

       $ unzip zipeado
    Esto nos descomprime todos los archvios y directorios que se encuentren contenidos en el archivo .zip que en este caso es zipeado.zip.

    Finalmente queda mencionar que las utilidades zip(1) y unzip(1) poseen una gran cantidad de opciones avanzadas, entre las cuales se encuentra crear archivos de tipo self-extracting ( o auto-extraíbles), control de tamaño del archivo comprimido entre muchas más. Para mayor información sobre zip(1) y unzip(1) siempre tenemos a nuestra disposición las páginas del manual.

    Resumen

    En este capítulo hemos descrito a grandes rasgoz las principales utilidades que posee nuestro Slackware Linux tanto para comprimir/descomprimir y empaquetar/desempaquetar archivos. En estos momentos usted debería tener nosiones básicas de la manipulación de archivos a través de las utilidades tar(1), gzip2(1), bzip2(1) y zip(1) para lograr una compresión o descompresión de un archivo y además de como manipular archivos basads en Widows, ya que lo queramos o no es un conocimiento necesario en estos tiempos de "monopolio" microsoft.


    Comandos Basicos de Red Indice Manejo de Paquetes de Slackware