уведомлять
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 не поддерживает рекурсивный просмотр каталогов, а это означает, что для каждого подкаталога необходимо создать отдельный просмотр inotify. [ 4 ] Напротив, команда inotifywait обеспечивает рекурсивный просмотр каталогов. [ 5 ]
- Inotify сообщает о некоторых, но не обо всех событиях в sysfs и procfs .
- Уведомление через inotify требует, чтобы ядро знало обо всех соответствующих событиях файловой системы, что не всегда возможно для сетевых файловых систем, таких как NFS , где изменения, сделанные одним клиентом, не передаются немедленно другим клиентам.
- События переименования не обрабатываются напрямую; т. е. inotify выдает два отдельных события, которые необходимо изучить и сопоставить в контексте потенциальных условий гонки.
История
[ редактировать ]- Июль 2004 г.: анонс первого релиза. [ 6 ]
- 29 августа 2005 г.: выпущено ядро Linux версии 2.6.13, содержащее объединенный код inotify. [ 2 ]
- Март 2006: выпущена библиотека GNU C (glibc) версии 2.4, обеспечивающая первоначальную поддержку inotify. [ 3 ]
- Сентябрь 2006: выпущена версия Glibc 2.5 с полной поддержкой inotify. [ 3 ]
Преимущества перед dnotify
[ редактировать ]Использование inotify имеет ряд преимуществ по сравнению со старым API dnotify , который он заменил. [ 7 ] [ 8 ] [ 9 ] При использовании dnotify программе приходилось использовать один файловый дескриптор для каждого каталога, который она отслеживала. Это может стать узким местом, поскольку может быть достигнут предел количества файловых дескрипторов на процесс. Позже для решения этой проблемы был создан fanotify. Использование файловых дескрипторов вместе с dnotify также оказалось проблемой при использовании съемных носителей. Устройства не удалось отключить, поскольку файловые дескрипторы заставляли ресурс быть занятым.
Еще одним недостатком dnotify является уровень детализации, поскольку программисты могут отслеживать изменения только на уровне каталога. Чтобы получить доступ к подробной информации об изменениях среды, которые происходят при отправке уведомления, необходимо использовать структуру статистики; это считается неизбежным злом, поскольку необходимо поддерживать кеш статистических структур, поскольку каждая новая сгенерированная статистическая структура сравнивается с кэшированной.
API-интерфейс inotify использует меньше файловых дескрипторов, что позволяет программистам использовать установленный интерфейс выбора и опроса, а не систему уведомления о сигналах, используемую dnotify . Это также упрощает интеграцию с существующими библиотеками, основанными на выборе или опросе (например, GLib ).
См. также
[ редактировать ]- Монитор изменения файлов (SGI)
- ДМАПИ
- kqueue (FreeBSD, NetBSD, OpenBSD, DragonFly BSD и macOS)
- ФСЕвентс (macOS)
Ссылки
[ редактировать ]- ^ вики inotify-tools
- ^ Jump up to: а б Linux 2.6.13, kernelnewbies.org
- ^ Jump up to: а б с справочная страница inotify
- ^ Роберт Лав, системное программирование Linux . О'Рейли, с. 236
- ^ справочная страница inotifywait, [1]
- ^ «fa.linux.kernel post [RFC][PATCH] inotify 0.8» . 29 июля 2004 г. Проверено 19 августа 2013 г.
- ^ Майкл Керриск (14 июля 2014 г.). «Уведомление файловой системы, часть 2: более глубокое исследование inotify» . LWN.net .
- ^ Эли М. Доу (31 мая 2005 г.). «Отслеживание событий файловой системы Linux с помощью Inotify. Зачем inotify?» . Архивировано из оригинала 16 января 2010 г.
- ^ inotify файл README
Внешние ссылки
[ редактировать ]- Кернел Корнер - введение в inotify Роберта Лава (2005)
- Статья LWN об Inotify – наблюдение за событиями файловой системы с помощью inotify (частично устаревшее)
- Статья IBM — мониторинг событий файловой системы Linux с помощью inotify (6 сентября 2008 г.).
- Уведомление файловой системы, часть 1: Обзор dnotify и inotify — статья Майкла Керриска на LWN.net (2014 г.)