장치를 생성할 때 inotifywait는 변경되지 않습니다.

장치를 생성할 때 inotifywait는 변경되지 않습니다.

이것은 완벽하게 작동합니다.

$ inotifywait --event create ~/foo
Setting up watches.
Watches established.
/home/ron/foo/ CREATE bar

그러나 /sys/devices/virtual/net 아래에 tun0 디렉토리가 생성되면 해당 디렉토리가 존재합니다.

$ inotifywait --event create /sys/devices/virtual/net
Setting up watches.
Watches established.

이 폴더는 누구나 읽을 수 있으므로 inotifywait가 작동하길 원합니다.

그럼 내가 뭘 잘못하고 있는 걸까요?

감사해요

답변1

하지만자주 묻는 질문(FAQ)다음에 대한 부분적 지원을 의미합니다.

Q: sysfs(procfs, nfs...)를 볼 수 있나요?

간단히 말해서 그렇습니다. 하지만 몇 가지 제한 사항이 있습니다. 이러한 제한은 커널 버전에 따라 다르며 더 작아지는 경향이 있습니다. 특정 파일 시스템에 대해 읽어 보십시오.

실제로 무엇이 지원될 수 있는지(또는 라이브러리/유틸리티의 inotify 지원보다는 파일 시스템 자체에 대부분 의존하기 때문에 어떤 커널 버전에서) 말하지 않습니다.

간단한 설명은 inotify를 지원하는 것이 실제로 의미가 없다는 것입니다.모든 것/sys(또는 ) 에서는 /proc전통적인 의미로 수정되지 않기 때문입니다. 이러한 파일/디렉토리의 대부분은 커널 상태의 스냅샷을 나타냅니다.당신이 그들을 볼 때.

/proc/uptime1000분의 1초까지 정확한 가동 시간을 포함하는 간단한 예를 생각해 보십시오 . inotify가 초당 100번 "작성"되었음을 알려야 합니까? 별로 유용하지 않을 뿐만 아니라, 이러한 가상의 "쓰기"를 대신하여 inotify 이벤트를 생성할 것이 없기 때문에 성능 문제가 될 수 있고 해결하기 까다로운 문제일 수 있습니다. 커널에서 inotify파일 시스템 API 수준에서 작동.

그래서 상황은 이렇습니다일부/proc/uptimesysfs 및 procfs의 항목은 예를 들어 액세스(액세스, 열기, 닫기) 시기를 알려주는 inotify 이벤트를 생성 하지만 내 커널에서는 /proc/mounts파일 시스템이 마운트 및 마운트 해제될 때 어떤 이벤트도 표시하지 않습니다.

Greg Kroah-Hartman이 말한 내용은 다음과 같습니다.

http://linux-fsdevel.vger.kernel.narkive.com/u0qmXPFK/inotify-sysfs 그리고 리누스:

http://www.spinics.net/lists/linux-fsdevel/msg73955.html

(단, 두 스레드 모두 2014년의 스레드입니다.)

즉각적인 문제를 해결하려면 생성 및 삭제된 tun 장치에 대한 트리거를 표시하는 dbus(루트가 필요하지 않음)를 사용할 수 있습니다 (내 장치에는 tun 장치 이름이 표시되지 않고 PtP가 있는 HAL 문자열만 표시됨) (아니요 dbus-monitor --monitor --system). udevadm monitor루트 필요) 또는 폴링 디렉터리로 대체합니다(시도:공유 폴더의 새 파일을 모니터링하는 스크립트(Windows 호스트, Linux 게스트)). ( "n"으로 시작하는 파일을 사용하고 주의 udev할 수도 있지만 이는 매우 나쁜 해킹입니다.)inotifywait -m -r /dev/.udev

답변2

/sys그리고 /proc파일 시스템이 아닙니다. 이는 커널 인터페이스이며 파일 시스템처럼 작동합니다.

네트워크 장치를 생성하면 파일 시스템 폴더가 생성되지 않습니다. 데이터가 변경되면 아무도 보지 않아도 일반 파일 시스템이 변경됩니다. 하지만 /sys콘텐츠는 /proc누군가가 보는 순간 생성됩니다.

udev예를 들어 이벤트(스크립트 실행) 가 필요합니다 .

관련 정보