Inotify ( notificación de inodo ) es un subsistema del kernel de Linux creado por John McCutchan, que monitorea los cambios en el sistema de archivos e informa esos cambios a las aplicaciones. Se puede utilizar para actualizar automáticamente las vistas de directorio, recargar archivos de configuración, registrar cambios, realizar copias de seguridad, sincronizar y cargar. Los comandos inotifywait e inotifywatch permiten usar el subsistema inotify desde la línea de comandos. [1] Un uso importante es en utilidades de búsqueda de escritorio como Beagle , donde su funcionalidad permite volver a indexar archivos modificados sin escanear el sistema de archivos en busca de cambios cada pocos minutos, lo que sería muy ineficiente.
inotify reemplazó una instalación anterior, dnotify , que tenía objetivos similares. Se fusionó con la línea principal del kernel de Linux en la versión 2.6.13 del kernel, lanzada el 29 de agosto de 2005; [2] versiones posteriores del kernel incluyeron mejoras adicionales. Las interfaces de biblioteca requeridas se agregaron a la Biblioteca GNU C (glibc) en su versión 2.4, lanzada en marzo de 2006, mientras que el soporte para inotify se completó en la versión 2.5 de glibc, lanzada en septiembre de 2006. [3]
Limitaciones
Las limitaciones impuestas por inotify incluyen las siguientes:
- Inotify no admite directorios de observación recursiva, lo que significa que se debe crear un reloj inotify separado para cada subdirectorio. [4]
- Inotify informa algunos pero no todos los eventos en sysfs y procfs .
- La notificación a través de inotify requiere que el kernel esté al tanto de todos los eventos relevantes del sistema de archivos, lo que no siempre es posible para los sistemas de archivos en red, como NFS, donde los cambios realizados por un cliente no se transmiten inmediatamente a otros clientes.
- Los eventos de cambio de nombre no se manejan directamente; es decir, inotify emite dos eventos separados que deben ser examinados y emparejados en un contexto de posibles condiciones de carrera.
Historia
- Julio de 2004: el primer anuncio de lanzamiento [5]
- 29 de agosto de 2005: Lanzamiento de la versión 2.6.13 del kernel de Linux, que contiene el código inotify combinado [2]
- Marzo de 2006: GNU C Library (glibc) versión 2.4 lanzada, con soporte inicial de inotify [3]
- Septiembre de 2006: Glibc versión 2.5 lanzada, brindando soporte completo para inotify [3]
Ventajas sobre dnotify
Hay una serie de ventajas al usar inotify en comparación con la API de dnotify anterior a la que reemplazó. [6] [7] [8] Con dnotify, un programa tenía que usar un descriptor de archivo para cada directorio que estaba monitoreando. Esto puede convertirse en un cuello de botella, ya que se podría alcanzar el límite de descriptores de archivo por proceso. Posteriormente, se creó fanotify para solucionar este problema. El uso de descriptores de archivos junto con dnotify también resultó ser un problema cuando se utilizan medios extraíbles. Los dispositivos no se pudieron desmontar porque los descriptores de archivo mantenían el recurso ocupado.
Otro inconveniente de dnotify es el nivel de granularidad, ya que los programadores solo pueden monitorear los cambios a nivel de directorio. Para acceder a información detallada sobre los cambios ambientales que ocurren cuando se envía un mensaje de notificación, se debe utilizar una estructura de estadísticas; esto se considera un mal necesario en el sentido de que se debe mantener un caché de estructuras de estadísticas, por cada nueva estructura de estadísticas generada se ejecuta una comparación con la almacenada en caché.
La API de inotify utiliza menos descriptores de archivo, lo que permite a los programadores utilizar la interfaz de selección y sondeo establecida, en lugar del sistema de notificación de señales utilizado por dnotify . Esto también facilita la integración con bibliotecas existentes basadas en selecciones o encuestas (como GLib ).
Ver también
- Monitor de alteración de archivos (SGI)
- Gamin (Linux, FreeBSD)
- DMAPI
- kqueue (FreeBSD)
- FSEvents (macOS)
Referencias
- ^ Wiki de inotify-tools
- ^ a b Linux 2.6.13, kernelnewbies.org
- ^ a b c inotificar la página del manual
- ^ Robert Love, programación del sistema Linux . O'Reilly, pág. 236
- ^ "post fa.linux.kernel [RFC] [PATCH] inotify 0.8" . 2004-07-29 . Consultado el 19 de agosto de 2013 .
- ^ Michael Kerrisk (14 de julio de 2014). "Notificación del sistema de archivos, parte 2: una investigación más profunda de inotify" . LWN.net .
- ^ ¿Por qué inotificar? Archivado el 16 de enero de 2010 en la Wayback Machine.
- ^ inotificar archivo README
enlaces externos
- Kernel Korner - una introducción a inotify por Robert Love (2005)
- Artículo de LWN sobre Inotify : ver eventos del sistema de archivos con inotify (parcialmente desactualizado)
- Artículo de IBM : supervisión de eventos del sistema de archivos de Linux con inotify (6 de septiembre de 2008).
- Notificación del sistema de archivos, parte 1: Una descripción general de dnotify e inotify - un artículo de LWN.net por Michael Kerrisk (2014)