apt-get
или yum
должен упростить много для Вас. Можно даже скомпилировать собственное и использование, которые соединяют каналом, и оно выберет gcc пути, который Вы указали.
Для этого можно использовать 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
.