¿Cómo monitorear el acceso a archivos para una aplicación OS X?


61

Estoy buscando el corresponsal de FileMon para OS X, que luego se incluyó en ProcessMon .

Por cierto, es esencial poder filtrar por proceso.


Agregaré tres opciones, dado que la herencia de Unix de Mac OS X es diferente a la arquitectura NT, las herramientas no se superponen perfectamente. ¿Está buscando una API para programar o simplemente herramientas para echar un vistazo a lo que está sucediendo actualmente (o activar acciones después de ciertos cambios de archivo)
Bmike

Respuestas:


62

Instruments, una parte del conjunto de desarrollo Apple Xcode, puede monitorear todo el acceso a archivos y escrituras. Ábralo desde /Applications/Xcode.app/Contents/Applications/Instruments.app, seleccione su aplicación o proceso y presione Iniciar. Tiene amplias opciones de filtro disponibles en los menús.

Las versiones anteriores de Xcode almacenan la aplicación en /Developer/Applications/Instruments.app


77
A partir de Xcode 5, ahora se encuentra en /Applications/Xcode.app/Contents/Applications/Instruments.app, y también se puede acceder desde la aplicación XCode - Xcode-> Open Developer Tool-> Instruments.
Mixologic

Esto no funciona si el archivo que se accede no está sucediendo debido a su aplicación
liquidblueocean

En realidad, no funciona para OS X: "La actividad de E / S no es compatible con la plataforma macOS". Lea también: stackoverflow.com/questions/35621938/…

¿Puedes proporcionar más detalles sobre esto? ¿Qué instrumento - Monitor de actividad? Estoy viendo una salida larga para todos los procesos aquí, no estoy seguro de cómo filtrarlo a la E / S de disco para un proceso
Elliott

43

Ahí está el comando opensnoop. Ejecutar sin argumentos, puede abrumarlo con la salida, pero puede ejecutarse con argumentos -n namepara limitar la salida a los procesos nombrados name.


1
Del mismo modo, sudo opensnoop | grep .classpathle da acceso a un archivo classpath, por ejemplo.
Dávid Natingga

1
Tenga en cuenta que opensnoop y los instrumentos son los dos extremos del mismo motor DTrace. Otros front- end
MarcH

13

Launchd es la herramienta principal de nivel de sistema para monitorear archivos (y una carpeta es un archivo especial) ya que siempre se está ejecutando. Hazel es un programa que ayuda a poner una interfaz gráfica de usuario bonita alrededor de las WatchPaths lanzadas. Busque aquí muchos consejos sobre launchd, así como cientos de tutoriales, un buen artículo de Wikipedia y los documentos de desarrollo de Apple.

fseventsd registrará algunos cambios, por lo que puede usar FSeventer o acceder a esos archivos si launchd no es su taza de té.

fs_usage y lsof son herramientas de línea de comandos conscientes del proceso para aprovechar el subsistema IO mientras se ejecuta. El búfer fs_usage puede sobrecargarse, por lo que si desea algo más garantizado y menos "echar un vistazo rápido", es menos confiable para obtener resultados correctos como los otros comandos.


He usado FSEventer varias veces para averiguar a qué está accediendo una aplicación. Esto es excelente cuando se buscan archivos de licencia para imágenes del sistema para la implementación de laboratorio.
Digitalchild

fseventer es excelente para tener una visión general en tiempo real, ¡realmente ves lo que está pasando!
ling

1
Como FSeventer está muerto, también se puede probar FSMonitor.
GDP2

10

Nadie ha mencionado el Monitor de actividad, que se encuentra en la /Applications/Utilitiescarpeta.

Haga clic en el Nombre del proceso en la lista, luego presione el botón "Inspeccionar" en la barra de herramientas.

Hay tres pestañas en la ventana resultante: Memory, Statistics, Open Files and Ports. La Open Files and Portspestaña mostrará todos los archivos abiertos utilizados por el proceso.


1
Esto no funciona si una aplicación desconocida está accediendo al archivo
liquidblueocean

3

lsof

comando en el Terminal.app puede hacer eso por ti? use el man lsofpara ponerse al día con su uso. Salud


3

La forma más rápida es:

$ lsof [path_to_file]

Esta solución no requiere la contraseña de root y le devuelve el siguiente 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

1

También están disponibles iosnoopy iotopdependiendo de sus necesidades específicas. Estos comandos de terminal se pueden canalizar greppara ver los eventos del sistema de archivos desde un proceso específico o contra un archivo específico.


0

Hay una interfaz gráfica para lsofescribir información. Es donationware de HAMSoft y se llama What's Keeping Me . Diseñado para responder que "¿Por qué no puedo eliminar esto de mi papelera?" pregunta que surge de vez en cuando en OS X, también resulta ser una forma práctica de observar los identificadores abiertos de E / S en los procesos en ejecución si solo tiene curiosidad sobre lo que está sucediendo. Le permite una búsqueda simple y filtrado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.