Я хотел бы узнать, как я могу отследить (показать) доступ к файлам в Solaris. Я уже нашел набор инструментов dtrace в надежде, что voptrace
будет соответствовать всем требованиям. Я запустил это с voptrace -t /my/path
Если я ls
или cat
файлы по этому пути не выводятся. Я смотрю не на тот инструмент? Может ли кто-нибудь предложить другое решение?
ОБНОВИТЬ
@bahamat
Хорошо, он выдавал такие сообщения об ошибках:
dtrace: error on enabled probe ID 3 (ID 126: syscall::openat:entry): invalid address (0xffd19652) in predicate at DIF offset 28
После перенаправления stderr кажется, что он действительно дает очень близко к тому, что я хочу.
Брендан Грегг имеет ряд хороших dtrace
один лайнер на его сайте. Среди них один лайнер для просмотра файлов, открытых процессом:
dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
Расширяя это, вы можете наблюдать, как открывается конкретный файл, добавляя предикат:
dtrace -n 'syscall::open*:entry /copyinstr(arg0)=="/etc/passwd"/ { printf("%s %s",execname,copyinstr(arg0)); }'
Получение следующего вывода:
CPU ID FUNCTION:NAME
2 12622 open64:entry cat /etc/passwd
ls
немного отличается, в этом ls file
не открывается file
. Оно использует stat
вместо этого (в частности, lstat64
) так что зонд будет syscall::*stat*:entry
.
Обратите внимание, что dtrace
реализации различаются. Приведенные выше команды выполнялись на illumos. YMMV.