어떤 프로세스가 파일을 생성하는지 확인하는 방법은 무엇입니까? [복사]

어떤 프로세스가 파일을 생성하는지 확인하는 방법은 무엇입니까? [복사]

파일 경로가 주어지면 어떤 프로세스가 해당 파일을 생성했는지(및/또는 읽기/쓰기) 확인하려면 어떻게 해야 합니까?

답변1

이것라소프(여러 답변에서 이미 언급된) 명령은 실행 시 어떤 프로세스에 파일이 열려 있는지 알려줍니다. lsof거의 모든 UNIX 변형에서 작동합니다.

lsof /path/to/file

lsof2마이크로초 전에 열리고 1마이크로초 전에 닫힌 파일에 대해서는 알려주지 않습니다. 특정 파일을 모니터링하고 해당 파일에 액세스할 때 반응해야 하는 경우 다른 도구가 필요합니다.

미리 계획할 수 있다면 파일을로깅 파일 시스템파일 시스템. LoggedFS는퓨즈계층 구조의 파일에 대한 모든 액세스를 기록하는 스택 파일 시스템입니다. 로깅 매개변수는 고도로 구성 가능합니다. 퓨즈를 사용할 수 있습니다.모든 주요 대학. 파일이 생성된 디렉터리에 대한 액세스를 기록해야 합니다. 제공된 샘플 구성 파일로 시작하여 따르십시오.이 가이드.

loggedfs -l /path/to/log_file -c /path/to/config.xml /path/to/directory
tail -f /path/to/log_file

많은 대학에서는 기타 모니터링 시설도 제공합니다. Linux에서는 비교적 새로운 기능을 사용할 수 있습니다. 감사 하위 시스템. 이에 대한 문헌은 많지 않습니다(그러나 Loggedfs에 관한 것 이상).이 튜토리얼또는 희귀한 아니면 그냥auditctl매뉴얼 페이지. 여기에서는 데몬이 시작되었는지 확인한 후 다음을 실행하면 충분합니다 auditctl.

auditctl -w /path/to/file

(이전 시스템에서는 이것이 필요하다고 생각합니다 auditctl -a exit,always -w /path/to/file.) 로그를 살펴보세요 /var/log/audit/audit.log.

답변2

글쎄, 반복해서 실행할 수 lsof있으며 운이 좋다면 범인은 파일이 나타날 수 있을 만큼 오랫동안 파일을 열어 둘 것입니다. 즉. :

$ lsof -r1 /path/to/file

또는 많은 파일의 경우

$ lsof -r1 /path/to/folder/*

이는 특정 시점에 지정된 경로에 대한 모든 액세스를 초당 한 번씩 나열합니다. 여기에는 파일에 액세스하는 프로세스의 PID 나열이 포함됩니다.

이것이 작동하지 않는 경우, 즉 파일이 매우 빠르게 열리고 닫히는 경우가 자주 발생하므로 더 정교한 도구를 찾아야 한다고 생각합니다. 아마도로깅 파일 시스템뭐가 될수 있었는지?

핵랜드
1초에 한 번씩 lsof작동하지 않으면 while 루프를 해킹하여 가능한 한 빨리 lsof를 반복적으로 실행할 수 있습니다. 좋다:

$ while true; do lsof /paht/to/file; done;

예쁘지는 않지만 아마도 그게 그랬을 수도 있습니다.

답변3

당신은 그것을 사용할 수 있습니다lsof그 이유는 다음과 같습니다.

$ lsof /tmp/file
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
less      4737 wena    4r   REG    8,6    90700 1643536 /tmp/file

less이름이 지정된 프로세스가 파일을 저장하고 있다고 나와요 "/tmp/파일" 열려 있는.

노트geany:이상한 점은 or 를 사용하면 작동하지 않는다는 것입니다 nano. 더 좋은 조언 기대하겠습니다.

답변4

ls크롬에서 사용하는 파일을 사용 하고 grep찾을 수 있습니다

$ ls -l /proc/*/fd | grep "chrome"
lrwx------ 1 ba abc 64 Jul 16 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies
lr-x------ 1 abc abc 64 Jul 16 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe
lrwx------ 1 abc abc 64 Jul 16 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0
lrwx------ 1 abc abc 64 Jul 16 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1
lrwx------ 1 abc abc 64 Jul 16 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2
lr-x------ 1 abc abc 64 Jul 16 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

또 다른 방법은 다음을 사용하는 것입니다 lsof.grep

$ lsof | grep "chrome"
chrome     2204       abc  cwd       DIR                8,5     4096 1441794 /home/abc
chrome     2204       abc  rtd       DIR                8,5     4096       2 /
chrome     2204       abc  txt       REG                8,5 87345336 5111885 /opt/google/chrome/chrome
chrome     2204       abc  mem       REG                8,5  4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3
chrome     2204       abc  mem       REG                8,5  1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2
chrome     2204       abc  mem       REG                8,5   270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1
chrome     2204       abc  mem       REG                8,5    45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0

관련 정보