프로그램이 있고 파일 시스템 활동(어떤 파일/디렉토리가 생성/수정/삭제되는지 등)을 모니터링하고 싶다고 가정해 보겠습니다. 프로그램이 더 많은 프로세스를 생성할 수 있으므로 다음과 같은 활동을 얻고 싶습니다. 생성된 프로세스에도 마찬가지입니다.
어떻게 해야 하나요?
답변1
당신은 그것을 사용할 수 있습니다strace
이를 위해:
strace -f -e trace=file command args...
strace
시스템 호출을 추적하고 해당 설명이 발생하면 표준 오류로 인쇄합니다. 이 -f
옵션은 하위 프로세스와 스레드도 추적하도록 지시합니다. -e
추적할 호출을 수정할 수 있습니다. -e trace=file
등의 모든 사용은 기록되지만 파일이 아닌 작업은 기록되지 않습니다.open
unlink
파일에서 읽은 내용과 파일에 기록된 내용을 보려면 이를 로 변경하세요. -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
빌드의 기초입니다.