Monitorización de Cambios en un Directorio en Tiempo Real en Linux
En sistemas Linux, conocer en tiempo real qué archivos aparecen, desaparecen o se modifican en un directorio resulta crítico en entornos de administración, desarrollo y seguridad. Este artículo ofrece un recorrido completo y detallado sobre las herramientas y técnicas disponibles, desde inotify hasta soluciones más avanzadas con scripting y el subsistema audit.
1. Fundamentos de inotify
Linux incluye en su kernel la API inotify, que notifica eventos sobre el sistema de ficheros. Entre los eventos más relevantes:
- IN_CREATE: creación de archivo o directorio.
- IN_DELETE: eliminación.
- IN_MODIFY: modificación de contenido.
- IN_MOVED_FROM y IN_MOVED_TO: renombrado o movimiento.
El demonio inotify
permite reaccionar eficientemente, sin necesidad de polling constante.
2. Herramientas Principales
Herramienta | Descripción | Enlace |
---|---|---|
inotifywait (inotify-tools) | Monitorización en línea de comandos basada en inotify. | Repositorio GitHub |
fswatch | Soporta múltiples backends (inotify, kqueue, FSEvents…). | Repositorio GitHub |
watch | Ejecuta periódicamente un comando y muestra la salida. | Documentación |
auditd | Subsistema de auditoría del kernel para seguimiento exhaustivo. | Guía Oficial |
3. Uso Básico de inotifywait
Después de instalar con sudo apt-get install inotify-tools
(Debian/Ubuntu) o yum install inotify-tools
(RHEL/CentOS), el comando más simple es:
inotifywait -m -r /ruta/a/monitorizar
- -m: modo monitor continuo.
- -r: recursivo.
Para filtrar eventos de creación y modificación:
inotifywait -m -r -e create -e modify /ruta/a/monitorizar
4. Ejemplo de Script Avanzado
Podemos envolver inotifywait
en un script Bash para reacción automática:
#!/bin/bash DIR=/ruta/a/monitorizar inotifywait -m -r -e create -e delete -e modify DIR --format %w%f %e while read FILE EVENT do echo [(date %Y-%m-%d %H:%M:%S)] EVENT -> FILE # Aquí podemos añadir acciones, p.ej. copia, notificación, analizador done
5. Alternativa: fswatch
fswatch proporciona sintaxis similar y detecta cambios en múltiples plataformas:
fswatch -0 /ruta/a/monitorizar xargs -0 -n1 -I{} echo Modificado: {}
Ideal si trabajas en entornos mixtos (Linux, macOS, BSD).
6. Scripting en Python con watchdog
Para soluciones más complejas, usar la librería watchdog:
pip install watchdog # ejemplo.py from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import time class Handler(FileSystemEventHandler): def on_any_event(self, event): print(f{time.strftime(%F %T)} {event.event_type} {event.src_path}) if __name__ == __main__: path = /ruta/a/monitorizar observer = Observer() observer.schedule(Handler(), path, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
7. Monitorización con auditd
Para entornos que requieran trazabilidad y cumplimiento normativo, auditd registra eventos a nivel kernel:
- Instalación:
sudo apt-get install auditd
- Regla para un directorio:
auditctl -w /ruta/a/monitorizar -p wa -k vigilanciadir
- Visualizar logs:
ausearch -k vigilanciadir
Se obtiene un historial exhaustivo de accesos y modificaciones.
8. Comparativa Rápida
- inotifywait: sencillo, bajo consumo, solo Linux.
- fswatch: multiplataforma, consumo moderado.
- watch: genérico, polling, menos eficiente.
- watchdog (Python): flexible, integrable en apps.
- auditd: completo, logs persistentes, mayor peso.
9. Buenas Prácticas
- Limitar recursividad a lo esencial para optimizar recursos.
- Filtrar únicamente los eventos necesarios (
-e
en inotifywait). - Emplear logs rotativos si se generan muchos eventos.
- Probar en entornos de staging antes de desplegar en producción.
- Combinar con notificaciones (mail, Slack, webhook) para respuesta automática.
10. Casos de Uso
- Despliegue continuo: reiniciar servicios cuando cambian archivos de configuración.
- Detección de intrusiones: vigilar scripts u exploits añadidos.
- Sistemas de backup: lanzar copia incremental al detectarse modificaciones.
- Automatización de tareas: compilar o empaquetar al guardar código.
11. Conclusión
Linux ofrece múltiples vías para monitorizar cambios en un directorio en tiempo real. La elección dependerá de requisitos de rendimiento, complejidad y entorno. Desde la ligereza de inotifywait hasta la potencia de auditd, pasando por soluciones multiplataforma y frameworks de scripting, la versatilidad es absoluta. Implementar estas prácticas mejora la seguridad, la eficiencia operativa y la capacidad de respuesta ante eventos críticos.
Leave a Reply