1. El correo de los usuarios se guarda en el directorio
/var/mail, en archivos con el nombre de login de cada usuario.
Se desea un script monimail.sh que monitoree estos archivos, realizando
lo siguiente:
a) si el usuario fue borrado, pero quedó su archivo de correo, listar
estos usuarios.
b) si el operador invocó el programa sin parámetros, acá
termina.
c) si el operador dio un parámetro no numérico, avisa el error
y termina.
d) si el operador da como parámetro un número, listar los
usuarios que hace más de este número de días que no
lee su correo, es decir, que el archivo con su nombre en /var/mail no ha
sido accedido. Sugerencia: usar comando find.
(14 puntos)
#!/bin/bash
# monimail.sh: monitorea estado de correo de usuarios
# - lista archivos de correo de usuarios borrados
# - lista usuarios que no leyeron correo últimamente
# $1: número de días sin leer correo
# archivos de correo de usuarios inexistentes
echo Archivos de correo de usuarios inexistentes:
LISTA=`ls /var/mail`
for USUARIO in $LISTA
do
id $USUARIO >/dev/null 2>&1
if [ $? -ne 0 ] # el usuario no existe
then
echo $USUARIO
fi
done
echo
# si no se indica cantidad de días salir
if [ ! "$1" ]
then
exit 1
fi
DIAS=$1
# si el parámetro no es numérico, informar error y salir
if [ `echo $DIAS | grep -v [0-9]` ]
then
echo Parámetro no numérico: debe indicar cantidad de
días.
exit 2
fi
# lista de usuarios que no han leído su correo últimamente
echo Usuarios que no leen correo hace más de $1 días:
NOLEEN=`find /var/mail -atime +$DIAS -print`
for ARCHIVO in $NOLEEN
do
echo `basename $ARCHIVO`
done
2. Los creadores del
programa maravil necesitan un script de instalación, llamado
instalar.sh. Debe realizar estas tareas:
1) presentar como pantalla de bienvenida el archivo bienvenida.txt, que
ocupa menos de una pantalla; el usuario deberá digitar Enter para
continuar. (2p)
2) presentar una pantalla con la licencia, el archivo licencia.txt, también
menor de una pantalla; el usuario deberá digitar la tecla S para aceptar
la licencia, si no la acepta el programa avisa y termina con código
de error 1. (4p)
3) inicializar una variable DIRINSTAL con el nombre del directorio de instalación
por defecto, /usr/local/maravil. (2p)
4) preguntar al usuario el directorio de instalación, mostrando el
nombre sugerido (variable DIRINSTAL); el usuario podrá digitar un nombre
de directorio o Enter para aceptar el directorio sugerido. En cualquier caso,
el nombre del directorio de instalación deberá quedar en la
variable DIRINSTAL.(6p)
5) verificar si existe ya el directorio de instalación; es así,
continúa la instalación, y si no, deberá pedir autorización
al usuario, crearlo y verificar la creación exitosa. Si el usuario
no autoriza la creación del directorio, el programa termina con error
2; si no se pudo crear el directorio el programa termina con error 3. En todos
los casos se informa lo realizado.(10p)
6) copiar los archivos maravil.py, LEAME y manual.txt hacia el directorio
de instalación. Si la copia no da error, se informa la terminacion
exitosa de la instalación; en otro caso, se informa el error y se borra
el directorio de instalación y todo su contenido. (4p)
(28 puntos)
#!/bin/bash
#instalar.sh: instala el programa "maravil"
# pantalla de bienvenida
clear
cat bienvenida.txt
echo "Digite Enter para continuar"
read
# pantalla de licencia
clear
cat licencia.txt
echo "Digite la tecla S para aceptar las condiciones de licencia."
read LICENCIA
if [ ! "$LICENCIA" = "S" -a ! "$LICENCIA" = "s" ]
then
echo "No se aceptó la licencia."
exit 1
fi
# directorio de instalación
por defecto
DIRINSTAL=./maravil
# preguntar directorio de instalación
echo Digite directorio de instalación, o tecla Enter
echo si acepta la opción propuesta.
echo -n "Directorio de instalación [$DIRINSTAL]: "
read OTRODIR
if [ $OTRODIR ]
then
DIRINSTAL=$OTRODIR
fi
# verificar si existe directorio de instalación
if [ -d $DIRINSTAL ]
then
echo El directorio $DIRINSTAL existe, continúa instalación.
else
# pedir permiso para crear directorio
echo -n "El directorio $DIRINSTAL no existe. ¿Crear(sS)?: "
read CREARDIR
if [ ! "$CREARDIR" = "s" -a ! "$CREARDIR" = "S" ]
then
echo "No se autorizó crear directorio. ¡Adiós!"
exit 2
fi
mkdir $DIRINSTAL 2>/dev/null
# verificar creación correcta de directorio de instalación
if [ $? -ne 0 ]
then
echo Error: no fue posible crear el directorio $DIRINSTAL
exit 3
else
echo Fue creado el directorio ${DIRINSTAL}.
fi
fi
# copiar el archivo de programa hacia el directorio de instalación
echo Copiando archivos.
cp maravil.py LEAME manual.txt $DIRINSTAL
if [ $? -eq 0 ]
then
echo "Instalación terminada. ¡Felicitaciones!"
else
echo Ha ocurrido un error al copiar los archivos.
echo El programa no fue instalado correctamente.
rm -r $DIRINSTAL
echo Fue borrado el directorio de instalación y todo su contenido.
fi
3. Se desea saber qué páginas de un servidor web son más accedidas. El archivo /var/log/apache/access.log contiene líneas del siguiente formato:
127.0.0.1 - - [25/Jul/2002:20:21:51 -0300]
"GET /fabmelo/version7/modif_clave.php?nombre=pa232&clave=madrid HTTP/1.1"
200 1609
127.0.0.1 - - [25/Jul/2002:20:21:58 -0300] "POST /fabmelo/version7/menu.php
HTTP/1.1" 200 1012
127.0.0.1 - - [25/Jul/2002:20:22:00 -0300] "GET /fabmelo/version7/presupuestos2.php?nombre=pa232&clave=belice
HTTP/1.1" 200 642
Los accesos contienen la palabra GET, los nombres
de las páginas terminan en espacio o en "?". Listar los nombres de
páginas de las 20 más accedidas. (12 puntos).
cat /var/log/apache/access.log.0
| grep -w GET | cut -d" " -f7 | cut -d"?" -f1 | sort | uniq -c | sort -nr
| head -20
Total prueba: 54 puntos.