Как отследить доступ к файлу с помощью dtrace на солярисе
Я хотел бы узнать, как я могу отслеживать (показывать) доступ к файлам в 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 кажется, что он дает довольно близко к тому, что я хочу.
1 ответ
Брендан Грегг имеет ряд хороших 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
реализации варьируются. Команды выше были запущены на иллюминаторах. YMMV.