파일 시스템 활동 모니터링

파일 시스템 활동 모니터링

프로그램이 있고 파일 시스템 활동(어떤 파일/디렉토리가 생성/수정/삭제되는지 등)을 모니터링하고 싶다고 가정해 보겠습니다. 프로그램이 더 많은 프로세스를 생성할 수 있으므로 다음과 같은 활동을 얻고 싶습니다. 생성된 프로세스에도 마찬가지입니다.

어떻게 해야 하나요?

답변1

당신은 그것을 사용할 수 있습니다strace이를 위해:

strace -f -e trace=file command args...

strace시스템 호출을 추적하고 해당 설명이 발생하면 표준 오류로 인쇄합니다. 이 -f옵션은 하위 프로세스와 스레드도 추적하도록 지시합니다. -e추적할 호출을 수정할 수 있습니다. -e trace=file등의 모든 사용은 기록되지만 파일이 아닌 작업은 기록되지 않습니다.openunlink

파일에서 읽은 내용과 파일에 기록된 내용을 보려면 이를 로 변경하세요. -e trace=file,read,write확인하려는 다른 호출도 나열할 수 있습니다. 이 인수를 완전히 포기하면 모든 시스템 호출을 받게 됩니다.

출력은 다음과 같습니다( mkdir /tmp/test추적 셸에서 실행 중입니다).

[pid  1444] execve("/usr/bin/mkdir", ["mkdir", "/tmp/test4"], [/* 33 vars */]) = 0
[pid  1444] access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
[pid  1444] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid  1444] open("/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid  1444] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
[pid  1444] mkdir("/tmp/test", 0777)    = 0
[pid  1444] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=1444, si_status=0, si_utime=0, si_stime=0} ---

터미널 대신 파일에 로그인을 사용 -o filename하고 -v를 사용하여 출력을 더 장황하게 만들 수 있습니다. -p PID더 유용한 경우 기존 프로세스에 연결하여 사용할 수도 있습니다 .

직접 확인하는 대신 프로그래밍 방식으로 이 작업을 수행하려면 다음을 살펴보세요.ptrace부르다, 이는 strace빌드의 기초입니다.

관련 정보