Я новичок в команде dnotify/inotify. Может ли кто-нибудь помочь мне написать script, чтобы он непрерывно контролировал каталог и указывал на то, что он имеет какое-то изменение или модификацию.
Как постоянно контролировать каталог с помощью команды dnotify/inotify
Ответ 1
Inotify сам является модулем ядра, доступным через вызовы от, например. программа C. http://www.ibm.com/developerworks/linux/library/l-ubuntu-inotify/
Существует набор приложений, называемый inotify-tools, который содержит:
inotifywait - ждать изменений в файлах с помощью inotify
и
inotifywatch - собирать статистику доступа к файловой системе, используя inotify
Вы можете использовать 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 .