ver varios una todos por para otro mover los ejemplos directorio crear copiar contenido consola como comandos comando carpeta basicos archivos archivo linux monitoring filesystemwatcher inotify

varios - cómo monitorear un árbol de directorios completo para los cambios en Linux?



mover varios archivos en linux (6)

¿Cómo puedo monitorear un árbol de directorios completo para ver los cambios en Linux (sistema de archivos ext3 )?

Actualmente, el directorio contiene aproximadamente medio millón de archivos en aproximadamente 3,000 subdirectorios , organizados en tres niveles de directorio.

Esos son en su mayoría archivos pequeños (<1kb, algunos pocos hasta 100 kb). Es una especie de cola y necesito saber cuándo se crean, eliminan o se modifican los contenidos dentro de 5-10 segundos de que eso ocurra.

Sé que hay inotificaciones y géneros, pero AFAIK solo monitorean un único directorio, lo que significa que necesitaría 3.000 identificadores de identificación en mi caso, más que los habituales 1024 identificadores permitidos para un único proceso. ¿O estoy equivocado?

En caso de que el sistema Linux no pueda decirme lo que necesito: quizás exista un proyecto FUSE que simule un sistema de archivos (replicando todos los accesos a archivos en un sistema de archivos real) y registra por separado todas las modificaciones (¿no podría hacerlo?


¿No se suponía que Fanotify proporcionaría esa capacidad con el tiempo? Citando LWN :

" Fanotify tiene dos ''modos'' básicos dirigidos y globales. [...] fanotify global en cambio indica que quiere todo en el sistema y luego marca individualmente inodos que no le importa. "

Perdí la pista cuál era su estado más reciente, sin embargo.


He hecho algo similar usando la herramienta inotifywait :

#!/bin/bash while true; do inotifywait -e modify,create,delete -r /path/to/your/dir && / <some command to execute when a file event is recorded> done

Esto configurará relojes de directorio recursivos en todo el árbol y le permitirá ejecutar un comando cuando algo cambie. Si solo desea ver los cambios, puede agregar el indicador -m para ponerlo en modo monitor.


Use inotifywait desde inotify-tools:

sudo apt install inotify-tools

Ahora cree una secuencia de comandos myscript.sh que también incluya archivos y carpetas ocultos:

#!/bin/bash while true; do inotifywait -e modify,create,delete,move -r $1 done

Haga el script ejecutable con chmod +x myscript.sh

Ejecútelo con ./myscript.sh /folder/to/monitor

Si no proporciona un argumento, usará el directorio de trabajo de manera predeterminada.

Además, puede ejecutar varios comandos agregando && / al final del comando anterior para agregar el siguiente:

#!/bin/bash while true; do inotifywait -e modify,create,delete,move -r $1 && / echo "event" && / echo "event 2" done

Si no desea ejecutar ningún comando en eventos, simplemente ejecute el comando directamente con el modificador -m para que no se cierre:

inotifywait -e modify,create,delete,move -m -r /path/to/your/dir


inotify es la mejor opción cuando tienes muchos subdirectorios, pero si no, estoy acostumbrado a usar este comando a continuación:

watch -d find <<path>>


Que yo sepa, no hay otra manera que la configuración recursiva de un reloj inotify en cada directorio.

Dicho esto, no se inotify descriptores de archivos porque inotify no tiene que reservar un fd para ver un archivo o un directorio (su predecesor, dnotify , sí sufrió esta limitación). inotify utiliza "descripciones de observación" en su lugar.

De acuerdo con la documentación de inotifywatch , el límite predeterminado es 8192 descripciones de observación, y puede aumentarlo escribiendo el nuevo valor en /proc/sys/fs/inotify/max_user_watches .


$ inotifywait -m -r /path/to/your/directory

Este comando es suficiente para mirar el directorio de forma recursiva para todos los eventos, como acceso, abrir, crear, eliminar ...