23 de enero de 2021

Empaquetado y Compresión en Linux


El Empaquetamiento de Archivos se utiliza cuando uno o más archivos se tienen que transmitir o almacenar lo más eficientemente posible. Hay dos aspectos:

  • El Empaquetamiento Combina varios archivos en uno solo, lo que elimina la sobrecarga en archivos individuales y los hace más fácil de transmitir.
  • Compresión Hace los archivos más pequeños mediante la eliminación de información redundante, aunque comprimir un archivo ya comprimido no lo hará más pequeño.

 

Compresión

 Linux proporciona varias herramientas para comprimir los archivos, la más común es gzip

gzip nombre_del_archivo.gz

 

gzip puede también actuar como un filtro que no lee ni escribe nada en el disco sino recibe datos a través de un canal de entrada y los escribe a un canal de salida.

 user:tmp $ mysqldump -A | gzip > database_backup.gz

user:tmp $ gzip -l database_backup.gz

         compressed        uncompressed  ratio uncompressed_name

              76866             1028003  92.5% database_backup

 

El comando mysqldump –A da salidas a los contenidos de las bases de datos de MySQL locales a la consola. El carácter | (barra vertical) dice "redirigir la salida del comando anterior en la entrada del siguiente". El programa para recibir la salida es gzip, que reconoce que no se dieron nombres de archivo por lo que debe funcionar en modo de barra vertical. Por último,  > database_backup.gz  significa "redirigir la salida del comando anterior en un archivo llamado database_backup.gz. La inspección de este archivo con  gzip –l  muestra que la versión comprimida es un 7.5% del tamaño original, con la ventaja de que el archivo más grande jamás tuvo que ser escrito a disco.

 

Lo contrario del comando gzip es el comando gunzip. Por otra parte, gzip –d hace la misma cosa; gunzip es sólo un script que invoca el comando gzip con los parámetros correctos.

Hay otro par de comandos que operan prácticamente idénticamente al gzip y gunzip. Éstos son el bzip2 y bunzip2. Estos archivos tienen una extensión .bz o .bz2 en vez de .gz.

 

Empaquetado

 La utilidad tradicional de UNIX para archivar los ficheros es la llamada tar, que es una abreviación de TApe aRchive (o «archivo de cinta» en español). Tar toma varios archivos y crea un único archivo de salida que se puede dividir otra vez en los archivos originales.

 

Tar tiene 3 modos:

  • Crear: hacer un archivo nuevo de una serie de archivos (Create)
  • Extraer: sacar uno o más archivos de un archivo (eXtract
  • Listar: mostrar el contenido del archivo sin extraer (t

 

La creación de un archivo tarball requiere dos opciones. La primera, c, especifica el modo. La segunda, f, le dice a tar que espere un nombre de archivo como el siguiente argumento. Y después una lista de archivos o un carácter comodín, o ambos.

 user:tmp $ tar -cf access_logs.tar access_log*

 

El primer argumento en el ejemplo anterior crea un archivo llamado access_logs.tar. El resto de los argumentos se toman para ser nombres de los archivos de entrada, ya sea un comodín, una lista de archivos o ambos. En el ejemplo, se utilizó la opción comodín para incluir todos los archivos que comienzan con access_log.

 

Los tarballs pueden ser comprimidos para transporte más fácil, ya sea comprimiendo un archivo con gzip o diciéndole a tar que lo haga con la a opción z tal como se muestra a continuación:

 user:tmp $ tar -czf access_logs.tar.gz  access_log*

 

UNIX no trata las extensiones de archivo especialmente, la convención es usar .tar para los archivos tar y .tar.gz o .tgz para los archivos tar comprimidos. Se puede utilizar bzip2 en vez de gzip sustituyendo la letra z con j y usando .tar.bz2,.tbz, o .tbz2 para una extensión de archivo (por ejemplo tar –cjf file.tbz access_log*).

 

En el archivo tar, comprimido o no, puedes ver lo que hay dentro utilizando el comando t:

 user:tmp $ tar -tjf access_logs.tbz

 

Este ejemplo utiliza 3 opciones:

  • t: listar documentos en el archivo en el archivo empaquetado
  • j: descomprimir con bzip2 antes de la lectura
  • f: operar en el nombre de archivo access_logs.tbz

 

Finalmente, se puede extraer el archivo con la marca –x:

 user:tmp $ tar -xjf access_logs.tbz

 

Añade la opción –v y obtendrás una salida detallada de los archivos procesados.

 user:tmp $ tar -xjvf access_logs.tbz

 

Es importante mantener la opción –f al final, ya que el tar asume que lo que sigue es un nombre de archivo. Si se utiliza un pipe, no se especifica un archivo con –f, por lo que el tar leerá la entrada estándar.

 

Si sólo se requieren algunos documentos del archivo empaquetado se pueden agregar sus nombres al final del comando, pero por defecto deben coincidir exactamente con el nombre del archivo o se utiliza un patrón:

 user:tmp $ tar -xjvf access_logs.tbz logs/access_log

 

ZIP

 La utilidad del empaquetamiento de archivos en el mundo de Microsoft es el archivo ZIP. No es tan frecuente en Linux pero también es compatible con los comandos zip y unzip.

 

El modo predeterminado del zip es añadir documentos a un archivo y comprimir.

 bob:tmp $ zip logs.zip logs/*

 

Zip no se efectuará de manera recursiva hacia los subdirectorios por defecto, lo que es un comportamiento diferente del tar. Es decir, simplemente añadiendo logs en vez de logs/* sólo añadirá un directorio vacío y no los archivos dentro de él. Si quieres que zip se comporte de manera parecida, debes utilizar el comando –r para indicar que se debe usar la recursividad:

 bob:tmp $ zip -r logs.zip logs

 

El listado de los archivos en el zip se realiza por el comando unzip y la opción –l (listar):

 bob:tmp $ unzip -l logs.zip

 

Extraer los archivos es como crear el archivo, ya que la operación

predeterminada es extraer:

 bob:tmp $ unzip logs.zip


Tabla Resumen

Comando

Opciones

Descripción

Extensión

gzip

 

Comprime

.gz

 

-l

Muestra el nivel de compresión

 

 

-d

Descomprime

 

gunzip

 

Script para descomprimir

.gz

bzip2

 

Comprime

.bz o .bz2

bunzip2

 

Descomprime

.bz o .bz2

 

 

 

 

 

 

 

 

tar

 

tar [-opciones] [archivoTar] [ListaArchivos]

.tar

 

-c

Crear tar

 

 

-x

Extraer tar

 

 

-t

Listar archivos empacados

 

tar

-f

Indica el nombre del archivo (necesario)

 

 

 

 

 

 

-z

Compresión con gzip

.tar.gz o .tgz 

 

-j

Compresión con bzip2

.tar.bz2,.tbz, o .tbz2 

 

 

 

 

 

-v

Salida detallada

 

 

 

 

 

zip

 

 

.zip

unzip

 

 

.zip

Tabla: elaboración propia

Fuentes consultadas:
(2020) Cisco Networking Academy / Network Development Group 

No hay comentarios.: