시스템에 열려 있는 모든 파일을 나열하는 방법이 있습니까?
현재 열려 있는 모든 파일을 표시하거나(전체 경로, 어쩌면 일부 lsof
옵션 포함), 내 경우에는 더 흥미로운 방법으로 열려 있는 경로 이름을 나열하는 것( 의 방식으로 )이 가능하다고 tail -f
생각하지 않습니다 .lsof
답변1
이 프로그램은 inotifywait
귀하가 찾고 있는 것과 같은 고성능 파일 모니터링을 위해 설계되었습니다. 개념 증명은 다음과 같습니다.
$ inotifywait -qrm -e open -e access --format "%e %f" tmp/
OPEN hello
OPEN,ISDIR
ACCESS,ISDIR
OPEN hello
출력은 을 실행 touch tmp/hello
한 다음 less tmp/h<TAB>
(탭 완료 less tmp/hello
), Enter 키를 눌러 Less로 파일을 열면 나옵니다.
/proc
시스템 전체에서 실행하는 경우 및 같은 위치를 제외할 수 있습니다 /sys
. 디렉터리를 제외하도록 파이프할 수도 있습니다 grep -vE '^(OPEN|ACCESS),ISDIR$
. 마지막으로 재귀 모니터링에 대한 경고도 살펴봐야 합니다.
경고하다: 큰 트리의 루트를 모니터링할 때 이 옵션을 사용하면 모든 Inotify 모니터링이 완료되기까지 상당한 시간이 걸릴 수 있으며, 이 시간 동안에는 어떤 이벤트도 수신되지 않습니다. 또한 각 하위 디렉터리마다 하나의 Inotify 감시가 설정되므로 사용자당 최대 Inotify 감시 수에 도달할 수 있습니다. 기본 최대값은 8192입니다. /proc/sys/fs/inotify/max_user_watches에 기록하여 늘릴 수 있습니다.