Monitorando a atividade do sistema de arquivos

Monitorando a atividade do sistema de arquivos

Digamos, eu tenho um programa e quero monitorar a atividade do sistema de arquivos (quais arquivos/diretórios são criados/modificados/excluídos etc.). Este programa pode ser capaz de gerar processos adicionais e, portanto, gostaria de obter a atividade de esses processos gerados também.

Como devo fazer isso?

Responder1

Você pode usarstracepor esta:

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

stracerastreia as chamadas do sistema e imprime uma descrição delas para o erro padrão à medida que ocorrem. A -fopção também informa para rastrear processos e threads filhos. -epermite modificar as chamadas que ele rastreará: -e trace=fileregistrará todos os usos de open, unlink, etc, mas nenhuma ação que não seja de arquivo.

Se você quiser ver o que foi lido e gravado nos arquivos, altere para -e trace=file,read,write; você também pode listar quaisquer chamadas adicionais que deseja examinar. Se você deixar de lado esse argumento, receberá todas as chamadas do sistema.

A saída é assim (executei mkdir /tmp/testem um shell rastreado):

[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} ---

Você pode registrar em um arquivo em vez do terminal com -o filenamee tornar a saída (ainda) mais detalhada com -v. Também é possível anexar a um processo já existente -p PID, caso seja mais útil.

Se você deseja fazer isso programaticamente, em vez de inspecionar a si mesmo, consulte optracechamar, que é o que straceé construído.

informação relacionada