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.


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


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.


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.


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.


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é


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

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.