E.U. de Informática Departamento de Informática Aplicada Examen Final de Administración de Sistemas Operativos 10 de junio de 2013 Apellidos .................................................................................................................. Nombre ..................................................................................................................... Nº de Matrícula.................... EJERCICIO 4 (3,5 puntos) Tiempo estimado: 60 m. Eres el administrador de un servidor Linux en el Departamento IA. Bajo el directorio /home/aso hay un directorio para cada alumno con el nombre de su login (correspondiente al número de matrícula). Hay un máximo de tres prácticas por alumno, cada una en un fichero: p1.sh, p2.sh, y p3.sh. Debes hacer un script que haga lo siguiente: • Crear en /backups/aso un directorio por cada práctica: aso-p1, aso-p2, aso-p3. • Llevar a cada directorio la práctica correspondiente de todos los alumnos que la tengan. El nombre de la práctica en el directorio destino será: <login>.sh • Registrar para cada práctica qué alumnos no tienen la práctica hecha en un fichero llamado /backups/aso/sin-entrega. En dicho fichero habrá una sección para cada práctica, con un formato similar al siguiente: Alumnos que no han realizado la práctica “p1”: login1 login2 … • Una vez recogidas todas las prácticas, se hará un backup del directorio de cada práctica con el comando tar. El fichero creado será un backup completo del directorio de la práctica y se llamará p<x>.tgz (siendo <x> el número de práctica), y se almacenará en el directorio /backups/aso. NOTAS: La implementación del script se realizará usando dos funciones: guardar_ficheros y hacer_backup, que recibirán como parámetro la práctica concreta con que van a trabajar. El directorio /home/aso debe existir y no estar vacío para que el script funcione bien. El directorio /backups/aso deberá crearse en el script. El script deberá hacer las comprobaciones necesarias para que no se produzcan fallos. Es importante la especificación correcta de las rutas de los directorios de trabajo. #!/bin/bash # Funcion guardar_ficheros: $1 - Nombre de la práctica function guardar_ficheros { mkdir $destino/aso-$1 echo "Alumnos que no han realizado la practica $1:" >> $destino/sin-entrega for mat in $(ls $origen) ; do if [ ! -f $origen/$mat/$1.sh ] ; then echo $mat >> $destino/sin-entrega else cp $origen/$mat/$1.sh $destino/aso-$1/$mat.sh fi done } # Funcion hacer_backup: $1 - Nombre de la práctica function hacer_backup { tar czf $destino/$1.tgz $destino/aso-$1 } # PROGRAMA PRINCIPAL origen=/home/aso destino=/backups/aso if [ ! -d $origen ] ; then echo "No existe directorio con las practicas" ; exit 1 fi alumnos=$(ls $origen) if [ "$alumnos" == "" ] ; then echo "No hay alumnos" ; exit 2 fi if [ ! -d $destino ] ; then mkdir –p $destino fi touch $destino/sin-entrega practicas="p1 p2 p3" for prac in $practicas do guardar_ficheros $prac hacer_backup $prac done