Saltar la navegación

tar

Los términos archivo y fichero son equivalentes, y así los hemos utilizado hasta ahora, pero en el contexto de la orden tar, un archivo es un fichero que contiene a otros ficheros. Durante esta explicación se hará la distinción de los dos conceptos y en posteriores explicaciones el contexto aclarará a qué nos estamos refiriendo con la palabra archivo.

Se llama archivo (también compendio) a un fichero que contiene muchos otros ficheros (miembros), así como información sobre estos. El archivo contiene el nombre de los ficheros, sus propietarios, tamaños y otros atributos.

Entre las utilidades que tiene la creación de archivos están:

  • Como copia de seguridad de un grupo de ficheros, para poder restaurarlos en caso de pérdida o deterioro.
  • Para agrupar un conjunto de ficheros con el fin de proceder a su transmisión a otro ordenador.
  • Para guardar un conjunto de ficheros como si se tratara de uno solo. Esto es útil cuando estamos cerca del límite de i-nodos que el root nos ha asignado.

GNU/Linux suele suministrar varios programas para archivar (archivadores). Uno de los más utilizados es el comando tar.

El comando tar nos permite almacenar ficheros en un archivo y recuperarlos posteriormente. Los ficheros que forman parte de un archivo se suelen denominar miembros. Una vez creado el archivo se pueden realizar las siguientes operaciones sobre él:

  • Añadir más miembros.
  • Borrar miembros.
  • Actualizar miembros.
  • Extraer alguno o todos los miembros del archivo, es decir, copiarlos desde este a un directorio.
  • Ver el contenido de un archivo.

Debemos recordar que cuando se crea un archivo no se borran los ficheros originales y, del mismo modo, cuando se extraen los miembros de un archivo estos no desaparecen de él.

La sintaxis general de la orden tar es:

tar función  [modificador...]  [fichero...]

El apartado función indica la operación a realizar (añadir, borrar, etc.); modicador especifica las características de la función y fichero es el nombre de los miembros del archivo con los que va a trabajar la orden tar

Como función solo se puede poner una, y son las siguientes:

FUNCIÓN   SIGNIFICADO
-c Crear un archivo.
-r Añadir a un archivo.
-x Extraer de un archivo.
-t Listar los miembros de un archivo.
-u Actualizar los miembros de un archivo si no existen o son más recientes.  
--delete Eliminar miembros de un archivo.

Modificadores que pueden añadirse a la función:

MODIFICADOR   SIGNIFICADO
-v Muestra información sobre la evolución del trabajo que está haciendo la orden tar.
-f archivo Indica cual va a ser el fichero que hará de archivo. Se le suele poner la extensión .tar.
-f - Hace que el archivo sea la entrada estándar o la salida estándar según la función con la que se trabaje.
-z Comprime a la vez que archiva. Usa gzip. A un archivo comprimido se le suele poner la extensión .tar.gz o tgz.
--recursion Recorre los directorios de forma recursiva (opción por defecto).
--no-recursion Evita recorrer los directorios de forma recursiva.
--remove-file Borra los ficheros conforme los va archivando.
--exclude=patrón   Excluye de la operación de archivado los ficheros que cumplan con el patrón. Pueden ponerse varias opciones exclude.
-j Comprime con bzip2.
--totals Muestra el total de bytes de los miembros con los que ha trabajado.
--exclude-from fichero    Excluye de la operación de archivado los ficheros que cumplan con alguno de los patrones que se encuentran en fichero.
-C directorio Especifica el directorio donde extraer los miembros. Por defecto es el directorio de trabajo.
--wildcards Permite a la orden tar interpretar caracteres comodines (*, ?, []) no solo en las exclusiones.
-P No quita la / del inicio de los nombres de los ficheros, por lo que guarda las rutas absolutas cuando estas se especifican así.

Archivamos dos ficheros para guardarlos como copia de seguridad:

$ tar -cf backup.tar ls.man rm.man

Lo mismo pero con el archivo comprimido:

$ tar -czf backup.tar.gz ls.man rm.man

Archivamos el directorio tmp haciendo que tar muestre información del proceso y un total al final:

$ tar -cvf backup.tgz --totals tmp
tmp/
tmp/rm.man
tmp/a/
tmp/a/b/
tmp/a/b/c/
tmp/a/b/c/f.txt~
tmp/a/b/c/f.txt
tmp/ls.man
Total bytes written: 71680 (70KiB, 17MiB/s)

Lo mismo de antes pero excluimos las copias de seguridad:

$ tar -cvf backup.tgz --exclude=*~ --totals tmp
tmp/
tmp/rm.man
tmp/a/
tmp/a/b/
tmp/a/b/c/
tmp/a/b/c/f.txt
tmp/ls.man
Total bytes written: 51200 (50KiB, 12MiB/s)

Mostramos el contenido de un archivo:

$ tar -tf backup.tgz 
tmp/
tmp/rm.man
tmp/a/
tmp/a/b/
tmp/a/b/c/
tmp/a/b/c/f.txt
tmp/ls.man

 Extraemos un miembro de backup.tgz:

$ tar -xzf backup.tgz tmp/a/b/c/f.txt

El fichero tmp/a/b/c/f.txt se extrae con la misma ruta (si no existe se crea) a partir del directorio de trabajo y si existiera se sobrescribiría.

Para usar bzip2 como compresor escribiremos los modificadores zj, pero también lo podríamos hacer así:

$ tar -cf - tmp | bzip2 -c > backup.tar.bz2

 Si queremos archivar guardando la ruta absoluta debemos usar la opción -P:

$ tar -cf archivo.tar /etc/passwd
tar: Eliminando la `/' inicial de los nombres
$ tar -tf archivo.tar
etc/passwd
$ rm archivo.tar
$ tar -cPf archivo.tar /etc/passwd
$ tar -tf archivo.tar
/etc/passwd

Licencia: licencia de software libre GPL