Как контролировать доступ к файлам для приложения OS X?

61

Я ищу OS X ядро ​​ответчика FileMon, который был позже включен в ProcessMon .

Кстати, важно иметь возможность фильтровать по процессу.

Сорин
источник
Я добавлю три варианта - поскольку наследие Mac OS X от Unix отличается от архитектуры NT - инструменты не полностью перекрываются. Вы ищете API для программирования или просто инструменты для просмотра того, что происходит в данный момент (или запускаете действия после определенных изменений файла)
bmike

Ответы:

62

Инструменты - часть пакета разработки Apple Xcode - могут контролировать любой доступ к файлам и записи. Откройте его из /Applications/Xcode.app/Contents/Applications/Instruments.app, выберите приложение или процесс и нажмите Пуск. У вас есть расширенные опции фильтра, доступные в меню.

Более старые версии Xcode хранят приложение по адресу /Developer/Applications/Instruments.app

Aeyoun
источник
7
Начиная с Xcode 5, теперь он находится в /Applications/Xcode.app/Contents/Applications/Instruments.app - и к нему также можно получить доступ из приложения XCode - Xcode-> Open Developer Tool-> Instruments.
Mixologic
Это не работает, если доступ к файлу не происходит из-за вашего приложения
liquidblueocean
На самом деле это не работает для OS X: «Операции ввода-вывода не поддерживают платформу MacOS». Также читайте: stackoverflow.com/questions/35621938/…
Можете ли вы предоставить более подробную информацию об этом? Какой инструмент - Activity Monitor? Я вижу длинный вывод для всех процессов здесь, не знаю, как отфильтровать его на дисковый ввод-вывод для одного процесса
Эллиот
43

Есть команда opensnoop. Запуск без аргументов, он может перегружать вас выводом, но его можно запускать с аргументами, -n nameчтобы ограничить вывод именованными процессами name.

Харальд Ханче-Олсен
источник
1
Точно так же sudo opensnoop | grep .classpathдает вам доступ к файлу classpath, например.
Давид Натингга
1
Обратите внимание, что opensnoop и Instruments являются интерфейсом одного и того же двигателя DTrace. Другие интерфейсы: dtrace.org/blogs/brendan/2011/10/10/…
MarcH
13

Launchd - это основной инструмент системного уровня для мониторинга файлов (а папка - это специальный файл), поскольку он всегда работает. Hazel - это одна из программ, которая помогает создать симпатичный графический интерфейс для запуска WatchPaths. Здесь вы найдете множество советов по запуску, а также сотни учебных пособий, хорошую статью в Википедии и документы для разработчиков Apple.

fseventsd запишет некоторые изменения - так что вы можете использовать FSeventer или получить доступ к этим файлам, если launchd не ваша чашка чая.

fs_usage и lsof - это инструмент командной строки, учитывающий процессы, для подключения к подсистеме ввода-вывода во время работы. Буфер fs_usage может быть перегружен, поэтому, если вы хотите что-то более гарантированное и меньше «быстрого взгляда», он менее надежен для получения полных правильных результатов, как и другие команды.

bmike
источник
Я использовал FSEventer довольно много раз, чтобы выяснить, к чему обращается приложение. Это замечательно при поиске файлов лицензий для создания образов системы для лабораторного развертывания.
Digitalchild
fseventer отлично подходит для того, чтобы иметь большую картину в реальном времени, вы действительно видите, что происходит !.
Лин
1
Поскольку FSeventer мертв, можно также попробовать FSMonitor.
GDP2
10

Никто не упомянул Activity Monitor, найденный в /Applications/Utilitiesпапке.

Нажмите на имя процесса в списке, затем нажмите кнопку «Проверить» на панели инструментов.

Есть три вкладки в появившемся окне: Memory, Statistics, Open Files and Ports. На Open Files and Portsвкладке будут показаны все открытые файлы, используемые процессом.

ghoppe
источник
1
Это не работает, если к файлу обращается неизвестное приложение
liquidblueocean
3

lsof

команда Terminal.app может сделать это для вас? использовать, man lsofчтобы догнать его использование. ура

kOoLiNuS
источник
3

Более быстрый способ:

$ lsof [path_to_file]

Это решение не требует пароля root и дает вам следующий ясный результат:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg
bontoJR
источник
1

Также доступны iosnoopи в iotopзависимости от ваших конкретных потребностей. Эти команды терминала могут быть переданы grepдля отслеживания событий файловой системы от определенного процесса или против определенного файла.

beporter
источник
0

Есть графический интерфейс для lsofввода информации. Это пожертвование от HAMSoft, и оно называется « Что меня держит» . Предназначен для ответа на вопрос "Почему я не могу удалить это из своего мусора?" вопрос, который часто возникает в OS X, это также удобный способ наблюдать за открытыми дескрипторами ввода-вывода в запущенных процессах, если вам просто интересно узнать, что происходит. Это позволяет вам простой поиск и фильтрацию.

Ян С.
источник