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

No hay comentarios.:

Publicar un comentario