Comment trouver et supprimer/récupérer des fichiers ouvert mais supprimés avec lsof

Vous cherchez une solution pour trouver, supprimer et récupérer les fichiers supprimés de lsof qui sont encore ouverts sur votre système ? Cet article explique comment effectuer ces actions.

Téléchargement gratuit Téléchargement gratuit Plus de fonctionnalités > Plus de fonctionnalités >
100% sécurité pour le téléchargement gratuit

Quand l'espace disque est insuffisant, nous recherchons fréquemment dans le système de fichiers de notre ordinateur Linux certains fichiers dont nous n'avons plus besoin et nous les supprimons. La suppression de fichiers peut cependant s'avérer infructueuse si des processus actifs y font référence. Dans ce cas, nous pouvons arrêter chaque processus qui maintient une référence ouverte avant de supprimer les fichiers.

Toutefois, cela peut également poser problème. Certains programmes, par exemple, ne doivent pas être interrompus pendant les heures de travail. La solution consiste en un tutoriel complet couvrant toutes les étapes nécessaires pour vous aider à trouver, supprimer et récupérer les fichiers supprimés avec lsof.

Partie 1. Qu'est-ce que la commande lsof ?

commande lsof

Dans les systèmes Unix et Linux, la commande lsof signifie "Liste des fichiers ouverts". Ce programme est un outil puissant qui permet d'obtenir des informations sur les fichiers ouverts par les processus actifs d'un système. Avec la commande lsof, vous obtenez des informations sur les fichiers ouverts utilisés par les processus, tels que les sockets réseau, les fichiers ordinaires, les répertoires, les fichiers spéciaux par bloc et les fichiers de caractères spéciaux.

  • Voici la syntaxe de la commande lsof :

lsof [options]

Dans la commande lsof, les options déterminent les informations qui seront affichées et le format dans lequel elles seront présentées.

Elle dispose de nombreuses options, et le tableau ci-dessous répertorie les arguments les plus couramment utilisés.

