Библиотека сайта 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.