상태

상태

상태

서버에 /home/foo더 이상 필요하지 않은 디렉터리가 있습니다.

불행하게도 이 디렉토리가 여전히 필요한지 아무도 말해 줄 수 없습니다.

표적

이 디렉토리가 여전히 필요한 경우 어떤 프로세스가 이에 액세스하는지 알고 싶습니다.

현재 전략

이 디렉터리에 열려 있는 모든 파일을 관찰합니다.

Inotify를 사용하지 않는 이유

불행하게도 디렉토리에는 많은 하위 디렉토리가 포함되어 있기 때문에 inotify를 사용하고 싶지 않습니다.

  • 1604508개 파일
  • 287253 하위 디렉터리

질문

디렉토리(재귀) 트리 아래에서 열려 있는 모든 파일을 보는 방법은 무엇입니까? 어떤 프로세스가 액세스하는지 알고 싶습니다.

환경

  • /homeext4 파일 시스템입니다.
  • 수스 리눅스 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 -ls11일 이내에 해당 파일에 액세스했는지 확인할 수 있습니다.

  • 또는 "찔러서" 확인하는 것을 선호하는 경우지금이 디렉토리에 있는 항목에 액세스하면 lsof | grep /home/foo몇 가지 단서를 얻을 수 있습니다(test:: cd /home/foo ; lsof | grep /home/foo는 이제 해당 경로 아래에 cwd(현재 작업 디렉토리)가 있으므로 적어도 쉘의 pid를 출력해야 합니다...)

(참고: 지금은 둘 다 테스트할 수 없습니다. Linux가 없습니다... 하지만 둘 다 작동해야 한다고 생각합니다.)

관련 정보