私の好きなツールの1つはlsofです - 実際のスイス軍ナイフです!特定のファイルがWindowsで開いているかどうかを確認するにはどうすればよいですか?
今日私はWinXPシステム上のどのプログラムが特定のファイルを開いているのか疑問に思っていました。 lsofに相当するユーティリティはありますか?さらに、問題のファイルはネットワーク共有を介していたので、問題が複雑かどうかはわかりません。
私の好きなツールの1つはlsofです - 実際のスイス軍ナイフです!特定のファイルがWindowsで開いているかどうかを確認するにはどうすればよいですか?
今日私はWinXPシステム上のどのプログラムが特定のファイルを開いているのか疑問に思っていました。 lsofに相当するユーティリティはありますか?さらに、問題のファイルはネットワーク共有を介していたので、問題が複雑かどうかはわかりません。
Sysinternals SuiteのProcess Explorerを使用すると、Find HandleまたはDLL関数を使用して、そのファイルが開いているプロセスを検索できます。
「コンピュータ」(または「マイコンピュータ」)アイコンを右クリックし、ポップアップメニューから「管理」を選択すると、コンピュータ管理コンソールに移動します。
「システムツール\共有フォルダ」に「ファイルを開く」と表示されます。これはおそらくあなたが望むものに近いでしょうが、ファイルがネットワーク共有上にある場合は、ファイルが存在するサーバーで同じことをする必要があります。
これは、他のネットワークユーザーが開いている共有ファイルのみを表示することに注意してください。ローカルシステム上で開いているファイルを見つけるのには役立ちません。これをサーバー上で実行すると、ファイルを開いているユーザーは誰かわかりますが、そのユーザーのコンピュータ上のプログラムは表示されません。プロセスエクスプローラ(@JayHofackerの言葉通り)は私にとってうまくいった。 – tomlogic
lsof -p pid
の同等は、Sysinternalsの合成出力が処理され、listdlls、すなわち
handle -p pid
listdlls -p pid
あなたがSysinternalsのpslist
とPIDを見つけることができます。
ファイルは.dllは、あなたがその開いたそれを得た見にタスクリストコマンドラインアプリケーションを使用することができている場合:
TaskList /M nameof.dll
プロセスIDを見つけるため
OpenedFilesViewには、[オプション]メニューの[ネットワークファイルを表示]という名前のメニュー項目があります。おそらくそれが有効になっていると、前述のユーティリティはいくつか使用されています。
lsofはの1当量すなわちSysinternalsのハンドルとlistdllsから出力組み合わせることができます。
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
は残念ながら、あなたがそれらを使用できるようにするには、 『管理者として実行』する必要があります。また
listdllsとハンドルはそうPIDを隠しますファイル名をフィルタリング連続テーブル状を生成しません。
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が開いて、このファイルを有するものである見ることができますがfindstr /c:pid: /c:<filename>
は、両方のユーティリティとあなたは非常に近い取得する必要があります。
「OpenFiles」というプログラムがあり、Windows 7の一部と思われます。あなたが望むことができると思われます。リモートユーザーがファイル共有を介して開いたファイルを一覧表示し、 "openfiles/Local on"を呼び出してシステムを再起動すると、ローカルで開いたファイルを表示できるようになります。後者はパフォーマンス上の罰則があると言われています。
私はここに来て、誰がフォルダを削除して再起動しないようにしているのかを知る方法を探していました。 ....再起動が必要です。どのように非常に非常に窓。 – Gus
これは本当に質問に答えますか? Process Explorerを使用すると、特定のプロセス/ハンドル/ dll /その他のファイルが開いているファイルを確認できますが、これは逆のマッピングです。この質問に私の答えhttp://stackoverflow.com/questions/15708/lsof-equivalent-for-windows#188337を参照してください。 –
はい、あります。 Find HandleまたはDll(またはCtrl + Fキーを押す)をクリックし、探しているファイルの名前を入力すると、そのファイルが開いているプロセスのリストが表示されます。 –
Process Explorerの名前が変更され、Process Monitorにバンドルされました。 –