Bash Scripting en Linux (VIII). Ejemplo: Realizar un Backup y Enviarlo a una Unidad Externa

Muy buenas. Ahí va otro post de la serie de Linux Scripting. Ahora que ya conoces el entorno de Bash, la sintaxis básica del lenguaje, los pasos a seguir para crear y ejecutar tu primer script de forma manual, e incluso las formas que tienes para programar la ejecución de tu script en el arranque del sistema, es hora de ir a por la parte de ejemplos prácticos.

Este es el tercer ejemplo que te muestro de script con Bash. En este caso, verás como programar un script que te permita, cada vez que lo ejecutes, realizar un backup del directorio que le indiques a una unidad externa. Además, al final, también te expicaré como programar su ejecución automática según la periodicidad que tu decidas. ¡Vamos allá!

Tabla de contenidos:

  1. Descripción y propósito del script
  2. Condiciones de ejecución
  3. Creación del script
  4. Código fuente
  5. Ejecución del script
  6. Programar la ejecución del script
  7. Continuación

Descripción y Próposito del Script

En este ejemplo, como he comentado al principio, te enseñare a programar un script que se encargará de hacer un backup periodico de un directorio concreto (en este ejemplo tomaremos la carpeta Documentos dentro de la Home del usuario local), comprimirlo en un fichero con formato .tar.gz, y enviar el fichero comprimido en una ubicación externa.

Condiciones de Ejecución

Este script debería poder funcionar correctamente en cualquier distribución GNU/Linux, sin tener en cuenta ningún requisito previo, a nivel de instalación de herramientas adicionales.

El punto más importante aqui será definir correctamente las rutas del directorio del que quieres realizar la copia de seguridad, y, sobretodo, de la unidad externa en la que querrás guardar el archivo comprimido con la copia.

En mi caso, como directorio de partida, he definido la carpeta Documentos, pero esto corresponde a mi caso de uso particular.

Como unidad externa, he utilizado la ruta estándar que GNU/Linux suele utilizar para apuntar a las unidades externas conectadas medinte USB, pero esto deberías adaptarlo en tu caso concreto, y comprobar que la ruta apunta a la unidad que te interesa.

Creación del Script

A continuación te dejo los pasos que debes seguir para crear y ejecutar el script, y en el siguiente apartado te dejo el código del mismo, que luego tu mismo podrás adaptar segun tus preferencias.

  1. Abrir un nuevo fichero de texto con tu editor de texto favorito. Puedes utilizar un editor gráfico como Gedit en GNOME, o un editor por consola como Vim.
  2. Copiar el código del script que tienes a continuación, y adaptarl a tus preferencias particulares en caso de que lo desees.
  3. Guardar el archivo en la ubicación que desees dentro de tu Home. El fichero puede tener el nombre que desees, pero debe terminar con la extensión .sh.

Código Fuente

A continuación tienes el código que debes copiar en el fichero recién creado.

#!/bin/bash

# Definición de la variable que almacena la ruta con el directorio del que quieres realizar el backup
# Como ruta he elegido la carpeta Documentos dentro del directorio Home de mi usuario local
directorio="/home/mi-usuario/Documentos";

# Definición de la variable que almacena el nombre del fichero que contendrá el fichero comprimido con la copia de seguridad
backup="backup-documentos-$(date +'%Y-%m-%d').tar.gz"

# Definición de la variable que almacena la ruta de la unidad externa en la que almacenar el backup
unidad="/dev/sdb1"

# Realizar la copia de seguridad y comprimirla en un fichero .tar.gz.
tar -czf $backup $directorio

# Comprobar si la unidad externa está montada
if mountpoint -q $unidad; then
    # Copiar el fichero comprimido con la copia de seguridad en la unidad externa
    cp $backup $unidad
    # Borrar el fichero comprimido de la ubicación de origen
    rm -rf $backup
else
    echo "Error"
fi

Como verás, el código fuente de este script es realmente corto, y no requiere conocer muchos comandos.

Al principio de todo declaro una variable denominada directorio, que contiene la ruta del directorio del que vamos a realizar la copia de seguridad. En este ejemplo he utilizado la carpeta Documentos de mi usuario local.

A continuación, declaro una variable denominada backup, que contiene el nombre del fichero comprimido que contendrá la copia de seguridad. El nombre he puesto que empieze siempre por backup-documentos seguido de la fecha actual en formato YY-MM-DD.

Seguidamente he declarado una última variable denominada unidad, que es la que contendrá la ruta de la unidad externa en la que quiero que se guarde el fichero comprimido que contenga la copia de seguridad.

