Inotify es un subsistema del kernel de Linux que le permite recibir notificaciones de eventos relacionados con archivos y directorios del sistema de archivos. Por ejemplo, abrir archivos y directorios para leer o escribir, cambiar atributos , mover, eliminar, etc. Se ha incluido en el kernel principal desde 2.6.13, pero se puede usar con kernels anteriores usando una superposición de parches. Desde la versión 2.6.32, Inotify se reemplazó por Fsnotify e Inotify se basa en Fsnotify, pero para aplicaciones prácticas, este detalle no tiene importancia [1] .
Al suscribirse a los eventos de Inotify, los scripts no tienen que escanear periódicamente el sistema de archivos en busca de cambios. Además, la suscripción al evento no impide que se desmonte el volumen [1] .
El alcance principal está en los motores de búsqueda locales (por ejemplo , Beagle ), por lo que el programa indexador no necesita escanear periódicamente todo el sistema de archivos. Además, puede monitorear archivos de configuración importantes y restaurarlos en caso de daño, realizar acciones automáticas después de cargar archivos al servidor, etc. [1]
Aunque el mecanismo de Inotify es parte del sistema operativo, accesible a través de un conjunto de llamadas al sistema y, por lo tanto, no requiere la instalación de bibliotecas adicionales, el paquete de herramientas de inotify se ha creado para la línea de comandos, lo que le permite usar Inotify en scripts. [1] [2] .
Las dos principales herramientas de inotify son inotifywatch e inotifywait, por ejemplo, el siguiente comando recopila estadísticas de uso para el directorio /tmp [1] :
inotifywatch -r /tmpPara monitorear archivos o directorios en tiempo real, puede usar inotifywait [1] :
$ inotifywait -mr /tmp Configuración de relojes. Cuidado: dado que se dio -r, ¡esto puede llevar un tiempo! Relojes establecidos. /tmp/ CREAR archivo-tmp-ejemplo /tmp/ ABRIR archivo-tmp-ejemplo /tmp/ CLOSE_WRITE,CLOSE ejemplo-tmp-archivoEjemplos de otras utilidades que usan Inotify son [1] :
Para trabajar con funciones, debe incluir el archivo de encabezado sys/inotify.h .
int inotify_init()Crea un descriptor de archivo del que se leen todos los eventos que ocurren.
int inotify_add_watch(int fd, const char * ruta, máscara __u32);Crea un descriptor de observación único (dentro de un descriptor de archivo) que se usa para identificar rutas y eventos que ocurren. En este caso, solo se permiten aquellos eventos que se especifican en la máscara.
int inotify_rm_watch(int fd, __u32 wd);Elimina un identificador de observación existente.
Los eventos se reciben mediante la llamada al sistema de lectura tradicional, que lee en una estructura inotify_event con los siguientes campos:
identificador | Sentido |
---|---|
wd | descriptor de observación |
mascarilla | máscara de evento |
Galleta | marca de tiempo entre IN_MOVED_FROM y IN_MOVED_TO |
Len | longitud del nombre de archivo |
nombre | nombre de archivo relativo al directorio para el que se creó el descriptor de observación |
La máscara de evento es un OR lógico de las siguientes constantes:
Al generar eventos, también se pueden utilizar las siguientes constantes: