
Digamos que tengo un programa y quiero monitorear la actividad de su sistema de archivos (qué archivos/directorios se crean/modifican/eliminan, etc.). Este programa puede ser capaz de generar procesos adicionales y, por lo tanto, me gustaría obtener la actividad de estos procesos generados también.
¿Cómo debo hacer esto?
Respuesta1
Puedes usarstrace
para esto:
strace -f -e trace=file command args...
strace
rastrea las llamadas al sistema e imprime una descripción de ellas según el error estándar a medida que ocurren. La -f
opción le indica que también realice un seguimiento de los procesos y subprocesos secundarios. -e
le permite modificar las llamadas que rastreará: -e trace=file
registrará cada uso de open
, unlink
etc., pero ninguna acción que no sea de archivo.
Si desea ver qué se leyó y se escribió en los archivos, cámbielo a -e trace=file,read,write
; También puede enumerar allí cualquier llamada adicional que desee examinar. Si omite ese argumento por completo, recibirá todas las llamadas al sistema.
El resultado es así (lo ejecuté mkdir /tmp/test
en un 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} ---
Puede iniciar sesión en un archivo en lugar del terminal con -o filename
y hacer que la salida (aún) sea más detallada con -v. También es posible adjuntarlo a un proceso ya existente con -p PID
, en caso de que sea más útil.
Si está buscando hacer esto mediante programación, en lugar de inspeccionarse usted mismo, mire laptrace
llamar, que es strace
sobre lo que se construye.