이는 사용 inotifywatch
방식과 도구 자체의 작동 방식 때문입니다. 을 (를) 실행하면 이미inotifywatch -r /tmp
보고있는 /tmp
모든 파일과 감상을 시작 합니다. 내부에 파일을 만들면 디렉토리 메타 데이터가 새 파일의 inode 번호를 포함하도록 업데이트됩니다. 즉, 변경 사항이 아닌에서 발생합니다 . 또한 시작할 때 거기에 없었기 때문에 시계 가 없습니다 . 즉, 시계를 배치 한 후 생성 된 파일에서 발생하는 이벤트는 감지되지 않습니다 . 직접 보면 더 잘 이해할 수 있습니다./tmp
/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
스위치의 동작 방식 때문입니다 .
-r
, --recursive
: [...] 감시 디렉토리 내에 새 디렉토리가 작성 되면 자동으로 감시됩니다.
편집 : 두 예제 사이에 약간 혼란 스러웠지만 첫 번째 경우 사용자가 전화했기 때문에 시계가 올바르게 배치 inotifywatch
되었습니다 ~/*
(확장, don_crissti의 의견 참조 ). ~/.*
포함되어 있기 때문에 홈 디렉토리도 감시 ~/.
됩니다. 이론적 ~/..
으로는 -r
스위치 와 결합 하여 전체 시스템을 감시해야하는을 포함해야합니다.
그러나, 이다 a는 트리거 파일의 이름을 얻을 수 만들 감시 된 디렉토리에 이벤트를 아직 내가 추측하고있어 inotifywatch
(이 디렉토리 이름보다 더 깊은 조금 저장)이 정보를 검색하지 않습니다. inotify-tools
이라고 불리는 또 다른 도구를 제공하며 inotifywait
,보다 비슷한 동작을 할 수 있으며 inotify-watch
더 많은 출력 옵션을 제공합니다 ( %f
여기서 찾고있는 것 포함) :
inotifywait -m --format "%e %f" /tmp
에서 맨 페이지 :
--format <fmt>
printf와 같은 구문을 사용하여 사용자가 지정한 형식으로 출력합니다. [...] 다음 변환이 지원됩니다.
%f
: 이벤트가 디렉토리 내에서 발생하면 이벤트를 일으킨 파일 이름으로 바뀝니다 .
%e
: 발생한 이벤트 (쉼표로 구분)로 교체되었습니다.
또한 -m
옵션 (모니터)은 inotifywait
첫 번째 이벤트 후에도 계속 실행되며의 이벤트와 매우 유사한 동작을 재현합니다 inotifywatch
.
.bashrc
serverfault
사용자가 홈 디렉토리를 재귀 적으로 모니터링하기 때문에 @ 가 통계에 나타나지 않지만path/.*
확장되어 결과적으로path/
(.bashrc
포함) 아래의 모든 .files에 대해 시계가 설정됩니다 . OP가 사용하는 명령은 감시가 설정/tmp
되고 하위 디렉토리가 포함되므로 통계는 하위 디렉토리에만 적용되므로 파일 이름을 출력/tmp
하지 않습니다. 이름).