Declaradas las variables, el siguiente paso es ejecutar el comando tar -czf seguido del nombre del paquete resultante de la compresión, que en nuestro caso corresponde a la variable backup, y del directorio que queremos tomar como referencia, que es el directorio del que queremos hacer la copia de seguridad, y lo podemos obtener a través de la variable directorio.

Del paso anterior, obtendremos el paquete comprimido, que quedará guardado en la ruta actual desde la que se ha ejecutado el script. Ahora, el siguiente paso es comprobar que la unidad externa que hemos definido en la variable unidad este actualmente montada.

En caso afirmativo, se realizaran dos acciones. La primera sera copiar el paquete comprimido de la ubicación actual a la unidad externa, mientras que el siguiente paso sera borrar el paquete de la ruta de origen, ya que solo queremos que quede en la unidad externa.

Ejecución del Script

Una vez creado y guardado el script, es hora de ejecutarlo. Para ello, tan solo debes abrir una ventana de terminal, situarte en el directorio en el que lo tienes almacenado, y teclear el siguiente comando:

bash nombre-script.sh

Con esto, ya solo queda esperar a que se termine de ejecutar, y ya tendrás todas las tareas de puesta a punto realizadas. Esto te habrá ahorrado el ir tecleando uno a uno todos los comandos que has incluido en el código de script.

Como se trata de un script de puesta a punto post-instalacion, ya no hace falta ni que lo guardes en el disco. Lo puedes traspasar a un medio de almacenamiento externo, para utilizarlo en futuras instalaciones (teniendo en cuenta, eso si, que dependiendo de la distribución y versión, puede ser necesario realizar algunos ajustes.

Programar la Ejecución del Script

Este script, auque puedes ejecutarlo de forma manual, está más pensado para que se ejecute de forma automática cada cierto tiempo. Lo que se suele hacer en estos casos es programar una ejecución con carácter semanal o mensual, a gusto de cada uno.

Para casos como esto, lo más habitual suele ser recurrir a Cron, una herramienta que se utiliza en GNU/Linux y Unix, y que sirve para programar la ejecución de comandos o scripts en el sistema, en base a una fecha y hora específicas. Cron permanece siempre activo y en segundo planto.

Para interactuar con Cron debes hacerlo a través del fichero Crontab, que es básicamente donde se indica toda la relación de scripts y/o comandos que deben ejecutarse de forma automática, en base a la fecha y hora asignadas. Para ver y editar ese fichero, se utiliza el comando crontab tal como indico a continuación:

sudo crontab -e

A continuación se te preguntará, en primer lugar, que tipo de editor quieres utilizar para editar el fichero. Yo he indicado la opción 1, que es la que corresponde a Nano, ya que es el editor por consola que conozco mejor y que me parece más simple e intuitivo de utilizar. Lo siguiente que verás es la interfaz del editor Nano por pantalla, y ya solo queda empezar a editar el fichero.

Para ello, debes especificar cada tarea a ejecutar en una linea aparte. La sintaxis de Cron consta de 5 asteríscos seguidos del comando con la acción a realizar, que en este caso es la ruta donde se encuentra el script. Cada asterísco puedes sustituirlo por un valor concreto, o dejarlo como tal. El primer asterísco es para indicar el minuto (de 0 a 60), el segundo la hora (de 0 a 23), el tercero el día del mes (de 1 a 31), el cuarto el mes (de 1 a 12), y el quinto el día de la semana (de 0, que representa domingo, a 6, que representa sábado).

En este caso concreto, si queres, por ejemplo, programar el escaneo para cada domingo a las 21 de la noche, deberías indicarlo de la siguiente forma:

0 17 * * 0 /home/usuario/nombre-script.sh

Continuación

Antes de finalizar, te dejo a continuación con todos los posts publicados dentro de esta serie sobre Linux scripting, para que puedas consultarlos si necesitas profundizar en cualquiera de los aspectos teóricos explicados.

  1. Linux scripting. Descubre el enorme poder de automatizar tareas
  2. Linux scripting con Bash. Introducción a Bash
  3. Linux scripting con Bash. Sintaxis del lenguaje
  4. Linux scripting con Bash. Crear y ejecutar tu primer script
  5. Linux scripting con Bash. Ejecutar script en el inicio del sistema
  6. Linux scripting con Bash. Ejemplo 1. Setup post-instalación para Ubuntu
  7. Linux scripting con Bash. Ejemplo 2. Escaneo mensual de malware

Un saludo y hasta la próxima!

Categorías LinuxEtiquetas

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto:
search previous next tag category expand menu location phone mail time cart zoom edit close