Comment surveiller l'accès aux fichiers pour une application OS X?

61

Je recherche le correspondant OSM de FileMon, qui a ensuite été inclus dans ProcessMon .

BTW, il est essentiel de pouvoir filtrer par processus.

sorin
la source
J'ajouterai trois options - car l'héritage unix de Mac OS X est différent de celui de l'architecture NT - les outils ne se chevauchent pas parfaitement. Êtes-vous à la recherche d'une API pour programmer ou simplement d'un outil pour jeter un coup d'œil à ce qui se passe actuellement (ou pour déclencher des actions après certains changements de fichiers)
bmike

Réponses:

62

Instruments, composant de la suite de développement Apple Xcode, peut surveiller tous les accès aux fichiers et les écritures. Ouvrez-le à partir de /Applications/Xcode.app/Contents/Applications/Instruments.app, sélectionnez votre application ou votre processus et appuyez sur Démarrer. Vous disposez de nombreuses options de filtrage dans les menus.

Les anciennes versions de Xcode stockent l’application dans /Developer/Applications/Instruments.app

Aeyoun
la source
7
Depuis Xcode 5, il se trouve maintenant dans /Applications/Xcode.app/Contents/Applications/Instruments.app - et est également accessible depuis l’application XCode - Xcode-> Ouvrir l’outil de développement -> Instruments.
Mixologic
Cela ne fonctionne pas si le fichier en cours d'accès ne se produit pas à cause de votre application
liquidblueocean
En réalité, cela ne fonctionne pas sous OS X: "L'activité d'E / S ne prend pas en charge la plate-forme macOS". Lisez aussi: stackoverflow.com/questions/35621938/…
Pouvez-vous fournir plus de détails à ce sujet? Quel instrument - Moniteur d'activité? Je vois un long résultat pour tous les processus ici, je ne sais pas comment le filtrer sur un disque pour un processus
Elliott
43

Il y a la commande opensnoop. Exécutée sans arguments, elle risque de vous submerger en sortie, mais elle peut être exécutée avec des arguments -n namepour limiter la sortie aux processus nommés name.

Harald Hanche-Olsen
la source
1
De même, sudo opensnoop | grep .classpathvous donne accès à un fichier classpath par exemple.
Dávid Natingga
1
Remarque opensnoop et Instruments sont tous les deux frontaux du même moteur DTrace. Autres interfaces
MarcH
13

Launchd est l'outil principal au niveau du système pour surveiller les fichiers (et un dossier est un fichier spécial) car il est toujours en cours d'exécution. Hazel est un programme qui permet de créer une jolie interface graphique autour de Watchd Paths. Regardez ici pour de nombreux conseils sur launchd ainsi que des centaines de tutoriels, un bon article sur wikipedia et les documents de développement Apple.

fseventsd enregistrera certaines modifications - vous pouvez donc utiliser FSeventer ou accéder à ces fichiers si launchd n’est pas votre tasse de thé.

fs_usage et lsof sont des outils de ligne de commande sensibles au processus permettant d'exploiter le sous-système IO en cours d'exécution. La mémoire tampon fs_usage peut être surchargée. Par conséquent, si vous voulez quelque chose de plus garanti et de moins de "coup d'œil", il est moins fiable pour obtenir des résultats corrects comme les autres commandes.

bmike
la source
J'ai utilisé FSEventer plusieurs fois pour savoir à quoi une application accède. C'est très utile lorsque vous recherchez des fichiers de licence pour la création d'image du système pour le déploiement en laboratoire.
Digitalchild
fseventer est excellent pour avoir une vue d’ensemble en temps réel, vous voyez vraiment ce qui se passe!.
ling
1
Puisque FSeventer est mort, on pourrait aussi essayer FSMonitor.
GDP2
10

Personne n'a mentionné Activity Monitor, trouvé dans le /Applications/Utilitiesdossier.

Cliquez sur le nom du processus dans la liste, puis cliquez sur le bouton "Inspecter" de la barre d'outils.

Il y a trois onglets dans la fenêtre qui : Memory, Statistics, Open Files and Ports. L' Open Files and Portsonglet affichera tous les fichiers ouverts utilisés par le processus.

ghoppe
la source
1
Cela ne fonctionne pas si le fichier est en train d'être
utilisé
3

lsof

commande sur le Terminal.app peut le faire pour vous? utilisez le man lsofpour rattraper son utilisation. À votre santé

kooLiNuS
la source
3

Le moyen le plus rapide est:

$ lsof [path_to_file]

Cette solution ne nécessite pas de mot de passe root et vous renvoie le résultat suivant clair:

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
la source
1

Aussi disponibles sont iosnoopet en iotopfonction de vos besoins spécifiques. Ces commandes de terminal peuvent être acheminées greppour surveiller les événements du système de fichiers d'un processus spécifique ou par rapport à un fichier spécifique.

beporter
la source
0

Il existe une interface graphique pour lsofsaisir des informations. C'est un donware de HAMSoft intitulé " Ce qui me garde " . Conçu pour répondre à cette question "Pourquoi ne puis-je pas supprimer cela de ma corbeille?" Une question qui revient souvent sur OS X, c’est aussi un moyen pratique de surveiller les poignées d’entrées / sorties ouvertes sur les processus en cours si vous êtes simplement curieux de savoir ce qui se passe. Il vous permet une recherche et un filtrage simples.

Ian C.
la source