Назад | Перейти на главную страницу

Как отслеживать доступ к файлам с помощью dtrace на solaris

Я хотел бы узнать, как я могу отследить (показать) доступ к файлам в 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.