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.
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 -Articoli correlati
diskutil eject: come espellere i dischi dal Terminale del Mac
Espelli qualsiasi disco del Mac dal Terminale con diskutil, inclusi lo smontaggio forzato di un volume che non …
Come espellere in sicurezza i dischi esterni su macOS Sequoia e Sonoma
Apple ha cambiato il funzionamento dell'espulsione dei dischi nelle versioni recenti di macOS. Ecco cosa è …
Come risolvere «Il disco non è stato espulso correttamente» su Mac
L'avviso «Il disco non è stato espulso correttamente» significa che un processo si è impossessato del disco …
APFS o exFAT: quale formato scegliere per il tuo disco esterno su Mac
Scegliere il file system giusto per il tuo disco esterno incide su tutto, dalle prestazioni alla sicurezza dei …