tagger tag windows linux command-line filesystems

windows - tagger - tag folders



¿Cómo puedo determinar si un archivo específico está abierto en Windows? (10)

Una de mis herramientas favoritas para Linux es lsof , ¡una verdadera navaja suiza!

Hoy me encontré preguntándome qué programas en un sistema WinXP tenían un archivo específico abierto. ¿Hay alguna utilidad equivalente a lsof? Además, el archivo en cuestión tenía más de un recurso compartido de red, así que no estoy seguro si eso complica las cosas.


En OpenedFilesView , en el menú Opciones, hay un elemento de menú llamado "Mostrar archivos de red". Tal vez con eso habilitado, la utilidad antes mencionada es de alguna utilidad.


Hay un programa "OpenFiles", parece ser parte de Windows 7. Parece que puede hacer lo que quieras. Puede enumerar los archivos abiertos por usuarios remotos (mediante el uso compartido de archivos) y, después de llamar a "archivos abiertos / Local activado" y a un reinicio del sistema, debe poder mostrar los archivos abiertos localmente. Se dice que este último tiene sanciones de rendimiento.


Prueba Handle . Filemon & Regmon también son geniales para tratar de descubrir qué hace el programa duce foo a su sistema.


Prueba Unlocker .

El sitio Unlocker tiene un gráfico ingenioso (desplácese hacia abajo después de seguir el enlace) que muestra una comparación con otras herramientas. Obviamente, tales comparaciones suelen ser parciales, ya que normalmente las escribe el autor de la herramienta, pero la tabla al menos enumera las alternativas para que pueda probarlas usted mismo.


Si el archivo es .dll, entonces puede usar la aplicación de línea de comandos TaskList para ver quién lo abrió.

TaskList /M nameof.dll


Si hace clic con el botón derecho en el ícono "Ordenador" (o "Mi PC") y selecciona "Administrar" en el menú emergente, eso lo llevará a la consola de Administración de equipos.

Allí, en Herramientas del sistema / Carpetas compartidas, encontrará "Archivos abiertos". Probablemente esté cerca de lo que desea, pero si el archivo está en una red compartida, entonces tendría que hacer lo mismo en el servidor en el que vive el archivo.


Un equivalente de lsof podría ser resultado combinado de Sysinternals '' handle y listdlls , es decir:

c:/SysInternals>handle [...] ------------------------------------------------------------------------------ gvim.exe pid: 5380 FOO/alois.mahdal 10: File (RW-) C:/Windows 1C: File (RW-) D:/some/locked/path/OpenFile.txt [...] c:/SysInternals>listdlls [...] ------------------------------------------------------------------------------ Listdlls.exe pid: 6840 Command line: listdlls Base Size Version Path 0x00400000 0x29000 2.25.0000.0000 D:/opt/SysinternalsSuite/Listdlls.exe 0x76ed0000 0x180000 6.01.7601.17725 C:/Windows/SysWOW64/ntdll.dll [...] c:/SysInternals>listdlls

Lamentablemente, debe "ejecutar como administrador" para poder usarlos.

Además, listdlls y handle no producen una forma continua de tabla, por lo que al filtrar el nombre de archivo se ocultaría el PID. findstr /c:pid: /c:<filename> debería findstr /c:pid: /c:<filename> mucho con ambas utilidades, aunque

c:/SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm System pid: 4 /<unable to open process> smss.exe pid: 308 NT AUTHORITY/SYSTEM avgrsa.exe pid: 384 NT AUTHORITY/SYSTEM [...] cmd.exe pid: 7140 FOO/alois.mahdal conhost.exe pid: 1212 FOO/alois.mahdal gvim.exe pid: 3408 FOO/alois.mahdal 188: File (RW-) D:/some/locked/path/OpenFile.txt taskmgr.exe pid: 6016 FOO/alois.mahdal [...]

Aquí podemos ver que gvim.exe es el que tiene este archivo abierto.


Use Process Explorer desde la Suite Sysinternals, la función Find Handle o DLL le permitirá buscar el proceso con ese archivo abierto.


Use Process Explorer para encontrar la identificación del proceso. A continuación, use el control para averiguar qué archivos están abiertos.

Por ejemplo, manejar -p

Me gusta este enfoque porque está utilizando utilidades de Microsoft.


El equivalente de lsof -p pid es la salida combinada de sysinternals handle y listdlls, es decir,

handle -p pid listdlls -p pid

puedes encontrar pid con sysinternals pslist .