Mostrando las entradas con la etiqueta archivado. Mostrar todas las entradas
Mostrando las entradas con la etiqueta archivado. Mostrar todas las entradas

viernes, 26 de mayo de 2017

17. Archivado en Linux (tar)


Si tuviera varios archivos para enviar a alguien, podría comprimir cada uno individualmente. Usted tendría una cantidad menor de datos en total que si envió archivos sin comprimir, pero todavía tendría que tratar con muchos archivos al mismo tiempo.

Archivar es la solución a este problema. La utilidad UNIX tradicional para archivar archivos se llama tar, que es una forma corta de TApe aRchive. Tar se utilizó para transmitir muchos archivos a una cinta para copias de seguridad o transferencia de archivos. Tar toma varios archivos y crea un archivo de salida único que se puede dividir de nuevo en los archivos originales en el otro extremo de la transmisión.

Tar tiene 3 modos:
  • Crear: crear un nuevo archivo de una serie de archivos
  • Extraer: extraer uno o más archivos de un archivo
  • Lista: muestra el contenido del archivo sin extraer

Aquí, mostramos un archivo tar, también llamado tarball, que se crea a partir de registros de acceso múltiples.

bob:tmp $ tar -cf access_logs.tar access_log*
bob:tmp $ ls -l access_logs.tar
-rw-rw-r-- 1 sean sean 542720 Oct 12 21:42 access_logs.tar

Crear un archivo requiere dos opciones con nombre. La primera, c, especifica el modo. El segundo, f, indica a tar que espera un nombre de archivo como el siguiente argumento. El primer argumento en el ejemplo anterior crea un archivo llamado access_logs.tar. Los demás argumentos se toman como nombres de archivo de entrada, ya sea como comodín, una lista de archivos o ambos.

El ejemplo anterior hace un listado de directorio largo del archivo creado. El tamaño final es 542.720 bytes que es ligeramente mayor que los archivos de entrada. Tarballs se puede comprimir para facilitar el transporte, ya sea por gzipping el archivo o por tener tar hacerlo con la bandera z de la siguiente manera:

bob:tmp $ tar -czf access_logs.tar.gz  access_log*
bob:tmp $ ls -l access_logs.tar.gz
-rw-rw-r-- 1 sean sean 46229 Oct 12 21:50 access_logs.tar.gz
bob:tmp $ gzip -l access_logs.tar.gz
         compressed        uncompressed  ratio uncompressed_name
              46229              542720  91.5% access_logs.tar

El ejemplo anterior muestra el mismo comando que el ejemplo anterior, pero con la adición del parámetro z. La salida es mucho más pequeña que el tarball en sí, y el archivo resultante es compatible con gzip

Aunque UNIX no trata extensiones de archivos especialmente, la convención es usar .tar para archivos tar, y .tar.gz o .tgz para archivos tar comprimidos
Puede utilizar bzip2 en lugar de gzip sustituyendo la letra j por z y utilizando .tar.bz2, .tbz o .tbz2 para una extensión de archivo (por ejemplo, tar -cjf file.tbz access_log *).

Dado un archivo tar, comprimido o no, puede ver lo que hay en él mediante el comando t:

bob:tmp $ tar -tjf access_logs.tbz
logs/
logs/access_log.3
logs/access_log.1
logs/access_log.4
logs/access_log
logs/access_log.2

Este ejemplo utiliza 3 opciones:

t: lista de archivos en el archivo
j: descomprimir con bzip2 antes de leer
f: opera sobre el nombre de archivo dado access_logs.tbz

A continuación, se muestra el contenido del archivo comprimido. Puede ver que un directorio estaba prefijado a los archivos. Tar se recurse en subdirectorios automáticamente al comprimir y almacenará la información de ruta dentro del archivo.

Finalmente puede extraer el archivo con el indicador -x:

bob:tmp $ tar -xjf access_logs.tbz
bob:tmp $ ls -l
total 36
-rw-rw-r-- 1 sean sean 30043 Oct 14 13:27 access_logs.tbz
drwxrwxr-x 2 sean sean  4096 Oct 14 13:26 logs
bob:tmp $ ls -l logs
total 536
-rw-r--r-- 1 sean sean 372063 Oct 11 21:24 access_log
-rw-r--r-- 1 sean sean    362 Oct 12 21:41 access_log.1
-rw-r--r-- 1 sean sean 153813 Oct 12 21:41 access_log.2
-rw-r--r-- 1 sean sean   1136 Oct 12 21:41 access_log.3
-rw-r--r-- 1 sean sean    784 Oct 12 21:41 access_log.4
Agregue el indicador -v y obtendrá una salida detallada de los archivos procesados. Esto es útil para que pueda ver lo que está sucediendo:

bob:tmp $ tar -xjvf access_logs.tbz
logs/
logs/access_log.3
logs/access_log.1
logs/access_log.4
logs/access_log
logs/access_log.2

Bibliografía

NDG Linux Essentials - Chapter 7 - Archiving and Compression

