상태
서버에 /home/foo
더 이상 필요하지 않은 디렉터리가 있습니다.
불행하게도 이 디렉토리가 여전히 필요한지 아무도 말해 줄 수 없습니다.
표적
이 디렉토리가 여전히 필요한 경우 어떤 프로세스가 이에 액세스하는지 알고 싶습니다.
현재 전략
이 디렉터리에 열려 있는 모든 파일을 관찰합니다.
Inotify를 사용하지 않는 이유
불행하게도 디렉토리에는 많은 하위 디렉토리가 포함되어 있기 때문에 inotify를 사용하고 싶지 않습니다.
- 1604508개 파일
- 287253 하위 디렉터리
질문
디렉토리(재귀) 트리 아래에서 열려 있는 모든 파일을 보는 방법은 무엇입니까? 어떤 프로세스가 액세스하는지 알고 싶습니다.
환경
/home
ext4 파일 시스템입니다.- 수스 리눅스 12.3. 커널: 3.7.10
반복하지 않음
내 질문은 중복되지 않습니다어떤 프로그램이나 스크립트가 특정 파일을 생성했는지 알아내는 것이 가능합니까?부터....:
- 디렉토리 트리에 하위 디렉토리가 너무 많기 때문에 inotify를 사용할 수 없습니다.
- Loggingfs를 사용할 수 없습니다. 이 디렉토리의 파일 시스템 유형을 변경할 수 없습니다.
하사품
이미 두 가지 좋은 답변이 있습니다. 하지만 궁금합니다. 다른 방법도 있을 수 있습니다. 현상금 50 :-)
답변1
이를 사용할 수 있어야 합니다 auditd
(사용 가능한 경우 Linux 배포판에 따라 다르지만).
이 auditctl
명령은 감사를 구성하는 데 사용되며 매뉴얼 페이지에서는 요구 사항을 구현하는 방법을 설명해야 합니다.
그것은 마치,
auditctl -w /home/foo -p war -k foo-watch
그런 다음 나중에 다음을 사용하여 감사 로그를 검색할 수 있습니다.
ausearch -k foo-watch
SUSE에서 이 작업을 수행하는 예는 다음과 같습니다.여기에서 발견.
답변2
SuSE에서 활성화되어 있는지는 모르겠지만팬 알림API는 전체 파일 시스템을 모니터링합니다. 간단한 유틸리티도 있습니다파트라스여기에는 모든 파일 열기, 읽기, 쓰기 및 닫기가 표시됩니다. 예
$ cd; sudo fatrace -f O -c
tail(1500): CO /home/meuh/dot/privoxy/logs/160426
ls(28599): O /home/meuh
bash(2075): O /home/meuh/dot/bashhistory.xt-right
-f O
-c
현재 작업 디렉토리를 보유하고 있는 전체 파일 시스템 뿐만 아니라 열린 부분도 추적하세요 . 타임스탬프를 가져오도록 선택할 수도 있습니다.
답변3
몇 가지 접근 방식을 볼 수 있습니다.
/home/foo를 포함하는 파일 시스템이 atime(또는 파일 시스템 유형에 해당하는 것)을 사용하여 마운트된 경우 atime을 사용하여
find /home/foo -atime +10 -ls
11일 이내에 해당 파일에 액세스했는지 확인할 수 있습니다.또는 "찔러서" 확인하는 것을 선호하는 경우지금이 디렉토리에 있는 항목에 액세스하면
lsof | grep /home/foo
몇 가지 단서를 얻을 수 있습니다(test::cd /home/foo ; lsof | grep /home/foo
는 이제 해당 경로 아래에 cwd(현재 작업 디렉토리)가 있으므로 적어도 쉘의 pid를 출력해야 합니다...)
(참고: 지금은 둘 다 테스트할 수 없습니다. Linux가 없습니다... 하지만 둘 다 작동해야 한다고 생각합니다.)