/tmp
다음을 사용하여 폴더의 변경 사항을 모니터링 하려고 합니다 inotifywatch
.
sudo inotifywatch -v -r /tmp
몇 개의 파일( touch /tmp/test-1 /tmp/test-2
)을 생성한 후 종료합니다 inotifywatch
. 이를 통해 Ctrl다음 C통계가 표시됩니다.
Establishing watches...
Setting up watch(es) on /tmp
OK, /tmp is now being watched.
Total of 39 watches.
Finished establishing watches, now collecting statistics.
total attrib close_write open create filename
8 2 2 2 2 /tmp/
출력에는 통계만 인쇄되지만 예상한 파일은 인쇄되지 않습니다(예:여기또는여기). 다양한 유형의 액세스(등 cat
을 통해)를 시도했지만 mktemp
결과는 동일합니다.
내가 놓친 게 무엇입니까? VPS를 사용하고 있어서 일부 콘텐츠가 제한되어 있기 때문인가요?
운영 체제: VPS의 Debian 7.3(inotify-tools)
답변1
이는 도구를 사용하는 방식 inotifywatch
과 도구 자체가 작동하는 방식 때문입니다. 을 실행하면 모든 파일을 inotifywatch -r /tmp
보기 시작합니다./tmp
이미내부에. 에서 파일을 생성하면 /tmp
새 파일의 inode 번호를 포함하도록 디렉터리 메타데이터가 업데이트됩니다. 이는 변경 사항이 에서 /tmp
가 아니라 에서 발생했음을 의미합니다 /tmp/test-1
. 또한 출시 /tmp/test-1
당시에는 시계가 없었기 때문에 inotifywatch
시계가 배치되어 있지 않습니다 .inotify
이는 시계를 배치한 후 생성된 파일에서 발생하는 모든 이벤트가 감지되지 않음을 의미합니다.. 직접 눈으로 보면 더 잘 이해할 수 있을 것입니다.
$ inotifywatch -rv /tmp &
Total of n watches.
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
당신이 가지고 있다면추적 활성화inotify_add_watch(2)
, 마지막 명령은 설정한 시계 수를 알려줍니다 inotifywatch
. 이 숫자는 자체적으로 주어진 숫자와 동일해야 합니다 inotifywatch
. 이제 내부에 파일을 만들고 /tmp
다시 확인하십시오.
$ inotifywatch -rv /tmp &
Total of n watches.
$ touch /tmp/test1.txt
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n
이 숫자는 증가하지 않습니다. 이는 새 파일을 볼 수 없음을 의미합니다. 디렉터리를 생성하면 동작이 달라집니다.
$ inotifywatch -rv /tmp &
Total of n watches.
$ mkdir /tmp/test1
$ cat /sys/kernel/debug/tracing/trace | grep inotifywatch | wc -l
n + 1
-r
,--recursive
: [...] watch 디렉터리 내에 새 디렉터리를 생성하는 경우자동으로 모니터링됩니다.
편집하다:두 가지 예를 들으니 조금 혼란스럽습니다만,첫 번째 경우, 사용자가 inotifywatch
( ~/*
확장,여기에서 don_crissti의 의견을 확인하세요.). 이론적 ~/.*
으로 는 홈 디렉토리 ~/.
도 포함되어야 하며 ~/..
스위치와 결합하면 -r
전체 시스템을 모니터링할 수 있습니다.
그러나 그것은예트리거된 파일의 이름을 얻을 수 있습니다.만들다이벤트는 모니터링되는 디렉터리에 있지만 이 정보는 검색되지 않는 것 같습니다 inotifywatch
(디렉터리 이름보다 조금 더 깊은 곳에 저장되어 있습니다). 매우 유사하게 작동 하고 더 많은 출력 옵션을 제공하는 inotify-tools
이라는 또 다른 도구가 있습니다 ( 여기에서 찾고 있는 를 포함).inotifywait
inotify-watch
%f
inotifywait -m --format "%e %f" /tmp
~에서매뉴얼 페이지:
--format <fmt>
printf와 유사한 구문을 사용하여 사용자가 지정한 형식으로 출력합니다. [...] 다음 변환이 지원됩니다.
%f
:해당 디렉토리에서 이벤트가 발생하면 해당 이벤트를 발생시킨 파일 이름으로 대체됩니다..
%e
: 발생한 이벤트를 쉼표로 구분하여 대체합니다.
또한 -m
옵션(모니터)은 inotifywait
첫 번째 이벤트 이후에도 계속 실행되어 와 매우 유사한 동작을 재현합니다 inotifywatch
.