Resumen de comando TAR para compresión y backups

La orden tar

La utilidad tar (Tape Archiver) es una herramienta de fácil manejo disponible en todas las versiones de Unix y la mayoría de Posix que permite volcar ficheros individuales o directorios completos en un único fichero; inicialmente fue diseñada para crear archivos de cinta (esto es, para transferir archivos de un disco a una cinta magnética y viceversa), aunque en la actualidad casi todas sus versiones pueden utilizarse para copiar a cualquier dispositivo o fichero, denominado `contenedor’.

Si deseas mas información y algo de historia del comando de la definición puedes mirar la página del proyecto GNU y Tar

Sintaxis y funciones comunes

La sintaxis para tar es:

tar archivo_a_crear

Las funciones más comúnmente utilizadas son:

-c: Crea un contenedor
-x: Extrae archivos de un contenedor
-t: Testea los archivos almacenados en un contenedor
-v: Modo verbose
-f: Especifica el nombre del contenedor
-Z: Comprime o descomprime mediante compress/uncompress (obsoleto)
-z: Comprime o descomprime mediante gzip
-j: Comprime o descomprime mediante bzip2
-p: Conserva los permisos de los ficheros

Ejemplos prácticos

Para estos ejemplos voy a generar “contenedores” del directorio, subidrectorios y archivos que se encuentran en /var/log y los voy a guardar en la carpeta /tmp. Recordemos que tar maneja el concepto de”contenedor” (el los crea, no los comprime, por lo que es necesario pasarle parámetros adicionales para que realice la compresión) por esto lo que primero explico es como crearlo y luego comprimirlos.

1. Crear un contenedor sin comprimir y luego verificar su contenido

$ tar -cvf /tmp/ejemplo1.tar /var/log

$ tar -tvf /tmp/ejemplo1.tar

2. Crear un contenedor comprimido con gzip y luego verificar su contenido

$ tar -czvf /tmp/ejemplo2.tar.gz /var/log

$ tar -tzvf /tmp/ejemplo2.tar.gz

3. Crear un contenedor comprimido con bzip2 y luego verificar su contenido

$ tar -cjvf /tmp/ejemplo3.tar.bz2 /var/log

$ tar -tjvf /tmp/ejemplo3.tar.bz2

4. Extraer los datos almacenados en el contenedor sin comprimir, luego del comprimido con gzip y por ultimo el que fue creado con bzip2.Lo descomprime en el directorio donde estamos ubicados.

$ tar -xvf ejemplo1.tar

$ tar -xzvf ejemplo2.tar.gz

$ tar -xjvf /tmp/ejemplo3.tar.bz2

5. Eliminar archivo /var/log/borrame.txt del “contenedor” simple (sin compresión). Para saber si el archivo existe en el archivo se puede antes utilizar:

$ tar -tvf ejemplo1.tar | grep borrame.txt

y luego para borrarlo

$ tar -v –delete var/log/borrame.txt -f ejemplo1.tar

Es de resaltar en este punto que la opción -f siempre especifica el nombre del archivo a crear.

También cabe señalar que no es posible realizar este proceso de borrado en archivos comprimidos como muestra el ejemplo a continuación:

$ tar -zv –delete var/log/messages.0 -f ejemplo2.tar.gz
tar: No se pueden actualizar archivos comprimidos
Intente`tar –help’ o `tar –usage’ para mayor información.

6. Generar un archivo comprimido utilizando una larga lista de archivos

Si quisiéramos ingresar varios archivos de diferentes sitios por lo general seria necesario especificar el nombre de cada archivo o el directorio y el archivo que quisiéramos agregar en el “contenedor comprimido”. Pero esto seria algo “fastidioso” si las rutas o archivos fueran muchos y largos. No seria mejor que tomara los datos de un archivo y comprimiera esos directorios?

El archivo puede tener cualquier nombre y los directorios o archivos deben estar separados con un espacio (deben tener la ruta completa preferiblemente) Quiero hacerle backup a estos archivos, por lo que lo coloco en un archivo que llamé listadito… contenido de archivo: (separado con espacio cada archivo o directorio)

/etc/passwd /var/log/dm* /home/mmejiav/docs/h_vida_mmejiav.pdf /var/log/messages /sbin
luego el comando sería:

$ tar -cjvf /tmp/ejemplar.tar.bz2 $(cat listadito)

Para finalizar se puede decir que existen infinidad de combinaciones que pueden solucionar las necesidades particulares del usuario. Por esto invito a buscar en google (la mayor fuente de información) o en la documentación (man)

Comando rsync para copias remotas

La necesidadcopy-logo

Hacer una copia de seguridad de los datos de mi pc local a un pc remoto el cual solo tiene el sistema operativo básico (nada de entorno gráfico) y bastante espacio libre en el disco duro.

Con scp demoraba demasiado, así que me obligue a buscar otra solución

El comando y las opciones

Según nuestra amiga la wikipedia

“Rsync es una aplicación para sistemas de tipo Unix que ofrece transmisión eficiente de datos incrementales comprimidos y cifrados. Mediante una técnica de delta encoding, permite sincronizar archivos y directorios entre dos máquinas de una red o entre dos ubicaciones en una misma máquina, minimizando el volumen de datos transferidos.”

Si deseas saber mas información sobre la aplicación puedes consultar en la wikipedia la información

El comando que utilicé dice básicamente:

$ rsync -uarmzhP –delete –rsh=ssh –stats /local/dir user@ipremota:/remote/dir

Las opciones son:

-u : update

-a: archive mode

-r: recursive

-m: no envía los directorios vacíos

-z: comprime mientras transfiere (así se ahorra tiempo y ancho de banda)

-h: presentación para humanos

-P: muestra el progreso de la copia

–delete: borra en el destin0 los archivos que ya no estén en el origen

–rsh: especifica el shell remoto a usar (en este ejemplo ssh)

–stats: entrega alguna información por cada archivo que transfiere

Nota: las 3 ultimas opciones tienen dos guiones unidos (– –)

Luego se coloca el directorio origen de la información (para el ejemplo /local/dir) y a continuación el usuario, símbolo de arroba y dirección ip de la máquina destino y también el directorio destino (user@ipremota:/remote/dir) estas opciones en la máquina destino se deben a que estamos usando ssh como protocolo de transferencia.

Por ultimo pide el passwd del usuario en la maquina destino y listo… comienza la copia.

Otra opción bastante poderosa es:

“–exclude-from=nofiles”

El archivo “nofiles” (puede ser cualquier nombre) es un archivo en el cual se colocan los archivos a no hacer backup, separados en líneas diferentes. Por ejemplo:

*.avi

*.mpg

*.mp3

Al ser tan complejo y poderoso se pueden utilizar muchas otras opciones… puedes mirar el sitio web de rsync para encontrar más opciones y ejemplos. O también con man rsync se encuentran otras opciones.

Un nuevo comienzo

En ocasiones es necesario un nuevo comienzo para avanzar más rápido
Hoy 21 de mayo comencé a trabajar en una nueva empresa ocupando el cargo de DevOps
Durante mi carrera profesional me he desempeñado como SysAdmin administrando servidores físicos y virtuales así como temas en la nube.
Pero el mercado actual se está enfocando en el área de DevOps y herramientas en la nube más avanzadas que crear una simple máquina (física o virtual)
Gracias a este nuevo empleo espero mejorar mis conocimientos en el área y apoyar / aprender más sobre el tema.
Antes manejaba este blog en otro sitio pero por cosas del destino (mala administración) el contenido anterior se perdió, por esto considero que es momento de cambiar el enfoque de mi blog y por esto utilizaré una herramienta simple para escribir más seguido contenido y despreocuparme de temas administrativos del mismo.
Por este motivo elegí WordPress en su plan pago como sistema para manejo de contenidos.