Ver cambios en directorio en tiempo real

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:

  1. Instalación: sudo apt-get install auditd
  2. Regla para un directorio: auditctl -w /ruta/a/monitorizar -p wa -k vigilanciadir
  3. 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.

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *