Как я могу определить, открыт ли конкретный файл в Windows?
Один из моих любимых инструментов для Linux - lsof - настоящий швейцарский армейский нож!
Сегодня мне стало интересно, в каких программах в системе WinXP открыт тот или иной файл. Есть ли утилита, эквивалентная lsof? Кроме того, рассматриваемый файл находился в общей сетевой папке, поэтому я не уверен, что это усложняет ситуацию.
Ответов (10)10
Используйте Process Explorer из Sysinternals Suite, функция Find Handle или DLL позволит вам искать процесс с открытым этим файлом.
В OpenedFilesView в меню «Параметры» есть пункт «Показать сетевые файлы». Возможно, с этим включенным вышеупомянутая утилита пригодится.
Один эквивалент lsof может быть объединен с выводом дескриптора Sysinternals и listdll , то есть:
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
К сожалению, чтобы использовать их, вы должны «работать от имени администратора».
Также listdll и дескриптор не создают непрерывную табличную форму, поэтому фильтрация имени файла скроет PID. findstr /c:pid: /c:<filename>
должен максимально приблизить вас к обеим утилитам, хотя
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
[...]
Здесь мы видим, что файл gvim.exe открыт.
Есть программа "OpenFiles", вроде как часть windows 7. Кажется, что она может делать то, что вы хотите. Он может отображать файлы, открытые удаленными пользователями (через общий доступ к файлам), и после вызова «openfiles / Local on» и перезапуска системы он должен иметь возможность отображать файлы, открытые локально. Последний, как говорят, имеет штраф за производительность.
Если вы щелкните правой кнопкой мыши значок «Компьютер» (или «Мой компьютер») и выберите «Управление» во всплывающем меню, вы попадете в консоль управления компьютером.
Там, в System Tools \ Shared Folders, вы найдете «Открытые файлы». Вероятно, это близко к тому, что вы хотите, но если файл находится в общей сетевой папке, вам нужно будет сделать то же самое на сервере, на котором находится файл.
Попробуйте Unlocker .
На сайте Unlocker есть отличная диаграмма (прокрутите вниз после перехода по ссылке), которая показывает сравнение с другими инструментами. Очевидно, что такие сравнения обычно необъективны, поскольку они обычно написаны автором инструмента, но в таблице по крайней мере перечислены альтернативы, чтобы вы могли попробовать их самостоятельно.
Используйте Process Explorer, чтобы найти идентификатор процесса. Затем используйте Handle, чтобы узнать, какие файлы открыты.
Например, ручка -p
Мне нравится этот подход, потому что вы используете утилиты от самой Microsoft.