inotify ( inode notify) — подсистема ядра Linux , созданная Джоном МакКатчаном, которая отслеживает изменения в файловой системе и сообщает об этих изменениях приложениям. Она может использоваться для автоматического обновления представлений каталогов, перезагрузки файлов конфигурации, регистрации изменений, резервного копирования, синхронизации и загрузки. Команды inotifywait и inotifywatch (поддерживаемые Эриком Кертином в рамках проекта inotify-tools) позволяют использовать подсистему inotify из командной строки. [1] Одно из основных применений — в утилитах поиска на рабочем столе , таких как Beagle , где ее функциональность позволяет переиндексировать измененные файлы без сканирования файловой системы на предмет изменений каждые несколько минут, что было бы очень неэффективно.
inotify заменил более раннюю функцию dnotify , которая имела схожие цели. Inotify был объединен с основной веткой ядра Linux в версии ядра 2.6.13, выпущенной 29 августа 2005 года; [2] более поздние версии ядра включали дальнейшие улучшения. Требуемые библиотечные интерфейсы были добавлены в библиотеку GNU C (glibc) в ее версии 2.4, выпущенной в марте 2006 года, в то время как поддержка inotify была завершена в версии glibc 2.5, выпущенной в сентябре 2006 года. [3]
Ограничения, налагаемые inotify, включают следующее:
Использование inotify имеет ряд преимуществ по сравнению со старым API dnotify , который он заменил. [7] [8] [9] С dnotify программа должна была использовать один файловый дескриптор для каждого отслеживаемого каталога. Это могло стать узким местом, поскольку мог быть достигнут предел файловых дескрипторов на процесс. Позже для решения этой проблемы был создан fanotify. Использование файловых дескрипторов вместе с dnotify также оказалось проблемой при использовании сменных носителей. Устройства нельзя было размонтировать, поскольку файловые дескрипторы занимали ресурс.
Другим недостатком dnotify является уровень детализации, поскольку программисты могут отслеживать изменения только на уровне каталога. Чтобы получить доступ к подробной информации об изменениях окружающей среды, которые происходят при отправке уведомительного сообщения, необходимо использовать структуру stat; это считается необходимым злом, поскольку необходимо поддерживать кэш структур stat, для каждой новой сгенерированной структуры stat выполняется сравнение с кэшированной.
API inotify использует меньше дескрипторов файлов, что позволяет программистам использовать установленный интерфейс select и poll вместо системы оповещения о сигналах, используемой dnotify . Это также упрощает интеграцию с существующими библиотеками на основе select или poll (например, GLib ).