Inotify

Inotify — это подсистема ядра Linux, которая позволяет получать уведомления о событиях, связанных с файлами и каталогами файловой системы. Например, открытие файлов и каталогов для чтения или записи, изменения атрибутов, перемещение, удаление и т. п. В основное ядро была включена начиная с 2.6.13, но может использоваться и с более ранними ядрами с помощью наложения патча. Начиная с 2.6.32 Inotify был заменен на Fsnotify, а Inotify реализован на основе Fsnotify, но для практических приложений эта деталь осталась несущественной[1].

С помощью подписки на события Inotify скриптам необязательно периодически сканировать файловую систему для обнаружения изменений. Более того, подписка на события не мешает размонтированию тома[1].

Основная сфера применения — в системах локального поиска (например Beagle), таким образом программе-индексатору не требуется периодически сканировать всю файловую систему. Кроме того, можно следить за важными конфигурационными файлами и восстанавливать их в случае повреждения, выполнять автоматические действия после загрузки файлов на сервер и т. п.[1]

Утилиты

Хотя механизм Inotify является частью операционной системы, доступной через набор системных вызовов, и потому не требует установки дополнительных библиотек, для командной строки создан пакет inotify-tools, позволяющий использовать Inotify в скриптах[1][2].

Двумя основными утилитами inotify-tools являются inotifywatch и inotifywait, например, следующая команда собирает статистику использования каталога /tmp[1]:

  inotifywatch -r /tmp

Для слежения за файлами или каталогами в реальном времени можно применить inotifywait[1]:

  $ inotifywait -mr /tmp
  Setting up watches.  Beware: since -r was given, this may take a while!
  Watches established.
  /tmp/ CREATE example-tmp-file
  /tmp/ OPEN example-tmp-file
  /tmp/ CLOSE_WRITE,CLOSE example-tmp-file

Примерами других утилит, использующих Inotify, являются[1]:

  • iwatch — записывает событие в лог-файл, посылает уведомление по электронной почте,
  • inoticoming — для выполнения некоторых действий при активности в целевом каталоге,
  • incron — демон, подобный cron, но работающий на основе событий файловой системы,
  • inosync и lsyncd — утилиты для синхронизации каталогов в реальном времени,
  • Начиная с версии 7.5, GNU tail включает поддержку Inotify при использовании опции -f (до этого была утилита inotail).

Системные вызовы

Для работы с функциями нужно подключить заголовочный файл sys/inotify.h.

int inotify_init()

Создает файловый дескриптор, из которого читаются все происходящие события.

int inotify_add_watch(int fd, const char * path, __u32 mask);

Создает уникальный (внутри файлового дескриптора) дескриптор наблюдения (watch descriptor), который используется для отождествления путей и происходящих событий. При этом, допускаются только те события, которые указаны в маске.

int inotify_rm_watch(int fd, __u32 wd);

Удаляет существующий дескриптор наблюдения.

Получение событий

События получаются с помощью традиционного системного вызова read, который читает в структуру inotify_event со следующими полями:

Идентификатор Значение
wd дескриптор наблюдения
mask маска событий
cookie метка синхронизации между IN_MOVED_FROM и IN_MOVED_TO
len длина имени файла
name имя файла относительно каталога, для которого был создан дескриптор наблюдения

Маска события является логическим ИЛИ следующих констант:

  • IN_ACCESS — К файлу было произведено обращение (чтение)
  • IN_ATTRIB — Были изменены метаданные (права доступа, временные метки, расширенные атрибуты и т. п.)
  • IN_CLOSE_WRITE — Файл, открывавшийся для записи, был закрыт
  • IN_CLOSE_NOWRITE — Файл, открывавшийся не для записи, был закрыт
  • IN_CREATE — Файл/каталог был создан в наблюдаемом каталоге
  • IN_DELETE — Файл/каталог был удален в наблюдаемом каталоге
  • IN_DELETE_SELF — Наблюдаемый файл/каталог был удален
  • IN_MODIFY — Файл был изменён
  • IN_MOVE_SELF — Наблюдаемый файл/каталог был перемещён
  • IN_MOVED_FROM — Файл/каталог был перемещён из наблюдаемого каталога
  • IN_MOVED_TO — Файл/каталог был перемещён в наблюдаемый каталог
  • IN_OPEN — Файл/каталог был открыт

При генерации событий также могут быть использованы следующие константы:

  • IN_IGNORED — Наблюдение было снято либо вручную (inotify_rm_watch) либо автоматически (файловая система была размонтирована)
  • IN_ISDIR — Объектом события является каталог
  • IN_Q_OVERFLOW — Произошло переполнение очереди событий
  • IN_UNMOUNT — Файловая система, содержащая объект наблюдения, была размонтирована

Примечания

  1. 1 2 3 4 5 6 7 Vervloesem, 2011.
  2. Inotify-tools Архивная копия от 1 июня 2014 на Wayback Machine is a C library and a set of command-line programs for Linux providing a simple interface to inotify

Литература

  • Koen Vervloesem. Inotify: Watch your filesystem // Linux format. — 2011. — № LXF140. — ISSN 1470-4234.

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.