Контроль действия файловой системы

apt-get или yum должен упростить много для Вас. Можно даже скомпилировать собственное и использование, которые соединяют каналом, и оно выберет gcc пути, который Вы указали.

6
25.06.2014, 02:39
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 call, на котором построена strace.

.
7
27.01.2020, 20:27

Теги

Похожие вопросы