Uso de Tar

Este es un post que escribí hace mucho tiempo y que noté en las estadísticas que tenía varios accesos así que lo traigo de vuelta más actualizado.

Introducción

Tar (Tape archive) se refiere a dos cosas: Una es un formato que se desarrolló hace mucho tiempo, en los inicios de UNIX con el fin de facilitar los respaldos en cinta. Para ello junta muchos archivos en uno solo, conservando su estructura de directorios y permisos entre otras cosas.
Otra es el programa que se encarga de trabajar con archivos en formato tar.
Actualmente su funcionalidad se ha extendido más allá del respaldo en cinta, agregando compresión (bzip2, gzip, etc) o pudiendo dirigir la salida a dispositivos, programas, otros archivos, etc.
Un uso popular es que prácticamente todo el código fuente que se distribuye está en un formato .tar.gz, .tar.bzip, .tar.xz, etc.

Tar está presente por defecto en todas las instalaciones de Linux desde el primer momento (al menos nunca he visto lo contrario).

Compresión

Tar no sólo permite agrupar archivos en un mismo paquete si no que también aplicar distintos algoritmos de compresión. Dentro de algunos de los tipos de archivo que puede manejar tar, se encuentran:

  • .tar: sin compresión, sólo agrupa archivos en uno solo.
  • .tar.gz: archivo comprimido con gzip
  • .tar.bz2: archivo comprimido con bzip2
  • .tar.lzma: archivo comprimido con lzma

Para elegir cual usar, se debe pasar un parámetro que indique el método de compresión. Es importante destacar que para comprimir o descomprimir se debe contar con las bibliotecas necesarias para dicho propósito.
La comparación entre los diferentes métodos de compresión escapa del tema del uso de esta guía pero lo ampliaré a futuro.

Crear un archivo

Si se revisa el manual de tar (man tar) se puede obtener una lista de todos los parámetros que se pueden pasar en la línea de comandos.
Una versión en línea se encuentra en http://www.openbsd.org/cgi-bin/man.cgi?query=tar (en inglés), sin embargo las opciones que son usadas más frecuentemente son para creación de archivos son :

  • -c : crea un archivo
  • -r : agrega archivos a un .tar ya existente, sin embargo no sirve para archivos .tar comprimidos
  • -f : especifica el nombre de un archivo de salida
  • -w : permite renombrar los archivos interactivamente, si se desea que tengan un nombre distinto al original en el archivo resultante.
  • -j : Comprime usando bzip2
  • -z : Comprime usando gzip
  • -Z : Comprime usando compress
  • –lzma : Comprime usando lzma
  • –lzop : Comprime usando lzop
  • -v : muestra por pantalla lo que se está procesando

La sintaxis básica de tar es:

tar (opciones) (nombre_de_archivo_resultante) (nombre_de archivos_a_comprimir)

A modo de ejemplo, si tenemos dos archivos, digamos 1.gif, 2.gif y una carpeta que se llame fotos, podemos hacer lo siguiente:
Creamos un .tar así:

tar cf imagenes.tar 1.gif 2.gif fotos

Lo que nos dará como resultado imagenes.tar con los archivos y carpetas dentro de dicho archivo.
Si queremos agregar un archivo 3.gif a imagenes.tar ejecutamos:

tar rf imagenes.tar 3.gif

Si queremos agregar compresión, por ejemplo usando gzip:

tar cfz imagenes.tar.gz 1.gif 2.gif fotos

Tambien podemos usar comodines para ahorrarnos mucho trabajo en carpetas con muchos archivos. Si quisieramos hacer un archivo comprimido con bzip2 (por ejemplo) y que  sólo contenga archivos .gif ejecutamos lo siguiente:

tar -jcf imagenes.tar *.gif

Incluso podemos fusionar (concatenar) archivos .tar para evitar tener que desempaquetarlos y reempaquetarlos. Por ejemplo si tenemos dos archivos 1.tar y 2.tar, los unimos así:

tar –concatenate -f 1.tar 2.tar

De este modo,  1.tar contará con el contenido de 2.tar

Extracción de un archivo

Los parámetros para extraer un archivo son los siguientes

  • -t : lista el contenido de un archivo
  • -x : extrae un archivo
  • -v : muestra por pantalla lo que se está procesando

Entonces, por ejemplo si queremos extraer los contenidos de un archivo 1.tar en el directorio actual. El comando es:

tar xf 1.tar

Para archivos comprimidos, en teoría basta con usar el comando anterior, sin embargo podemos especificar la compresión que se usó para mayor seguridad. Por ejemplo para un archivo 1.tar.gz, lo extraemos como:

tar -xzf 1.tar.gz

Si sólo queremos extraer un archivo del .tar, agregamos al final del comando el archivo que deseamos. Por ejemplo para extraer readme.txt de 1.tar, sería:

tar xzf 1.tar readme.txt

Si en vez de extraer los archivos, sólo queremos listarlos, usamos -t :

tar tf 1.tar

La opción -v (tanto para crear como para extraer) sirve para que el programa muestre uno por uno los archivos que va procesando y a que directorio se extraen o bien cuales se agregan al paquete. Así por ejemplo:

tar xvzf 1.tar.gz

retornará

1.gif
2.gif
3.gif
/fotos/1.jpg

Una opción interesante es -C, la cual permite establecer un directorio de salida para los archivos extraidos para así evitar tener que copiar el .tar respectivo a la carpeta de destino. Un ejemplo práctico es descomprimir el código fuente del kernel. El código fuente del kernel 4.0 es linux-4.0.tar.xz. Si queremos descomprimirlo en /usr/src, usamos :

tar -C /usr/src -xJf linux-4.0.tar.bz2

Borrado de archivos

Uno puede borrar archivos que estén dentro de un paquete tar (sin compresión) usando –delete. Por ejemplo para borrar 1.gif de el archivo imagenes.tar:

tar –delete -f imagenes.tar 1.gif

 

Espero que este post del uso de tar sea de ayuda a todos quienes tienen que trabajar con esta herramienta. Intentaré mantener la lista actualizada y escribir acerca de la compresión de archivos