Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Inotify-tools: осуществляем мониторинг изменении файловой системы в Linux

Автор: И.Штомпель
Дата публикации: 24.03.2012.


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

Inotify — подсистема ядра

Inotify — это подсистема ядра Linux, которая отслеживает изменения файловой системы в Linux (открытие, чтение, создание, удаление, перемещение, изменение атрибутов и др.). Впервые данная подсистема появилась в релизе ядра 2.6.13. Другими словами, подсистема позволяет получить информацию о действиях, которые были осуществлены с любым интересующим вас файлом.

Inotify-tools: знакомство и установка

Inotify-tools — это набор утилит, которые посредством командной строки позволяют работать с подсистемой Inotify. Кроме того, составной часть проекта Inotify-tools является соответствующая библиотека — libinotifytools, которая позволяет с легкостью задействовать интерфейс, предоставляемый подсистемой Inotify.

Мы будем использовать операционную систему Ubuntu 11.10. Установка Inotify-tools в ней не займёт много времени. Что касается других дистрибутивов (последних версий), то рассматриваемый пакет утилит доступен из репозиториев для openSUSE 12.1, Debian 6.x, Arch и других.

Запустите терминал или перейдите в консоль, а затем дайте команду:

$ sudo apt-get install inotify-tools

Кстати, если вы обратите внимание, то увидите, что, помимо inotify-tools будет установлен пакет — libinotifytools0. Это та самая библиотека, о которой мы говорили выше, и которая необходима для работы inotify-tools.

Работаем с Inotify-tools

В пакет inotify-tools входят следующие утилиты: inotifywatch и inotifywait. inotifywatch — эта утилита, которая дает представление о том, какую информацию можно получить с помощью подсистемы Inotify, а также осуществляет сбор статистической информации о соответствующих событиях файловой системы (открытие файлов, удаление и т. д. - далее, в этом контексте будут иметься ввиду события Inotify).

Рассмотрим на примерах, как это работает. Откройте терминал и дайте команду:

$ inotifywatch -r ~

После чего вы увидите на экране примерно следующее (см. рис. 1)

Рисунок 1. inotifywatch в процессе работы

Это означает, что inotifywatch успешно запущен и осуществляет рекурсивный (опция "-r") сбор информации о действиях с файловой системой в домашнем каталоге текущего пользователя. Например, запустим браузер Mozilla Firefox и закроем его. Далее нажмём в терминале "Ctrl"+"C", чтобы остановить inotifywatch. В итоге мы увидим примерно следующее (см. рис. 2, для увеличения щелкните по рисунку мышкой).

Рисунок. 2. Вывод Inotifywatch

В этом выводе вы можете увидеть к каким файлам обращался Mozilla Firefox во время своей работы.

При помощи опции "-e" можно добиться более гибкого вывода информации от inotifywatch. Так, например, нам необходимо узнать какие файлы или каталоги во время своей работы открывает Mozilla Firefox. Дадим следующую команду:

$ inotifywatch -r -e open ~

После этого, запустим Mozilla Firefox, поработаем в нем, а затем закроем. Далее остановим в терминале, как в прошлый раз ("Ctrl"+"C"), и работу самой утилиты inotifywatch. В выводе мы уже увидим все лишь три "колонки" — total, open и filename (см. рис. 3).

Рисунок 3. Вывод inotifywatch при использовании опции "-e"

Воспользовавшись справкой для данной утилиты, вы можете увидеть, что inotifywatch способна собирать информацию о довольно большом количестве событий. Получить справку по inotifywatch можно с помощью соответствующего руководства man (man inotifywatch), а также указав перед данной командой опцию - "-h".

Итак, inotifywatch не отображает статистику о событиях файловой системы сразу. Но, что делать когда необходимо получать информацию о событиях сразу, как они начинают происходить. Во общем, осуществлять мониторинг. В этом нам поможет вторая утилита из пакета Inotify-tools — inotifywait.

Дайте следующую команду:

$ inotifywait -mr ~

где опция "-m" — указывает осуществлять мониторинг событий, без этой опции inotifywait прекратит работу после первого события; опция "-r" - указывает осуществлять рекурсивный сбор информации о действиях с файловой системой.

А запустив Mozilla Firefox, вы увидите все файлы, к которым обращается браузер, а также, действия, которые он с ними осуществляет (создание временных файлов, обращение к внутренним базам данных sqlite и т.д.).

Для получения справки по работе с inotifywait воспользуйтесь соответствующей страницей руководств, а также используйте опцию "-h".

Заключение

inotify-tools удобный инструмент мониторинга событий файловой системы. Кроме того, в ситуация, когда необходимо получить сведения о файлах и каталогах, к которым обращается та или иная программа, inotify-tools может стать лучшим решением, т. к. имеет небольшой объем и мало зависимостей, а также является интерфейсом для подсистемы ядра — Inotify.

Источники и дополнительные материалы:

1. Страница Википедии, посвященная Inotify - http://ru.wikipedia.org/wiki/Inotify;

2. Проект Inotify-tools на GitHub — https://github.com/rvoicilas/inotify-tools/;

3. Исходный код libinotifytools - https://github.com/rvoicilas/inotify-tools/tree/master/libinotifytools/src;

4. Сайт посвященный libinotifytools — http://inotify-tools.sourceforge.net/api/index.html;

5. К. Вервлоесем. Inotify: Следим за системой // Linux Format. - N 1. - 2011. - с. 80 - 83.