16. Archivado y compresión en Linux

El archivado de archivos se utiliza cuando uno o más archivos necesitan ser transmitidos o almacenados de la manera más eficiente posible. Hay dos aspectos a esto:
  • Archivando: Combinando múltiples archivos en uno, lo que elimina la sobrecarga en archivos individuales y facilita la transmisión
  • Comprimir: Reducir los archivos eliminando información redundante

Puede archivar varios archivos en un único archivo y comprimirlo, o puede comprimir un archivo individual. El primero se conoce como archivo, mientras que el último se llama compresión. Cuando usted toma un archivo, descomprímalo y extrae uno o más archivos, usted lo está des-archivando.

A pesar de que el espacio en disco es relativamente barato, el archivo y la compresión aún tienen valor:
  • Si desea hacer un gran número de archivos disponibles, como el código fuente de una aplicación o una colección de documentos, es más fácil para las personas descargar un archivo comprimido que descargar archivos individuales.
  • Los archivos de registro tienen el hábito de llenar los discos, por lo que es útil dividirlos por fecha y comprimir versiones anteriores.
  • Cuando realiza una copia de seguridad de los directorios, es más fácil guardarlos todos en un archivo que hacerlo en cada archivo.
  • Algunos dispositivos de transmisión, como cintas, funcionan mejor si envía un flujo de datos en lugar de archivos individuales.
  • A menudo puede ser más rápido comprimir un archivo antes de enviarlo a una unidad de cinta o sobre una red más lenta y descomprimirlo en el otro extremo de lo que sería para enviarlo sin comprimir.

Comprimir archivos

La compresión de los archivos los hace más pequeños eliminando la duplicación de un archivo y almacenándola de tal manera que se pueda restaurar el archivo. El algoritmo de compresión es un procedimiento que la computadora hace para codificar el archivo original, y como resultado lo hace más pequeño. Los científicos informáticos investigan estos algoritmos y proponen mejores que pueden trabajar más rápido o hacer que el archivo de entrada sea más pequeño.

Tipos de compresión

  • Con pérdidas: No se quita ninguna información del archivo. Comprimir un archivo y descomprimirlo deja algo idéntico al original.
  • Sin pérdidas: La información puede quitarse del archivo a medida que se comprime, de modo que la descompresión de un archivo dará lugar a un archivo que es ligeramente diferente del original. Por ejemplo, una imagen con dos tonos sutilmente diferentes de verde podría hacerse más pequeña tratando esos dos tonos como iguales. A menudo, el ojo no puede escoger la diferencia de todos modos.
Generalmente los ojos y los oídos humanos no notan imperfecciones leves en cuadros y el audio, especialmente como se exhiben en un monitor o se tocan sobre los altavoces. La compresión con pérdidas a menudo beneficia a los medios porque resulta en tamaños de archivo más pequeños y la gente no puede distinguir entre el original y la versión con los datos modificados. Para cosas que deben permanecer intactas, como documentos, registros y software, necesita compresión sin pérdidas.

La mayoría de los formatos de imagen, como GIF, PNG y JPEG, implementan algún tipo de compresión con pérdidas. En general, puede decidir cuánta calidad desea conservar. Una calidad inferior resulta en un archivo más pequeño, pero después de la descompresión puede notar artefactos como bordes ásperos o decoloraciones. La alta calidad se parecerá mucho a la imagen original, pero el tamaño del archivo será más cercano al original.

Linux proporciona varias herramientas para comprimir archivos, el más común es gzip. Aquí mostramos un archivo de registro antes y después de la compresión.

bob:tmp $ ls -l access_log*
-rw-r--r-- 1 sean sean 372063 Oct 11 21:24 access_log
bob:tmp $ gzip access_log
bob:tmp $ ls -l access_log*
-rw-r--r-- 1 sean sean 26080 Oct 11 21:24 access_log.gz
Gzip le dará esta información si lo pide, usando el parámetro -l, como se muestra aquí:

bob:tmp $ gzip -l access_log.gz
      compressed     uncompressed  ratio uncompressed_name
           26080           372063  93.0% access_log
Aquí, puede ver que la relación de compresión se da como 93%, que es la inversa de la relación 14:1, es decir 13/14.

Lo contrario del comando gzip es gunzip. Alternativamente, gzip -d hace lo mismo.
Gzip también puede actuar como un filtro que significa que no lee ni escribe nada al disco, sino que recibe datos a través de un canal de entrada y lo escribe a un canal de salida.

Hay otro par de comandos que operan virtualmente idénticamente a gzip y gunzip. Estos son bzip2 y bunzip2. Las utilidades de bzip utilizan un algoritmo de compresión diferente que puede comprimir archivos más pequeños que gzip a expensas de más tiempo de CPU. Puede reconocer estos archivos porque tienen una extensión .bz o bz2 en lugar de .gz.

Bibliografía

NDG Linux Essentials - Chapter 7 - Archiving and Compression