Эквивалент SysInternals FileMon для Linux?

13

Я пытаюсь отладить приложение в Ubuntu - мне нужно прослушивать попытки открытия файлов (даже для файлов, которые не существуют).

Process Monitor (ранее известный как FileMon ) доступен в Windows - что находится в служебном поясе Ubuntu?

Благодарность!

Ashley

chickeninabiscuit
источник

Ответы:

7

Вы ищете Strace. Посмотрите здесь: https://wiki.ubuntu.com/Strace

Эван Андерсон
источник
2
Насколько я понимаю, запуск filemon позволяет пользователю видеть все обращения к файлам. strace, с другой стороны, требует, чтобы вы указали, какое приложение открывать первым. Это требует, чтобы вы знали заранее, приложение, которое обращается к этим файлам. Что если вы не знаете, какое приложение обращается к тем файлам, на которые вы хотите посмотреть?
Чуак
8

Это зависит от того, что вы хотите:

  • В целом, вы хотите посмотреть inotify, чтобы увидеть все обращения к файлам, которые делает любой процесс.

  • В маленьком, strace позволит вам наблюдать системные вызовы, которые делает определенный процесс. Стрейс довольно круто. strace -f -eopen $cmdНапример, вы можете отследить вызовы процесса для «открытия» . Страница людей имеет полную информацию о синтаксисе, конечно.

pjz
источник
Спасибо пдз. Чтобы быть очень конкретным - у меня возникли проблемы с началом работы с Ogre3d в Ubuntu. Мое тестовое приложение, похоже, ищет некоторые файлы .cfg во время запуска. Я хочу прослушать все попытки открытия файлов, чтобы убедиться, что правильные файлы доступны и имеют правильные разрешения.
куриное печенье
strace -e open ./app
Джастин
2

straceПеред запуском приложения хорошо смотреть, что делает приложение.
lsofприятно видеть, какие файлы использует уже запущенное приложение.

Кстати:
lsof -ni:22 показывает, какой процесс использует порт 22.

ThorstenS
источник
2

У SGI есть инструмент, который вы можете попробовать: http://oss.sgi.com/projects/fam/

user10103
источник
2
под linux fam это история. В настоящее время действительно используйте inotify
ThorstenS
1

Вот пример использования strace для отслеживания изменений файла:

strace -f -e trace=file -p7546 -o /tmp/outputfile

-fобеспечивает захват событий дочерних процессов.
-e trace=fileговорит, что мы должны перехватывать системные вызовы, связанные с файлами (например stat, openи futexт. д.)
-p- это идентификатор процесса (полученный из ps -auxили другими средствами), -oуказанный в выходном файле (может быть много данных, и вместо этого вы можете использовать grep в качестве фильтра)

waitinforatrain
источник
0

Это старый, но я думаю, что это хорошая идея, чтобы обновить его на сегодня реальность.

Для отладки всего одного процесса и их потомков, strace все равно будет лучшим способом. Он может легко показать любой доступ к файлу, даже на отсутствующих файлах.

Для общей отладки системы, функция аудита в ядре может сделать это и является рекомендуемым способом. Он не требует каких-либо исправлений для последних ядер, только установленный пакет аудита

Вот простой графический интерфейс для его использования:

аудит-гуй

Это копирует Windows Filemon, отслеживая доступ к файлам для всех мест, процессов и т. Д.

также проверьте этот пост

Игиты
источник
0

Вот что хорошо сработало для меня (Linux Mint 19.1):

sudo lsof 2>&1 | grep programnamehere

Не уверен, зачем 2>&1это нужно, но он не отфильтровывался, если я не использовал его.

Андрей
источник