Лучший способ отслеживать изменения файловой системы в Linux - PullRequest
21 голосов
/ 05 декабря 2011

Я смотрю на создание утилиты синхронизации файловой системы, которая отслеживает активность файловой системы, но похоже, что некоторые функции мониторинга файловой системы в ядре Linux устарели или не полностью доступны.

Какое мое исследование как найдено

Сначала пришел dnotify с уведомлением, имеет функции уведомления об удалении, изменении, доступе, атрибутах, создании, перемещении, может определять дескриптор файла, однако теперь устарел с помощью inotify и fanotify

inotify вышел вторым с уведомлением, имеет функции уведомления о доступе, изменении, атрибуте, закрытии, перемещении, удалении, создании и т. Д., Однако он не предоставляет файловый дескриптор или процесс и будет устаревшим из-за fanotify

fanotify является последним, который сообщает о доступе, изменяет, закрывает, но не сообщает об удалении или атрибутах, но предоставляет дескриптор файла

Мне нужен способ определения процесса (например, из fd) и такие вещи, как удаление, изменение, атрибуты и т. Д., Чтобы синхронизировать все, какие-либо предложения? К сожалению, dnotify кажется лучшим, но самым устаревшим

Ответы [ 3 ]

8 голосов
/ 05 декабря 2011

Вы должны использовать библиотеку вместо inotify и друзей - что-то вроде FAM или Gamin (это один и тот же API для обоих). Это сделает вашу программу переносимой на другие Unixes.

3 голосов
/ 27 января 2012

Есть хорошая библиотека, предоставляющая файловые дескрипторы или процесс с inotify . Он имеет свой собственный C API и утилиту inotifywatch (хорошо для скриптов), все в пакете inotify-tools.

Я категорически не согласен с тем, что fanotify устареет inotify.

FAM и gamin - очень хорошие опции для сервера / клиента. Оба они используют inotify в качестве первого варианта поверх устаревших dnotify и опросов. Я предпочитаю гамин.

1 голос
/ 25 февраля 2015

incron - полезный инструмент для подобных операций.Вы можете создать файл конфигурации для каталога или файла, который вы хотите просмотреть.

http://inotify.aiken.cz/?section=incron&page=about&lang=en

в Ubuntu

sudo apt-get install incron

/ etc / incron.d /mynotification.conf

# notification for user creation
/home IN_ALL_EVENTS /opt/notify_user_created.sh $#
...