Como monitorar o acesso a arquivos para um aplicativo OS X?

61

Estou procurando o representante do OS X do FileMon, que mais tarde foi incluído no ProcessMon .

BTW, é essencial poder filtrar por processo.

sorin
fonte
Vou adicionar três opções - como a herança unix do Mac OS X é diferente da arquitetura do NT - as ferramentas não se sobrepõem perfeitamente. Você está procurando uma API para programar ou ferramentas apenas para espreitar o que está acontecendo atualmente (ou desencadear acções depois de algumas mudanças de arquivo)
bmike

Respostas:

62

Os instrumentos - parte do pacote de desenvolvimento Apple Xcode - podem monitorar todo o acesso e gravação de arquivos. Abra-o em /Applications/Xcode.app/Contents/Applications/Instruments.app, selecione seu aplicativo ou processo e pressione Iniciar. Você tem diversas opções de filtro disponíveis nos menus.

Versões anteriores do Xcode estão armazenando o aplicativo em /Developer/Applications/Instruments.app

Aeyoun
fonte
7
A partir do Xcode 5, ele agora está localizado em /Applications/Xcode.app/Contents/Applications/Instruments.app - e também pode ser acessado no aplicativo XCode - Xcode-> Open Developer Tool-> Instruments.
Mixologic
Isso não funciona se o arquivo que está sendo acessado não está acontecendo por causa da sua aplicação
liquidblueocean
Na verdade, ele não funciona no OS X: "A atividade de E / S não suporta a plataforma macOS". Leia também: stackoverflow.com/questions/35621938/…
Você pode fornecer mais detalhes sobre isso? Qual instrumento - Activity Monitor? Estou vendo uma saída longa para todos os processos aqui, não sei como filtrá-lo para a E / S de disco para um processo
Elliott
43

Existe o comando opensnoop. Executar sem argumentos, pode sobrecarregá-lo com a saída, mas pode ser executado com argumentos -n namepara limitar a saída aos processos nomeados name.

Harald Hanche-Olsen
fonte
11
Da mesma forma, sudo opensnoop | grep .classpathvocê acessa um arquivo de caminho de classe, por exemplo.
Dávid Natingga 8/08/13
11
Nota: opensnoop e Instruments são front-ends para o mesmo mecanismo do DTrace. Outros front-ends: dtrace.org/blogs/brendan/2011/10/10/…
MarcH 27/11
13

O Launchd é a principal ferramenta no nível do sistema para monitorar arquivos (e uma pasta é um arquivo especial), pois está sempre em execução. Hazel é um programa que ajuda a colocar uma interface gráfica bonita em torno dos WatchPaths iniciados. Procure aqui várias dicas sobre o launchd, além de centenas de tutoriais, um bom artigo na Wikipedia e os documentos de desenvolvimento da Apple.

O fseventsd registrará algumas alterações - portanto, você pode usar o FSeventer ou acessar esses arquivos se o launchd não for sua xícara de chá.

fs_usage e lsof são uma ferramenta de linha de comando com reconhecimento de processo para acessar o subsistema IO enquanto ele está em execução. O buffer fs_usage pode ficar sobrecarregado, portanto, se você quiser algo mais garantido e menos "dar uma espiada", é menos confiável para o total de resultados corretos, como os outros comandos.

bmike
fonte
Eu usei o FSEventer algumas vezes para descobrir o que um aplicativo está acessando. Isso é ótimo ao procurar arquivos de licença para geração de imagens do sistema para implantação em laboratório.
Digitalchild
O fseventer é excelente para ter uma visão geral em tempo real, você realmente vê o que está acontecendo !.
ling
11
Como o FSeventer está morto, também é possível tentar o FSMonitor.
GDP2 6/0218
10

Ninguém mencionou o Monitor de Atividade, encontrado na /Applications/Utilitiespasta.

Clique no nome do processo na lista e clique no botão "Inspecionar" na barra de ferramentas.

Existem três abas na janela resultante: Memory, Statistics, Open Files and Ports. A Open Files and Portsguia mostrará todos os arquivos abertos que estão sendo usados ​​pelo processo.

ghoppe
fonte
11
Isso não funciona se o arquivo está sendo acessado por um aplicativo desconhecido
liquidblueocean
3

lsof

comando no Terminal.app pode fazer isso por você? use o man lsofpara acompanhar seu uso. Felicidades

kOoLiNuS
fonte
3

A maneira mais rápida é:

$ lsof [path_to_file]

Esta solução não requer a senha root e devolve o seguinte resultado claro:

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
fonte
1

Também estão disponíveis iosnoope, iotopdependendo de suas necessidades específicas. Esses comandos do terminal podem ser transmitidos greppara observar eventos do sistema de arquivos de um processo específico ou de um arquivo específico.

beporter
fonte
0

Há uma interface gráfica para lsofdigitar informações. É donationware da HAMSoft e é chamado What's Keeping Me . Projetado para responder a "Por que não consigo excluir isso do lixo?" pergunta que surge de vez em quando no OS X, também é uma maneira útil de observar identificadores abertos de E / S nos processos em execução, se você está curioso sobre o que está acontecendo. Permite algumas pesquisas e filtros simples.

Ian C.
fonte