При диагностике приложения, деплоя или скрипта полезно видеть файловую активность в реальном времени: создание, изменение, удаление и перемещение файлов. В Linux такие события можно отслеживать через
inotify, а из командной строки — с помощью inotifywait.В Debian и Ubuntu утилита устанавливается из стандартных репозиториев:
sudo apt update && sudo apt install -y inotify-tools
Запустим непрерывное наблюдение за каталогом. Параметр
-m (--monitor) оставляет процесс активным после получения события:inotifywait -m /var/www/app
События выводятся по мере их получения от ядра:
/var/www/app/ MODIFY config.json
/var/www/app/ CREATE cache.tmp
/var/www/app/ DELETE cache.tmp
Для наблюдения за всем деревом каталогов добавим
-r (--recursive):inotifywait -m -r /var/www/app
Параметр
-e позволяет оставить только нужные события. move включает события перемещения из наблюдаемого каталога и в него:inotifywait -m -r \
-e create,modify,delete,move \
/var/www/app
Для диагностики удобнее выводить время, тип события и путь объекта:
inotifywait -m -r \
--timefmt '%H:%M:%S' \
--format '%T %e %w%f' \
/var/www/app
При использовании абсолютного пути
%w%f формирует полный путь к объекту:14:32:07 MODIFY /var/www/app/config.json
14:32:11 MOVED_TO /var/www/app/releases/current
Следует учитывать, что одно действие приложения может породить несколько событий
inotify, а рекурсивное наблюдение создаёт отдельные watches для дерева каталогов. Текущий системный лимит можно проверить через sysctl:sysctl fs.inotify.max_user_watches
🔥
inotify фиксирует события файловой системы, но не сообщает PID процесса, который инициировал изменение. Если требуется определить конкретный процесс или пользователя, следует использовать механизмы аудита, например auditd.🚪 Linux Ready | #практика