Documente Academic
Documente Profesional
Documente Cultură
PAQUE-EXPRESS
Un escueto comando es todo lo que se necesita para empaquetar los datos o extraerlos de un archivo. POR HEIKE JURZIK
l empaquetar y comprimir ficheros reporta numerosos beneficios. El empaquetado y la compresin de ficheros ocupa menos espacio en el disco y requiere menos ancho de banda de Internet. Linux posee programas a tal efecto basados en GUI, como son File Roller o Ark, as como herramientas de la lnea de comandos para crear y empaquetar varios tipos de archivo. Este artculo examina algunas herramientas de la shell para el archivado de ficheros y demuestra el tipo de empaquetado experto que las inteligentes combinaciones de los comandos de Linux ofrecen al usuario de la lnea de comandos.
Empaquetado gzip
fino
con
El programa gzip (GNU Zip) es el empaquetador por defecto de Linux. Comprime ficheros simples, pero no crea directorios de archivos completos. En su forma ms simple, el comando gzip tiene el siguiente aspecto:
gzip fichero
Lnea de Comandos
A pesar de que los GUIs como KDE y GNOME son tiles para muchas tareas, si quieres sacar el mximo partido de tu instalacin Linux, tendrs que volver a la vieja y fiable lnea de comandos de vez en cuando. Adems, habr ocasiones cuando te enfrentes a situaciones en las que un conocimiento prctico de las instrucciones del shell puede ahorrarte tiempo o sacarte de un apuro. Esta seccin pretende ser tu gua en la jungla de instrucciones de los terminales de texto.
gzip sustituye el fichero original con una versin comprimida aadiendo la extensin .gz. Las propiedades del fichero, como el acceso y la marca del tiempo de modificacin se guardan en el proceso de empaquetado. Si se prefiere usar una extensin diferente, puede establecerse el parmetro -S (sufijo) para especificarlo. Por ejemplo, el comando
gzip -S .z imagen.bmp
los ficheros comprimidos que usan formatos comprimidos para el original, como es el caso de MP3 o JPEG. La lista 1 muestra la diferencia en la compresin entre un fichero bitmap y un fichero JPEG. Adicionalmente puede especificarse un factor de compresin entre 1 y 9 para influenciar la compresin: gzip -1 es rpido y gzip -9 es lento pero tiene un ndice de compresin superior. El predeterminado es -6. Si se quiere cambiar
crea un fichero comprimido llamado image.bmp.z El tamao del fichero comprimido depende de la distribucin de entradas idnticas en el fichero original. gzip comprimir un fichero de manera ms eficiente si contiene patrones que se repiten frecuentemente. No funciona bien para
86
Nmero 14
WWW.LINUX- MAGAZINE.ES
este ltimo puede hacerse configurando la variable de entorno gzip en el fichero ~/.bashrc
export GZIP="-9"
Un fichero puede desempaquetarse usando bien gunzip o bien gzip -d. Si la herramienta descubre un fichero del mismo nombre en el directorio de trabajo, informa al usuario para asegurarse de que se sepa que se est sobreescribiendo este fichero:
gunzip screenie.jpg.gz gunzip: screenie.jpg U already exists: do you wishU to overwrite (y or n)?
peracin. En la compresin, la herramienta divide los ficheros en bloques individuales. Si un fichero est daado, puede ser posible rescatar los otros ficheros no daados. Para hacerlo, hay que correr bzip2recover para desempaquetar los elementos no daados. Aparte de estas pocas diferencias menores, la mayora de las opciones bzip2 son como las de su equivalente gzip. De nuevo, hay que especificar simplemente el nombre del fichero para comprimirlo:
bzip2 fichero
Para cambiar el predeterminado, se configura nuevamente la variable de entorno BZIP2 aadiendo a ~/.bashrc lo siguiente
export BZIP2="-6"
Si se dice [n], gzip aborta la operacin. Si no interesa el chequeo de seguridad, puede deshabilitarse configurando la opcin -f (por force). El parmetro tiene un efecto colateral adicional: por defecto, gzip se niega a comprimir enlaces simblicos. Pero si se configura el parmetro -f antes de apuntar gzip al symlink, la herramienta comprimir el fichero al cual apunta el enlace y asigna el nombre del symlink (ms la extensin normal). Cuando se desempaqueta el fichero, no ofrece un symlink sino un fichero normal (Figura 1). No es necesario desempaquetar ficheros de texto comprimidos, tales como los HOWTOs localizados en /usr/ share/doc/, antes de usar los paginadores less o more para verlos. Corriendo gzip con la opcin -c (que da una salida a stdout) y redireccionando la salida a un paginador es mucho ms rpido, por ejemplo:
gzip -dc /usr/share/doc/U iptables/README:Debian.gz | less
El fichero comprimido tendr despus del evento una extensin .bz2 y guarda las propiedades del fichero original, al igual que en la compresin con gzip. En contraste con gzip, bzip2 tiene una opcin para crear una copia del original. Para hacerlo, simplemente se especifica el parmetro -k (por keep guardar):
bzip2 -k file
Para hacer lo mismo con gzip, se tendra que sacar el fichero comprimido a una salida estndar, para redireccionar luego la salida a un nuevo fichero: gzip -c file > file.gz. Sin embargo, la versin comprimida del fichero no guardar en este caso las propiedades del fichero original. Al igual que con gzip,los parmetros 1 a -9 (valor por defecto) le dicen a bzip2 el nivel de compresin a usar.
Para desempaquetar un fichero comprimido, hay que establecer el parmetro -d de bzip2 o usar la herramienta especial de desempaquetado bunzip2. Al igual que gzip, bzip2 ofrece alguna proteccin contra la sobreescritura que inadvertidamente se produce en los ficheros existentes, pero en contraposicin con gzip, esta herramienta no ofrece libertad de eleccin. En su lugar, presenta el siguiente mensaje y sale de la operacin:
$ bunzip2 peggy.jpg.bz2 bunzip2: Output fileU peggy.jpg already exists.
Puede abreviarse, an ms usando zless file.gz. Este comando, de hecho, es un pequeo script que ofrece un resultado similar pero con menos tecleos.
Nuevo, bzip2
Rpido,
Mejor:
La herramienta bzip2 emplea un algorito de compresin diferente, lo que hace que comprima los ficheros ms efectivamente. El listado 2 muestra una comparativa entre gzip y bzip2. Adicionalmente, bzip2 posee un modo de recu-
Figura 1:Hay que tener cuidado cuando se comprimen enlaces simblicos. Puede usarse el parmetro -f para forzar esta operacin, pero desempaquetando el fichero, no se obtendr un enlace simblico.
WWW.LINUX- MAGAZINE.ES
Nmero 14
87
Cuando tar incluye el nombre de la carpeta, pueden manejarse directorios y subdirectorios completos de la misma manera, en lugar de especificar
backup_2005_10_05.tar). Este backup incluir todos los directorios desde el root/ , pero sin el directorio /proc, el cual no contiene ningn dato real.
Todos Juntos!
Como se ha mencionado previamente, tar dispone de un nmero de parmetros para crear archivos comprimidos gzip o bzip2 de una vez. La sintaxis para la variante del comando tar es:
tar -cvzf archive.tar.gzU fichero(s)
En el Archivo
El programa tar almacena mltiples ficheros en un archivo. El nombre del programa (tar es la forma reducida para tape archiver) indica su original uso para la administracin de archivos de grabacin. Pero tar puede hacer ms que concatenar ficheros; tiene opciones para comprimir archivos directamente usando gzip o bzip2 y esto es lo que ofrece los nombres de los archivos tar.gz y tar.bz2. Para colocar mltiples ficheros en un archivo, escribimos
tar -cvf archivo.tar fichero1U fichero2
Si se prefiere usar bzip2 en lugar de gzip con tar, reemplazar la opcin -z en el comando precedente con -j:
tar -cvjf U archive.tar.bz2 fichero(s)
por ejemplo. Las opciones -c, -v y -f, las cuales se encuentran en su forma corta en este comando, le dicen a tar que cree el archivo (c por crear), que informe de lo que est ocurriendo por detrs (v por verboso) y que interprete el primer argumento (archive.tar) como el nombre del archivo (f por fichero). Si se nos ha olvidado de incluir algn fichero, no es necesrio rehacer el archivo completo. Se puede simplemente concatenar al fichero usando la opcin -r.
tar -rf archivo.tar file
Pueden establecerse los parmetros -z y -j apropiadamente cuando se desempaqueta el archivo para evitar un paso extra. Por ejemplo, en lugar de
bunzip2 archive.tar.bz2 tar -xvf archive.tar
Puede tener sentido excluir algunos directorios del archivo, especialmente si se est usando tar para backups. El parmetro --exclude ofrece esta posibilidad. El parmetro --rsh-command tambin resulta til en este contexto, ya que sirve para decirle a tar que use SSH para enviar el backup a otra mquina. El comando completo podra ser algo como:
tar -cvf user@host:/scratchU /tmp/backup_$U (date '+%Y_%m_%d').tar U --rsh-command=/usr/bin/ssh U --exclude=/proc /
se puede escribir
tar -xvjf archive.tar.bz2
Para asegurarse de que tar no sobreescriba ficheros existentes con contenido desde el archivo, es una buena idea desempaquetar el archivo en un directorio temporal, o usar -t en vez de -x para ver el proceso de prueba (t por trial) y ver los ficheros y directorios que contiene el archivo.
Este extenso comando da las siguientes instrucciones: usar SSH para crear una copia de backup en el directorio /scratch/ tmp/ en la mquina host, basando el nombre del archivo en el prefijo del backup, la fecha actual y en la extensin .tar (por ejemplo,
88
Nmero 14
WWW.LINUX- MAGAZINE.ES
LA AUTORA