Подтвердить что ты не робот

Как постоянно контролировать каталог с помощью команды dnotify/inotify

Я новичок в команде dnotify/inotify. Может ли кто-нибудь помочь мне написать script, чтобы он непрерывно контролировал каталог и указывал на то, что он имеет какое-то изменение или модификацию.

4b9b3361

Ответ 1

Inotify сам является модулем ядра, доступным через вызовы от, например. программа C. http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/

Существует набор приложений, называемый inotify-tools, который содержит:

inotifywait - ждать изменений в файлах с помощью inotify

http://linux.die.net/man/1/inotifywait

и

inotifywatch - собирать статистику доступа к файловой системе, используя inotify

http://linux.die.net/man/1/inotifywatch

Вы можете использовать inotify непосредственно из командной строки, например. например, для непрерывного мониторинга всех изменений в домашнем каталоге (может генерировать много выходных данных):

inotifywait -r -m $HOME

И вот script, который непрерывно отслеживает и реагирует на активность журнала Apache, скопированный из файла man inotifywait:

#!/bin/sh
while inotifywait -e modify /var/log/messages; do
  if tail -n1 /var/log/messages | grep httpd; then
    kdialog --msgbox "Apache needs love!"
  fi
done

Ответ 2

Ниже я использую, чтобы видеть операции в отдельном файле. "-m" вызывает мониторинг против выхода после одного события. Чтобы получить отметки времени, вам нужно как минимум 3.13 версию инструментов inotify, но если это не важно (или недоступно в вашей ОС или сложно обновить), вы можете пропустить параметры timefmt и format. "cat/etc/resolv.conf" в другой оболочке приводит к следующим результатам:

$ inotifywait -m --timefmt '%H:%M' --format '%T %w %e %f' /etc/resolv.conf

Setting up watches.  
Watches established.
12:49 /etc/resolv.conf OPEN 
12:49 /etc/resolv.conf ACCESS 
12:49 /etc/resolv.conf CLOSE_NOWRITE,CLOSE 

В inotifywait есть опции для просмотра каталогов, поэтому проверьте man-страницу. Добавьте -r для рекурсивного наблюдения за детьми из каталога.

Вот пример с командами, которые я набрал в другом окне с префиксом "- > ":

$ inotifywait -mr --timefmt '%H:%M' --format '%T %w %e %f' /home/acarwile/tmpdir
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.

-> cd into directory, no info
-> ls in directory
13:15 /home/acarwile/tmpdir/ OPEN,ISDIR 
13:15 /home/acarwile/tmpdir/ CLOSE_NOWRITE,CLOSE,ISDIR 

-> touch newfile
13:16 /home/acarwile/tmpdir/ CREATE newfile
13:16 /home/acarwile/tmpdir/ OPEN newfile
13:16 /home/acarwile/tmpdir/ ATTRIB newfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE newfile

-> mv newfile renamedfile
13:16 /home/acarwile/tmpdir/ MOVED_FROM newfile
13:16 /home/acarwile/tmpdir/ MOVED_TO renamedfile

-> echo hello >renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ OPEN renamedfile
13:16 /home/acarwile/tmpdir/ MODIFY renamedfile
13:16 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile

-> touch renamedfile
13:17 /home/acarwile/tmpdir/ OPEN renamedfile
13:17 /home/acarwile/tmpdir/ ATTRIB renamedfile
13:17 /home/acarwile/tmpdir/ CLOSE_WRITE,CLOSE renamedfile

-> rm renamedfile
13:17 /home/acarwile/tmpdir/ DELETE renamedfile

-> cd ..; rmdir tmpdir
13:17 /home/acarwile/tmpdir/ DELETE_SELF 

После вышесказанного я попытался переделать tmpdir ( "mkdir tmpdir" ), но не получил от него никакого вывода. Новый tmpdir - это не тот же каталог, что и старый tmpdir. Время просто ^ C и остановить itnotifywait.

Ответ 3

Как я уже говорил в https://superuser.com/a/747574/28782, я создал вспомогательный script, который использует inotifywait без каких-либо ограничений: inotifyexec

Пример использования (предположим, вы добавили его в свой системный путь как исполняемый файл):

inotifyexec "echo test" -r .