ELO-330: Programación de Sistemas
Tarea 1: Monitor de Cambio en Directorio

Nombres: mcd : monitor de cambio de archivo permite alertar vía email cuando un directorio ha cambiado.

Sintaxis: mcd <segundos> <directorio>
segundos: es un número entero que representa cada cuántos segundos se revisa por cambios.
directorio: es el directorio en cuestión que se desea monitorizar

Descripción
    Es común desear enviar un correo en forma automática. Todos sabemos hacerlo a través de un cliente de correo, pero ¿Cómo podemos hacerlo a través de un programa? Hace un tiempo bastaba usar telnet al puerto 25 y enviar algunos comandos del protocolo SMTP. Hoy por seguridad esa opción no es permitida. Por ejemplo antes se podía enviar correo y el sistema nunca pedía usuario y clave de quien lo enviaba. Esos servidores de correo inseguros hoy son puestos en listas negras.
   Por otra parte es común desear tomar conocimiento del cambio de estado de algún servicio o componente de un sistema. Para ello se debe desarrollar un sistema que monitorice ese estado y ante un cambio informe. En esta tarea su grupo explorará el cambio de un directorio; es decir, si algún archivo cambia de nombre, es borrado, agregado, cambia de fecha, tamaño, permisos, etc.
  mcd es un script bash que periódicamente revisa si hay cambios en el directorio señalado desde el momento en que el script parte. Al detectar un cambio, envía un correo señalando la diferencia producida en el directorio y termina.
    Tan pronto es ejecutado, mcd pide por consola:
"Ingrese el servidor smtp  utilizar:"
"Ingrese el puerto donde éste escucha:"
"Ingrese la cuenta email desde donde se enviará la alerta:"
"Ingrese la password en formato codificado base64:"
"Ingrese la cuenta email donde enviará la alerta:"
  Luego el mcd recuerda el estado actual del directorio y trabaja hasta detectar un cambio, envía la alerta y termina.
  
Evaluación de la Tarea y qué entregar:
70% su programa cumple plenamente con la especificación o requerimientos de la tarea.
30% Documentación. En esta tarea su(s) programa(s) scripts deben venir bien documentados, además incorpore un readme explicando los archivos que constituyen su solución y cómo se deben ejecutar. En archivo documentación (txt o html) explique a grandes rasgos el algoritmo o estrategia usada en sus programas para cumplir con lo pedido. El buen cumplimiento del procedimiento de entrega es considerado parte de la documentación.

Ayuda:
   - Estudie los ejemplos de programación shell vistos en clases.
* Revisando cambios en directorio:
  - Revise opciones para el comando ls, en particular ls -l
  - Revise el comando diff
* Enviando Correo:
   - Para enviar el correo puede usar su cuenta de alumno usm, alternativamente puede usar su cuenta gmail. Los parámetros requeridos por su cuenta usm está en https://mail.alumnos.usm.cl/  Para el caso gmail la información está en http://mail.google.com/support/bin/answer.py?hl=en&ctx=mail&answer=12103.
  - Para codificar y decodificar Base64, usted puede usar cualquier utilitario; por ejemplo perl lo puede hacer usando:
% perl -MMIME::Base64 -e 'print encode_base64("\000jms1\@jms1.net\000not.my.real.password")'
Cambie el argumento de encode_base64 para codificar otro contiendo. Para decodificar basta reemplazar encode_base64 por decode_base64.
  - Revise: http://qmail.jms1.net/test-auth.shtml
* Aquí encontrará buenas referencias para estudiar SMTP.
* En sus pruebas considere preparar un archivo con los datos pedidos por el script y correrlo usando:
  cmd segundos directorio < otrosParametros.txt
* No deje su tarea para el final.
* Si tras una dificultad no logra avances por más de 30 minutos, espere la próxima clase, visíteme o escríbame. Con gusto procuraré ayudarlo.
* Si tiene dudas del enunciado, lo aclararé con gusto y documentaré aquí.