educación, informática y demás

2314 - CP - Backups

Divide y vencerás: Backups de usuarios

En los dos últimos casos prácticos de esta serie, por un lado hemos creado un script que hace una copia de seguridad del directorio personal de un usuario pasado por parámetro y, por otro, hemos creado varios scripts que tan solo muestran información de cuentas de usuario del sistema bien pasadas por parámetro en una lista variable, bien por teclado o bien recorriendo el fichero de cuentas de usuario directamente.

Justo ahora viene la revelación: podríamos juntar las funcionalidades de los scripts para conseguir crear copias de seguridad de los directorios personales de los usuarios del sistema que queramos o de todos los usuarios del sistema de forma sencilla.

Divide y vencerás

Esta es una técnica muy habitual en resolución de problemas complejos que se utiliza mucho en programación.

Un enunciado complejo y completo podría ser el siguiente:

Crea un script que reciba por parámetro una lista variable de usuarios del sistema. El script deberá crear una copia de seguridad, utilizando la herramienta tar, del directorio personal de cada uno de los usuarios pasados por parámetro.

Para cada usuario pasado por parámetro el script comprobará si el usuario existe en el sistema. Si no existe, mostrará un mensaje advirtiéndolo y continuará con el siguiente usuario.

Si el usuario existe, el script comprobará si existe el directorio de backup del usuario. El directorio de backup de un usuario tiene el nombre del usuario y se almacena en el directorio /seguridad. Si no existe el directorio de backup del usuario, lo creamos.

A continuación, el script creará un fichero tar.gz con el contenido del directorio personal del usuario seleccionado. El nombre del fichero estará compuesto por: «NombreDelUsuario-YYMMDD-HHmm.tar.gz» y se almacenará en el directorio de backups del usuario.

Por ejemplo, para marinapg el directorio de backups será: /seguridad/marinapg. Si hicieramos la copia de seguridad el 15 de mayo a las 15:30 horas, el fichero se llamaría: marinapg-240515-1530.tar.gz.

Este enunciado es bastante largo, pero al final se puede dividir en dos grandes bloques:

  1. Recorrer una lista de nombres de usuario que se pasan por parámetro.
  2. Hacer algo con el usuario de la lista que tiene cuenta en el sistema

Sabemos hacer un montón de operaciones simples, que si las unimos nos llevan a una funcionalidad compuesta compleja:

  • ¿Sabemos recorrer una lista de nombres de usuario?. Si, ya lo hemos hecho.
  • ¿Sabemos comprobar si un usuario existe?. Si. ya lo hemos hecho.
  • ¿Sabemos comprobar si un directorio existe y si no crearlo?. Si
  • ¿Sabemos determinar la ruta del directorio personal de un usuario dado?. Si
  • ¿Sabemos crear un fichero .tar.gz con el contenido de un directorio? Si

La forma sencilla sería, como se indica, primero recorrer cada uno de los usuarios que se pasan por parámetro.

Después comprobar si existe la cuenta de usuario. Si no existe, se muestra mensaje de advertencia (no error) y sino se llama a una función o un script que haga el trabajo sucio.

Si este script nos lo planteamos de cero, lo ideal sería crear una función que haga el trabajo sucio si no tenemos un script ya hecho o no vamos a reutilizar esta función. En nuestro caso, ya tenemos los scripts 🙂

Aprovechando lo que tenemos. backupList.sh

Vamos a aprovechar el script userList.sh y backup.sh. Veamos el código del script backup.sh para recordar.

Además, vamos a copiar el script backup.sh como backup en el directorio /usr/bin para hacerlo disponible en el sistema desde cualquier directorio de trabajo y facilitar invocarlo.

Ahora vamos a copiar el fichero userList.sh como backupList.sh y lo modificamos.

Este es el script userList.sh

Quedaría de la siguiente forma.

Solo hemos cambiado una línea, en lugar de mostrar un mensaje invocamos un script al que le pasamos por parámetro el nombre del usuario.

Divide y venceras: este script recorre cada uno de los usuarios en la lista de parámetros e invoca al script backup con el nombre de la cuenta de usuario, si existe.

El script backup se encarga del trabajo sucio.

Dejar una respuesta