Como capturar um processo de comando

2

Como sabemos, o lsof pode saber qual arquivo / diretório é usado pelo processo. Mas eu quero capturar um processo de comando para julgar qual arquivo / diretório o comando irá chamar.

Por exemplo, o useradd chamará o /etc/passwd e o etc/shadow , o lastb chamará o /var/log/btmp . Claro, alguns programas podem abrir arquivos condicionalmente, mas estou interessado apenas nesses arquivos / diretórios durante o comando invocando? Essas informações podem ser conhecidas capturando o processo produzido pelo comando?

Se isso é realmente possível, como fazer isso?

    
por yode 04.07.2017 / 23:56

1 resposta

4

strace pode ser de interesse.

# 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]
    
por 05.07.2017 / 00:07