Мониторинг активности файловой системы

Мониторинг активности файловой системы

Допустим, у меня есть программа, и я хочу отслеживать активность ее файловой системы (какие файлы/каталоги создаются/изменяются/удаляются и т. д.). Эта программа может порождать дополнительные процессы, и поэтому я хотел бы также получить информацию об активности этих порожденных процессов.

Как мне это сделать?

решение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на котором и построено.

Связанный контент