Il comando lsof spiegato agli utenti Mac

Impara a usare il comando lsof per scoprire quali processi tengono aperti dei file sul tuo Mac. Una guida per sviluppatori e utenti esperti.

(Updated )

Il tuo disco esterno non si espelle. macOS ti restituisce quel messaggio esasperante e vago secondo cui «uno o più programmi potrebbero utilizzarlo». Quali programmi? Non te lo dice. È qui che entra in gioco lsof.

Il nome sta per «list open files» (elenca i file aperti), ed è esattamente ciò che fa. Sui sistemi basati su Unix come macOS, quasi tutto è trattato come un file: comprese le connessioni di rete, i dispositivi e i volumi dei dischi. Quando non riesci a espellere un disco, lsof ti dice con precisione quale processo lo tiene in ostaggio.

Sintassi di base

Il modo più semplice di usare lsof per i problemi di espulsione è:

lsof /Volumes/YourDriveName

Sostituisci «YourDriveName» con il nome reale del tuo disco. Se il nome contiene degli spazi, racchiudi l’intero percorso tra virgolette:

lsof "/Volumes/My Backup Drive"

Questo restituisce un elenco di tutti i processi che hanno un handle di file aperto su quel volume. Ogni riga mostra il nome del processo, il suo identificativo (PID), l’utente che lo esegue e le informazioni sul file specifico a cui si sta accedendo.

Leggere l’output

Un tipico output di lsof si presenta più o meno così:

COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...
Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External

Le colonne che contano di più sono COMMAND (il nome del processo), PID (l’identificativo del processo che useresti per terminarlo) e NAME (il percorso effettivo del file a cui si accede).

FD descrive come è stato aperto il file: r per lettura, w per scrittura, u per entrambe. Non indica l’attività attuale né dimostra l’assenza di scritture in sospeso sul volume.

Scoprire cosa sta bloccando il disco

Per i problemi di espulsione, in genere ti basta sapere quali nomi di processo compaiono. Tra i colpevoli più comuni ci sono mds e mds_stores (l’indicizzazione di Spotlight), Finder, QuickLookUIService (la generazione delle anteprime) e fsevents (il monitoraggio del filesystem).

Se vedi molto output e vuoi restringerlo, puoi usare grep:

lsof /Volumes/YourDriveName | grep -v "^COMMAND"

Così rimuovi la riga di intestazione e vedi solo i processi effettivi. Se vuoi soltanto i nomi univoci dei processi:

lsof /Volumes/YourDriveName | awk '{print $1}' | sort -u

Opzioni utili

L’opzione -c filtra per nome del comando. Se sospetti che il problema sia Spotlight:

lsof -a -c mds /Volumes/YourDriveName

Questo mostra solo i processi il cui nome inizia con «mds».

L’opzione +D elenca in modo ricorsivo tutti i file aperti in una directory:

lsof +D /Volumes/YourDriveName

È più completa della sintassi di base, ma può essere lenta su dischi grandi con molti file.

Per vedere quali processi un determinato utente ha aperti sul disco:

lsof -a -u yourusername /Volumes/YourDriveName

Usare lsof senza sudo

Per impostazione predefinita, lsof mostra solo i processi appartenenti al tuo account utente. I processi di sistema eseguiti da root (come mds di Spotlight) non compaiono, a meno che tu non esegua lsof con sudo:

sudo lsof /Volumes/YourDriveName

Dovrai inserire la tua password. Per risolvere i problemi di espulsione, usare sudo è quasi sempre necessario, dato che i processi di sistema sono spesso i responsabili del blocco.

Terminare il processo che blocca

Salva il lavoro, completa copie e backup e chiudi normalmente le app prima di riprovare. Forzare l’uscita o l’espulsione può causare perdita di dati; Ejecta non certifica la sicurezza delle scritture.

kill 1234

Sostituisci 1234 con il PID effettivo. Se non funziona, puoi forzarlo:

kill -9 1234

I nomi dei processi Spotlight non dimostrano un accesso in sola lettura. Non forzare l’uscita di mds o mds_stores per liberare un disco. Attendi, chiudi le app e riprova con l’espulsione normale. Ejecta identifica questi processi, ma non offre la normale chiusura dei processi di sistema. Se il disco resta bloccato, salva tutto e spegni completamente il Mac prima di scollegarlo.

Per le applicazioni che ti appartengono (come una finestra del Terminale con una shell ferma nella directory del disco), è più pulito chiudere normalmente l’applicazione o spostarsi fuori dal disco prima di provare a espellerlo.

Scenari comuni

Terminale con la directory corrente sul disco: se hai fatto cd in una cartella del disco esterno, quel processo della shell terrà aperto il disco. Spostati altrove (cd ~) oppure chiudi quella finestra del Terminale.

Finestre del Finder: se il Finder ha una finestra aperta sul disco, o anche solo il disco selezionato nella barra laterale, può impedire l’espulsione. Chiudi tutte le finestre del Finder che mostrano il contenuto del disco.

I nomi dei processi Spotlight non dimostrano un accesso in sola lettura. Non forzare l’uscita di mds o mds_stores per liberare un disco. Attendi, chiudi le app e riprova con l’espulsione normale. Ejecta identifica questi processi, ma non offre la normale chiusura dei processi di sistema. Se il disco resta bloccato, salva tutto e spegni completamente il Mac prima di scollegarlo.

App in background con file aperti: alcune applicazioni continuano a fare riferimento ai file recenti anche dopo che hai chiuso i documenti. Le app creative come Photoshop o gli editor video sono colpevoli frequenti. Chiudere completamente l’app di solito rilascia i file.

Oltre la riga di comando

Se non ti senti a tuo agio con il Terminale o non vuoi decifrare l’output di lsof ogni volta che devi staccare un disco, esistono opzioni grafiche.

Monitoraggio Attività può mostrarti i file aperti di un processo specifico, ma devi già sapere quale processo ispezionare. Non risponde facilmente alla domanda «cosa sta usando questo disco?».

Ejecta: Ejecta offre la diagnosi gratuita dei dischi senza una prova a tempo. La licenza a pagamento sblocca uscita ed espulsione per le app supportate, Espelli tutto e i controlli Time Machine. I processi di sistema possono richiedere attesa, autorizzazione o spegnimento. Salva il lavoro e completa prima i trasferimenti.

La riga di comando è potente per chi la preferisce, ma non dovrebbe essere obbligatoria per qualcosa di semplice come staccare un disco.

Ejecta offre la diagnosi gratuita dei dischi senza una prova a tempo. La licenza a pagamento sblocca uscita ed espulsione per le app supportate, Espelli tutto e i controlli Time Machine. I processi di sistema possono richiedere attesa, autorizzazione o spegnimento. Salva il lavoro e completa prima i trasferimenti.

Acquista ora - $29 $9.99