La commande lsof expliquée aux utilisateurs de Mac

Maîtrisez la commande lsof pour découvrir quels processus ont des fichiers ouverts sur votre Mac. Un guide pour les développeurs et les utilisateurs avancés.

(Updated )

Votre disque externe refuse de s’éjecter. macOS vous sert le message exaspérant de flou selon lequel « un ou plusieurs programmes l’utilisent peut-être ». Quels programmes ? Il ne le dit pas. C’est là qu’intervient lsof.

Le nom signifie « list open files » (lister les fichiers ouverts), et c’est exactement ce qu’il fait. Sur les systèmes basés sur Unix comme macOS, presque tout est traité comme un fichier, y compris les connexions réseau, les périphériques et les volumes de disque. Lorsque vous ne pouvez pas éjecter un disque, lsof vous dit précisément quel processus le retient en otage.

Syntaxe de base

La manière la plus simple d’utiliser lsof pour les problèmes d’éjection est :

lsof /Volumes/YourDriveName

Remplacez « YourDriveName » par le nom réel de votre disque. Si le nom contient des espaces, mettez tout le chemin entre guillemets :

lsof "/Volumes/My Backup Drive"

Cela renvoie une liste de tous les processus ayant un descripteur de fichier ouvert sur ce volume. Chaque ligne affiche le nom du processus, son identifiant (PID), l’utilisateur qui l’exécute et des informations sur le fichier précis auquel on accède.

Lire la sortie

Une sortie typique de lsof ressemble à ceci :

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

Les colonnes les plus importantes sont COMMAND (le nom du processus), PID (l’identifiant du processus que vous utiliseriez pour le tuer) et NAME (le chemin réel du fichier auquel on accède).

FD indique le mode d’ouverture du fichier : r pour lecture, w pour écriture, u pour les deux. Cela ne décrit pas l’activité en cours et ne prouve pas l’absence d’écritures en attente sur le volume.

Découvrir ce qui bloque votre disque

Pour les problèmes d’éjection en particulier, il vous suffit généralement de savoir quels noms de processus apparaissent. Les coupables fréquents incluent mds et mds_stores (indexation Spotlight), Finder, QuickLookUIService (génération de vignettes) et fsevents (observateur du système de fichiers).

Si vous voyez beaucoup de lignes et que vous voulez réduire l’affichage, vous pouvez utiliser grep :

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

Cela supprime la ligne d’en-tête pour que vous ne voyiez que les vrais processus. Si vous voulez uniquement les noms de processus uniques :

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

Options utiles

L’option -c filtre par nom de commande. Si vous soupçonnez Spotlight d’être en cause :

lsof -a -c mds /Volumes/YourDriveName

Cela n’affiche que les processus dont le nom commence par « mds ».

L’option +D liste récursivement tous les fichiers ouverts dans un répertoire :

lsof +D /Volumes/YourDriveName

C’est plus exhaustif que la syntaxe de base, mais cela peut être lent sur de grands disques contenant beaucoup de fichiers.

Pour voir quels processus un utilisateur précis a ouverts sur le disque :

lsof -a -u yourusername /Volumes/YourDriveName

Utiliser lsof sans sudo

Par défaut, lsof n’affiche que les processus appartenant à votre compte utilisateur. Les processus système lancés par root (comme le mds de Spotlight) n’apparaîtront pas, sauf si vous exécutez lsof avec sudo :

sudo lsof /Volumes/YourDriveName

Vous devrez saisir votre mot de passe. Pour dépanner les problèmes d’éjection, utiliser sudo est presque toujours nécessaire, car les processus système sont fréquemment les bloqueurs.

Tuer le processus bloquant

Enregistrez votre travail, terminez les copies et sauvegardes, puis quittez les apps normalement avant de réessayer. Forcer à quitter ou à éjecter peut perdre des données ; Ejecta ne certifie pas la sécurité des écritures.

kill 1234

Remplacez 1234 par le PID réel. Si ça ne fonctionne pas, vous pouvez forcer :

kill -9 1234

Les noms des processus Spotlight ne prouvent pas un accès en lecture seule. Ne forcez pas mds ou mds_stores à quitter pour libérer un disque. Attendez, fermez vos apps et réessayez une éjection normale. Ejecta identifie ces processus, mais ne propose pas de fermeture ordinaire des processus système. Si le disque reste bloqué, enregistrez tout et éteignez complètement le Mac avant de le débrancher.

Pour les applications que vous contrôlez (comme une fenêtre du Terminal dont le shell se trouve dans le répertoire du disque), il est plus propre de simplement quitter l’application normalement ou de sortir du disque avant d’essayer d’éjecter.

Scénarios courants

Terminal avec le répertoire courant sur le disque : si vous avez fait un cd vers un dossier de votre disque externe, ce processus de shell maintiendra le disque ouvert. Soit vous faites un cd ailleurs (cd ~), soit vous fermez cette fenêtre du Terminal.

Fenêtres du Finder : si le Finder a une fenêtre ouverte sur le disque, ou même s’il a le disque sélectionné dans la barre latérale, il peut empêcher l’éjection. Fermez toute fenêtre du Finder affichant le contenu du disque.

Les noms des processus Spotlight ne prouvent pas un accès en lecture seule. Ne forcez pas mds ou mds_stores à quitter pour libérer un disque. Attendez, fermez vos apps et réessayez une éjection normale. Ejecta identifie ces processus, mais ne propose pas de fermeture ordinaire des processus système. Si le disque reste bloqué, enregistrez tout et éteignez complètement le Mac avant de le débrancher.

Apps en arrière-plan avec des fichiers ouverts : certaines applications conservent des références aux fichiers récents même après que vous avez fermé les documents. Les applications créatives comme Photoshop ou les logiciels de montage vidéo sont des coupables fréquents. Quitter complètement l’app libère généralement les fichiers.

Au-delà de la ligne de commande

Si vous n’êtes pas à l’aise avec le Terminal ou que vous ne voulez pas décortiquer la sortie de lsof chaque fois que vous devez débrancher un disque, il existe des options graphiques.

Le Moniteur d’activité peut vous montrer les fichiers ouverts d’un processus précis, mais il faut déjà savoir quel processus inspecter. Il ne répond pas facilement à la question « qu’est-ce qui utilise ce disque ? ».

Ejecta: Ejecta propose un diagnostic gratuit des disques sans essai limité dans le temps. La licence payante débloque la fermeture et l’éjection pour les apps prises en charge, Tout éjecter et les commandes Time Machine. Les processus système peuvent nécessiter une attente, une autorisation ou l’arrêt du Mac. Enregistrez et terminez les transferts d’abord.

La ligne de commande est puissante pour ceux qui la préfèrent, mais elle ne devrait pas être obligatoire pour quelque chose d’aussi simple que débrancher un disque.

Ejecta propose un diagnostic gratuit des disques sans essai limité dans le temps. La licence payante débloque la fermeture et l’éjection pour les apps prises en charge, Tout éjecter et les commandes Time Machine. Les processus système peuvent nécessiter une attente, une autorisation ou l’arrêt du Mac. Enregistrez et terminez les transferts d’abord.

Acheter - $29 $9.99