educación, informática y demás

GNU/Linux, GNU/Linux bash, Shell scripts

Caso práctico. Administración y automatización

En este caso práctico vamos a llevar a cabo una serie de tareas de administración en un sistema GNU/Linux. De hecho, es el sistema con el que venimos trabajando desde hace unas semanas.

Para evitar tener «basura» en nuestro sistema generada por distintos casos prácticos, vamos a crear una instantánea que nos permita volver al estado actual del sistema después de haber realizado este caso práctico.

Instantánea del sistema

Supuesto práctico – Montando sistemas de ficheros

Queremos montar una serie de sistemas de ficheros en nuestro árbol de directorios principal. Tenemos varias particiones que hemos creado y formateado a lo largo de otros casos prácticos.

Lo primero que vamos a hacer es ver que particiones tenemos disponibles. Para ello, podemos utilizar el comando fdisk.

Podemos utilizar el caracter comodín ?

Vamos a suponer que queremos tener disponibles varios de estos sistemas de ficheros en un momento dado en nuestro sistema. Cada sistema de ficheros almacena información que utilizaremos, nuestros usuarios, en momentos puntuales. La información concretamente es la siguiente:

  • /dev/sdb1. Documentos compartidos con varios sistemas operativos.
  • /dev/sdb2. Documentos privados accesibles solo para los miembros de educatica.
  • /dev/sdc1. Proyectos desarrollados por la empresa
  • /dev/sdc2. Archivos multimedia para el desarrollo de proyectos.

Vamos a montar cada uno de estos sistemas de ficheros en puntos de montaje cuyo nombre y ruta sean significativos. Hemos decidido usar los siguientes directorios como punto de montaje:

  • /shared. Para el sistema de ficheros que contiene documentos compartidos. /dev/sdb1 – Documentos compartidos con varios sistemas operativos.
  • /educatica/privado. /dev/sdb2 – Documentos privados accesibles solo para los miembros de educatica.
  • /educatica/proyectos. /dev/sdc1 – Proyectos desarrollados por la empresa
  • /educatica/media. /dev/sdc2 – Archivos multimedia para el desarrollo de proyectos.

El proceso a seguir podría ser el siguiente:

  1. Deberíamos comprobar si existen los directorios que usaremos como punto de montaje, si no existen, debemos crearlos.
  2. Una vez creados, debemos montar cada sistema de ficheros en cada uno de los puntos de montaje como se ha descrito anteriormente.
  3. Por último, podemos comprobar que todo ha funcionado como se esperaba consultando los dispositivos montados en el sistema.

Comprobamos si existen los directorios en /educatica.

De hecho, no existe ni /educatica :_(

Una vez hemos creado los directorios que utilizaremos como punto de montaje, vamos a montar cada sistema de ficheros en su punto de montaje. Tendremos que usar el comando mount.

Se supone que deberíamos haber creado previamente tanto las particiones como los sistemas de ficheros de cada una de las particiones en casos prácticos anteriores. En concreto, hemos trabado con: Caso práctico sistemas de ficheros y Montando sistemas de ficheros permanentemente I (que no está terminada)

Situación de partida. Casos prácticos anteriores

Si no recordamos como usar mount consultamos la página de manual.

Ahora tratamos de montar el sistema de ficheros de /dev/sdb1 en /shared.

Podemos comprobar que se ha montado consultando todos los sistemas de ficheros montados en nuestro sistema con el comando mount sin parámetros.

Montamos el resto de sistemas de ficheros

Comprobamos que se han montado en el sistema

Podríamos haber «hilado más fino» con el grep para solo mostrar sdc o sdb.

Mola, pero se nos va un poco de las manos, por ahora…

Ya lo hemos conseguido ¿y ahora que?. Ahora nuestros usuarios utilizan estos sistemas de ficheros accediendo a los directorios que hacen de punto de montaje cómo si fueran directorios normales dentro del sistema de ficheros.

Supongamos que queremos desmontarlos. ¿Qué podemos hacer?

Creando scripts

Ahora vamos a crear dos scripts que automaticen todo el proceso que hemos llevado a cabo, por un lado montando sistemas de ficheros y por otro desmontando.

El primer script se llamara montaDirectorios.sh. Se encargará de comprobar que los puntos de montaje existen. Si no existe algún punto de montaje, lo creará. Montará cada sistema de ficheros en el punto de montaje adecuado y, por último, mostrará en pantalla información de ocupación de disco de cada uno de los sistemas de ficheros montados. Esto lo hará con el comando df -h.

desmontaDirectorios.sh por otro lado, desmontará cada uno de los sistemas de ficheros que hemos montado previamente. En este caso, vamos a utilizar un bucle for que recorrerá la lista de puntos de montaje o de ficheros de dispositivo. Sería ideal utilizar una variable, por ejemplo listaDispositivos que contenga cada uno de los ficheros de dispositivo a desmontar.

Ayudas….

Algunas ayudas para el desarrollo del script.

«Si el directorio no existe, lo creamos»

¿Cómo comprobamos como humanos si un directorio existe?

Como humanos, tan solo tenemos que leer la salida del comando. En un script utilizamos el comando if para hacer una sentencia condicional.

«si no existe el directorio / shared, lo creamos»

¿Qué comando tenemos que ejecutar para comprobar si existe el directorio?. Podemos usar ls aunque, como veremos después, podemos utilizar el comando test.

¡Tenemos que negarlo!

Primera versión

Estamos repitiendo lo mismo cuatro veces. La diferencia está en la cadena de texto que representa la ruta del directorio a comprobar y crear.

¿Y si usamos una variable?

Ahora, si nos fijamos estamos ejecutando cuatro veces el mismo código, los mismos comandos:

La diferencia está en que, antes de ejecutar esos comandos, asignamos a la variable directorio un valor distinto. ¿Esto no nos suena a un bucle?. Para cada valor de una lista de directorios vamos a repetir la misma acción.

Versión jevi

Esto es solo para que veáis qué se puede llegar a hacer. Esto es relativamente avanzado…

Ahora recorremos el fichero con un for 🙂 Vamos a probar que somos capaces de leer linea a linea

Ahora que somos capaces de recorrer el fichero.. vamos a usar los datos que contiene cada línea para comprobar si existe el directorio y montar el dispositivo con su punto de montaje.

Dejar una respuesta