2008-08-19 22 views
75

Uno dei miei strumenti preferiti per linux è lsof - un vero coltellino svizzero!Come posso determinare se un file specifico è aperto in Windows?

Oggi mi sono ritrovato a chiedermi quali programmi su un sistema WinXP avessero un file specifico aperto. C'è qualche utilità equivalente a lsof? Inoltre, il file in questione era su una condivisione di rete, quindi non sono sicuro se ciò complica le cose.

risposta

61

Utilizzare Process Explorer dalla Suite Sysinternals, la funzione Trova maniglia o DLL consente di cercare il processo con quel file aperto.

+0

Questo risponde veramente alla domanda? Process Explorer ti permette di vedere quali file sono aperti per un particolare processo/handle/dll/qualunque, ma questa è la mappatura inversa. Vedi la mia risposta http://stackoverflow.com/questions/15708/lsof-equivalent-for-windows#188337 a questa domanda. –

+5

Sì, sì. Fare clic su Trova maniglia o Dll (o premere Ctrl-F), digitare il nome del file che si sta cercando e si finisce con un elenco di processi con quel file aperto. –

+0

Process Explorer è stato rinominato e raggruppato in "Process Monitor". –

4

Se si fa clic con il pulsante destro del mouse sull'icona "Computer" (o "Risorse del computer") e si seleziona "Gestione" dal menu a comparsa, verrà visualizzata la console Gestione computer.

Da lì, in Strumenti di sistema \ Cartelle condivise, troverai "Apri file". Questo è probabilmente vicino a quello che vuoi, ma se il file si trova su una condivisione di rete, allora dovresti fare la stessa cosa sul server su cui il file vive.

+3

Si noti che questo mostra solo i file condivisi che sono aperti da altri utenti della rete. Non aiuta a trovare i file che sono aperti sul sistema locale. Fare questo sul server probabilmente ti dirà quale utente ha aperto il file, ma non quale programma sulla macchina di quell'utente. Process Explorer (come detto da @JayHofacker) ha funzionato bene per me. – tomlogic

8

Prova Handle. Filemon & Regmon sono anche ottimi per provare a capire cosa sta facendo il programma di duca foo al tuo sistema.

+0

Ho provato e mi è piaciuto Gestire. Grazie. – Batandwa

+0

@slipsec FileMon e Regmon sono ora sostituiti da [Process Monitor v3.2] (https://technet.microsoft.com/en-us/sysinternals/bb896645) nelle versioni di Windows che iniziano con Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 e Windows Vista. – Lucky

5

Prova Unlocker.

Il sito Unlocker ha un grafico elegante (scorrere verso il basso dopo aver seguito il collegamento) che mostra un confronto con altri strumenti. Ovviamente tali confronti sono di solito di parte poiché sono tipicamente scritti dall'autore dello strumento, ma il grafico elenca almeno le alternative in modo tale che tu possa provarle tu stesso.

+4

Unlocker elenca solo i file bloccati, non i file aperti. La maggior parte del software Windows blocca la DLL che usa ma non i tuoi documenti. – Tobias

36

L'equivalente del lsof -p pid è la produzione combinata di Sysinternals gestire e ListDLLs, cioè

handle -p pid 
listdlls -p pid 

si può scoprire pid con Sysinternals pslist.

5

Se il file è una DLL quindi è possibile utilizzare il TaskList linea di comando applicazione per vedere chi ha aperto:

TaskList /M nameof.dll 
2

Utilizzare Process Explorer per trovare l'ID del processo. Quindi utilizzare Handle per scoprire quali file sono aperti.

Eg gestire -p

Mi piace questo approccio, perché si sta utilizzando le utilità da Microsoft stessa.

+0

se solo avessimo il codice sorgente a quelli – Paladin

1

In OpenedFilesView, sotto il menu Opzioni, c'è una voce di menu denominata "Mostra file di rete". Forse con quello abilitato, l'utilità di cui sopra è di qualche utilità.

5

un equivalente di lsof potrebbe essere combinato in uscita da Sysinternals' maniglia e ListDLLs, vale a dire:

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 

Purtroppo, è necessario 'Esegui come amministratore' per essere in grado di usarli .

anche listdlls e maniglia non producono forma di tavolo continuo così filtraggio nome sarebbe nascondendo PID. findstr /c:pid: /c:<filename> dovrebbe farti molto stretto con entrambe le utilità, anche se

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 
[...] 

Qui possiamo vedere che gvim.exe è quella che ha il file aperto.

3

C'è un programma "OpenFiles", sembra essere parte di Windows 7. Sembra che possa fare quello che vuoi. Può elencare i file aperti dagli utenti remoti (tramite condivisione file) e, dopo aver chiamato "openfiles/Local on" e un riavvio del sistema, dovrebbe essere in grado di mostrare i file aperti localmente. Si dice che quest'ultimo abbia pene sulle prestazioni.

+0

Vengo qui cercando un modo per scoprire chi mi impedisce di eliminare una cartella ed evitare un riavvio, e trovo che il comando di cui ho bisogno richiede una configurazione di configurazione che ... hai indovinato .... richiede un riavvio. Quanto molto windows. – Gus

Problemi correlati