Option
Description
lsof Listes de tous les fichiers ouverts
-b Masque les blocs de données du noyau
/ [système de fichiers] / Permet d'afficher les fichiers ouverts dans un système de fichiers spécifié
/dev/tty* Affiche les fichiers associés au terminal
-u [nom d'utilisateur] Permet d'imprimer les fichiers ouverts appartenant à un utilisateur particulier
-u ^[nom d'utilisateur] Imprime les fichiers ouverts appartenant à tous les utilisateurs à l'exception d'un utilisateur spécifique.
-c [processus] Liste de tous les fichiers utilisés par un processus particulier
-p [ID du processus] Permet d'afficher tous les fichiers ouverts liés à un identifiant de processus spécifique.
-p ^[ID du processus] Indique les fichiers ouverts utilisés par tous les autres ID de processus.
-R Liste des identifiants des processus parents
+D [chemin d'accès] Imprime tous les fichiers ouverts dans un répertoire
-i Montre tous les fichiers utilisés par les connexions réseau
-i [numéro de version IP] Permet de filtrer les fichiers en fonction de leur version IP
- i [udp ou tcp] Filtre les fichiers ouverts selon le type de connexion (TCP ou UDP)
-i :[numéro de port] Recherche les processus en cours d'exécution sur un port spécifié
-i :[plage de ports] Identifie les processus en cours d'exécution sur une série de ports
-t [nom du fichier] Liste des identifiants de processus ayant accédé à un fichier spécifique
# kill -9 'lsof -t -u [utilisateur]' Détruit tous les processus appartenant à un utilisateur
-d mem Affiche tous les fichiers mis en correspondance avec la mémoire
[chemin] | grep supprimé Imprime les fichiers supprimés verrouillés
man Ouvre le manuel

Partie 2. Comment trouver et supprimer des fichiers qui sont ouverts mais qui ont été supprimés avec lsof ?

Commençons par comprendre le concept. Sous Linux, un fichier est un lien vers un code, composé de toutes les propriétés du fichier et des blocs de données sur le disque qui constituent le contenu du fichier. En supprimant un fichier, vous supprimez le lien vers son code, mais pas le code lui-même ; d'autres processus peuvent encore l'utiliser. Il faut attendre qu'ils soient terminés et que tous les liens aient été supprimés pour qu'un code et les blocs de données vers lesquels il pointe soient disponibles pour l'écriture.

Si les données d'un fichier semblent disparaître dans la liste des répertoires, elles se trouvent ailleurs si un processus l'a encore ouvert.

Le répertoire/proc entre en jeu dans le pseudo-système de fichiers du processus Linux. Sur le système, chaque processus possède un répertoire portant son nom, qui contient de nombreux éléments, notamment un sous-répertoire fd (descripteur de fichier) contenant des liens vers tous les fichiers ouverts par le processus. Même si un fichier a été supprimé du système de fichiers, une copie des données est toujours présente :

Etape 1. Pour savoir où aller, obtenez l'identifiant du processus et le descripteur de fichier du processus qui a ouvert le fichier à l'aide de lsof. Après avoir obtenu ces informations par lsof, copiez les données de /proc.

  • Créer un fichier texte :

$ man lsof | col -b > monfichier

Etape 2. Puis examinez le contenu du fichier que vous venez de créer :

  • La commande less devrait afficher une version en clair de l'énorme page de manuel de lsof.

$ less monfichier

Etape 3. Pour interrompre la commande less, appuyez sur Ctrl-Z.

  • Assurez-vous que votre fichier est toujours présent à l'invite de l'interpréteur de commandes :

$ ls -l myfile
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:14 myfile
$ stat myfile
File: `myfile'
Size: 114383 Blocks: 232 IO Block: 4096 regular file
Device: 341h/833d Inode: 1276722 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1010/ jimbo) Gid: ( 1010/ jimbo)
Access: 2006-10-31 16:15:08.423715488 -0400
Modify: 2006-10-31 16:14:52.684417746 -0400
Change: 2006-10-31 16:14:52.684417746 -0400

Etape 4. Veuillez le retirer.

  • Mais cette fois-ci, il n'est plus là.

$ rm myfile
$ ls -l myfile
ls: myfile: No such file or directory
$ stat myfile
stat: cannot stat `myfile': No such file or directory
$

A ce moment, vous ne devez pas autoriser la sortie du processus de poursuite de l'utilisation du fichier, car cela entraînerait la perte définitive du fichier.

Partie 3. Comment récupérer des fichiers supprimés à l'aide de lsof ?

Une fois les fichiers ouverts qui ont été supprimés trouvés et supprimés, nous allons maintenant les récupérer à l'aide de lsof. Par ailleurs, si un fichier a été supprimé mais qu'il est toujours ouvert par un processus, lsof peut afficher des informations sur le fichier, notamment son descripteur de fichier, l'identifiant du processus et le chemin d'accès complet.

Etape 1. Découvrez ce que lsof a à dire à ce sujet :

$ lsof | grep myfile
less 4158 jimbo 4r REG 3,65 114383 1276722 /home/jimbo/myfile (deleted)

Dans la première colonne figure le nom de la commande associée au processus, la deuxième colonne contient l'identifiant du processus et la quatrième colonne contient le descripteur de fichier (le "r" indique qu'il s'agit d'un fichier normal). Vous savez que le processus 4158 a le fichier ouvert et le descripteur de fichier 4. Voilà tout ce qu'il faut savoir pour le copier hors de /proc.

Etape 2. Vous pensez peut-être que l'utilisation de l'option -a avec cp est la bonne chose à faire parce que vous restaurez le fichier, mais ce n'est PAS la bonne chose à faire.

  • Plutôt que de copier les données littérales du fichier, vous copierez un lien symbolique, désormais rompu, vers le fichier tel qu'il était répertorié dans son répertoire d'origine :

$ ls -l /proc/4158/fd/4
lr-x------ 1 jimbo jimbo 64 Oct 31 16:18 /proc/4158/fd/4 -> /home/jimbo/myfile (deleted)
$ cp -a /proc/4158/fd/4 myfile.wrong
$ ls -l myfile.wrong
lrwxr-xr-x 1 jimbo jimbo 24 Oct 31 16:22 myfile.wrong -> /home/jimbo/myfile (deleted)
$ file myfile.wrong
myfile.wrong: broken symbolic link to `/home/jimbo/myfile (deleted)'
$ file /proc/4158/fd/4
/proc/4158/fd/4: broken symbolic link to `/home/jimbo/myfile (deleted)'

  • Ainsi, au lieu de tout cela, un simple cp suffira :

$ cp /proc/4158/fd/4 myfile.saved

  • Pour finir, vérifiez à nouveau que vous avez tout fait correctement :

$ ls -l myfile.saved
-rw-r--r-- 1 jimbo jimbo 114383 Oct 31 16:25 myfile.saved
$ man lsof | col -b > myfile.new
$ cmp myfile.saved myfile.new

Partie 4. Pour récupérer les fichiers supprimés sous Linux, une alternative simple à lsof

Si vous êtes à la recherche d'une alternative facile à utiliser à lsof pour récupérer des fichiers supprimés, envisagez d'utiliser un logiciel de récupération de fichiers Linux tel que Wondershare Recoverit. À la différence de lsof, un outil de ligne de commande, Recoverit possède une interface graphique simple qui le rend facile à utiliser, même pour les personnes qui ont peu ou pas d'expérience technique. Recoverit vous permet d'analyser rapidement le disque dur de votre ordinateur et de récupérer les fichiers supprimés en quelques clics.

Wondershare Recoverit - Votre logiciel de récupération Linux sûr et fiable

5 481 435 personnes l'ont téléchargé.

Il récupère les documents, les photos, les vidéos, la musique, les courriels et plus de 1000 types de fichiers perdus ou supprimés, de manière efficace, sûre et complète.

Compatible avec toutes les distributions Linux courantes, y compris Ubuntu, Linux Mint, Debian, Fedora, Solus, Opensuse, Manjaro, etc.

Aide dans plus de 500 situations de perte de données, telles que la suppression, le formatage du disque, le crash du système d'exploitation, la panne de courant, l'attaque de virus, la perte d'une partition et bien d'autres encore.

Grâce à l'interface simple de type pointer-cliquer, vous pouvez récupérer les données des disques durs Linux en quelques clics seulement.

Fonctionne par connexion à distance. Il est possible de récupérer les données perdues même lorsque votre appareil Linux est bloqué.

Découvrez comment utiliser Wondershare Recoverit sous Linux pour récupérer des données supprimées. Si la lecture des instructions vous semble difficile, voici un clip vidéo avec un tutoriel plus approfondi.

Téléchargement gratuit

Pour Windows Vista/7/8/10/11

Téléchargement gratuit

Pour macOS X 10.10 - macOS 13

Etape 1. Recoverit Linux Recovery

Lancez le logiciel Wondershare Recoverit sur votre appareil Linux. Ensuite, sélectionnez les options NAS et Linux sur le côté gauche de l'interface principale. Pour continuer, sélectionnez Récupération Linux.

recoverit linux recovery

Etape 2. Connexion à distance Linux

Remplissez la nouvelle fenêtre qui s'affiche avec les informations nécessaires à l'établissement d'une connexion à distance. Une fois terminé, appuyez sur Connecter.

connexion distante Linux

En attendant que la connexion soit établie, Recoverit lance une recherche automatique des données perdues sur un ordinateur Linux.

Etape 3. Processus de récupération

En fonction de la quantité de données numérisées, la procédure de numérisation peut prendre un certain temps ; l'état de la numérisation est affiché dans la barre inférieure. La fonctionnalité la plus intéressante de Recoverit est la possibilité d'interrompre l'analyse lorsqu'un fichier doit être restauré.

processus de balayage automatique

Une fois le processus d'analyse terminé, Recoverit vous permet d'inspecter les fichiers pour vous assurer qu'il s'agit bien de ceux que vous souhaitez récupérer. Sélectionnez Récupérer pour enregistrer le fichier sur votre appareil Linux.

Aperçu et récupération des données

Par la suite, le logiciel vous invite à sélectionner un emplacement pour les fichiers récupérés sur votre appareil. Assurez-vous de vous rendre à un endroit différent de celui où vous avez perdu vos fichiers précédemment.

Téléchargement gratuit

Pour Windows Vista/7/8/10/11

Téléchargement gratuit

Pour macOS X 10.10 - macOS 13

Récapitulation

Pour conclure, "lsof" est un utilitaire de ligne de commande utile pour afficher des informations sur les fichiers ouverts par des processus dans les systèmes de type Unix. Toutefois, la recherche et la récupération de fichiers ouverts mais supprimés est un processus complexe qui requiert un certain niveau d'expertise technique. Un logiciel de récupération de fichiers tel que Recoverit peut alors constituer une alternative plus conviviale, grâce à une interface graphique simple permettant d'analyser et de récupérer rapidement les fichiers supprimés.