lsof
우리는 프로세스가 어떤 파일/디렉토리를 차지하고 있는지 알 수 있다는 것을 알고 있습니다 . 하지만 명령이 호출할 파일/디렉토리를 결정하기 위해 명령 프로세스를 캡처하고 싶습니다.
예를 들어, useradd
will call /etc/passwd
및 etc/shadow
the lastb
will call 입니다 /var/log/btmp
. 물론 일부 프로그램에서는 조건에 따라 파일을 열 수 있지만 명령 호출 중에 해당 파일/디렉터리에만 관심이 있습니까? 명령에 의해 생성된 프로세스를 캡처하여 이 정보를 알 수 있습니까?
정말로 가능하다면 어떻게 해야 할까요?
답변1
strace
관심이 있을 수도 있습니다.
# strace -fe open useradd bob
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libaudit.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libcap-ng.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/proc/filesystems", O_RDONLY) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 4
open("/proc/sys/kernel/ngroups_max", O_RDONLY) = 4
open("/etc/default/useradd", O_RDONLY) = 4
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 5
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 5
open("/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 5
open("/etc/group", O_RDONLY|O_CLOEXEC) = 5
open("/etc/login.defs", O_RDONLY) = 4
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 4
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
open("/lib64/tls/x86_64/libnss_sss.so.2", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
[etc]