Мониторинг файловой системы в Linux. Inotify.

Для мониторинга событий файловой системы, таких как доступ к файлам, их модификация, создание/удаление, в Linux существует механизм под названием inotify. Он позволяет быстро и эффективно, в реальном времени мониторить указанные директории или отдельные файлы на заданные события и при их наступлении передавать информацию отслеживающим её приложениям.

inotify-tools.

Пакет inotify-tools содержит в себе утилиты командной строки inotifywatch и inotifywait.

inotifywatch— это утилита, наблюдающая за событиями файловой системы с помощью интерфейса inotify ядра Linux и выводящая суммарное количество событий, произошедших с каждым файлом или директорией.

После запуска, inotifywatch коллекционирует данные, но не выводит их на экран. Собранные данные отображаются только по завершении работы утилиты, выводятся на стандартный вывод в виде таблицы с одним столбцом для каждого вида события и одной строкой для каждого наблюдаемого файла или директории. Таблица отображает, сколько раз указанное событие произошло с каждым из файлов или каталогов.

Полезные опции:

-r Рекурсивно наблюдать за всеми поддиректориями, в указанной в качестве аргумента директории. Если в процессе наблюдения создаются новые директории в уже наблюдаемых директориях, то они автоматически присоединяются к наблюдаемым. Перехода по символическим ссылкам не происходит.

-t <секунды> Наблюдать только указанное количество секунд. Если эта опция не указана, то inotifywatch будет наблюдать до тех пор, пока не получит сигнал прерывания CTRL + C.
-e <событие> Наблюдать только за указанными событиями. Список всех событий с описанием приведён в руководстве по inotifywatch. Данная опция может быть указана необходимое количество раз. Если данная опция отсутствует, то наблюдаются все события.
Примеры.
Наблюдать за файлом /etc/passwd:
$ inotifywatch /etc/passwd
Establishing watches…
Finished establishing watches, now collecting statistics.
^Ctotal access close_nowrite open filename
54 18 18 18 /etc/passwd
Наблюдать за файлом /etc/passwd в течении 10 секунд, фиксируя только событие access:
$ inotifywatch -t 10 -e access /etc/passwd
Establishing watches…
Finished establishing watches, now collecting statistics.
total access filename
18 18 /etc/passwd
inotifywait— это утилита, наблюдающая за событиями файловой системы с помощью интерфейса inotify ядра Linux и отображающая в реальном времени информацию о наступлении запрашиваемых событий.
Полезные опции.
-m Вместо того, чтобы прекратить наблюдение после получения пе
рвого события (поведение по умолчанию), продолжать наблюдать до получения сигнала завершения работы программы.
-o <файл> Выводить события в файл а не на стандартный вывод.
-r Рекурсивно наблюдать за всеми поддиректориями, в указанной в качестве аргумента директории. Если в процессе наблюдения создаются новые директории в уже наблюдаемых директориях, то они автоматически присоединяются к наблюдаемым. Перехода по символическим ссылкам не происходит.
-t <секунды> Наблюдать только указанное количество секунд. Если эта опция не указана или равна 0, то inotifywait будет наблюдать до тех пор, пока не получит сигнал прерывания CTRL + C.
-e <событие> Наблюдать только за указанными событиями. Список всех событий с описанием приведён в руководстве по inotifywait. Данная опция может быть указана необходимое количество раз. Если данная опция отсутствует, то наблюдаются все события.
—format <формат> Задать формат вывода. Эта опция интересно в первую очередь тем, что позволяет добавить к уже имеющемуся выводу время события. Поддерживаются следующие обращения:
%w заменяется именем наблюдаемого файла (директории), к которому относится случившееся событие;
%f если событие происходит с файлом внутри наблюдаемой директории, то заменяется именем этого файла, иначе остаётся пустым;
%e заменяется произошедшими событиями, разделяемыми запятыми;
%T заменяется текущим временем, в формате, заданном опцией —timefmt.
—timefmt <формат> Задать формат времени, используемый в выводе опции —format с обращением %T. Все возможные обращения описаны в руководстве к strftime, но наиболее используемым является %T, соответствующее формату часы:минуты:секунды.
Примеры.
Наблюдать за файлом /etc/passwd не завершая наблюдение после появления первого события:
$ inotifywait -m /etc/passwd
Setting up watches.
Watches established.
/etc/passwd OPEN
/etc/passwd ACCESS
/etc/passwd CLOSE_NOWRITE,CLOSE
^C
Наблюдать за файлом /etc/passwd не завершая наблюдение после появления первого события и используя пользовательский формат вывода, добавляющий текущее время к каждому событию:
$ inotifywait -m —format %T %w%f %e —timefmt %T /etc/passwd
Setting up watches.
Watches established.
17:07:28 /etc/passwd OPEN
17:07:28 /etc/passwd ACCESS
17:07:28 /etc/passwd CLOSE_NOWRITE,CLOSE
17:07:35 /etc/passwd OPEN
17:07:35 /etc/passwd ACCESS
17:07:35 /etc/passwd CLOSE_NOWRITE,CLOSE
^C

Рекурсивно наблюдать за директорией /etc/, не завершая наблюдение после появления первого события, используя польз