Comment rechercher les fichiers et dossiers volumineux sous Linux ?
Sommaire
I. Présentation
Dans ce tutoriel, nous allons apprendre à rechercher les fichiers volumineux ou les gros fichiers si vous préférez, ainsi que les dossiers volumineux, sur un système Linux. Ces commandes sont très utiles et permettent de gagner un temps fou, notamment lorsque l'on doit libérer de l'espace disque en urgence ou que l'on cherche à comprendre l'augmentation soudaine de l'occupation de l'espace disque. Il peut s'agir d'un fichier de log (fichier journal), d'un fichier de sauvegarde, d'une archive ZIP, etc....
II. Rechercher les fichiers volumineux avec find
Avant de commencer, j'ai créé des fichiers vides d'une taille prédéfinie (90 Mo, 100 Mo, 200 Mo et 1 Go) dans le répertoire "/home/flo".
La commande find permet de rechercher des éléments sur une machine Linux. Elle intègre un paramètre nommé "-size" qui sert à spécifier une taille précise : utile pour notre cas !
Ainsi, la commande ci-dessous va rechercher tous les fichiers de plus de 100 Mo sur le système :
find / -type f -size +100M
Quelques explications s'imposent :
- / : l'emplacement depuis lequel rechercher, ici sur tout le système
- -type f : filtrer sur les fichiers uniquement
- -size +100M : inclure tous les fichiers dont la taille est supérieure à 100 Mo
Par exemple, le résultat suivant est retourné :
/tmp/latest.zip /proc/kcore /var/log/apache2/access.log /home/flo/Fichier100Mo /home/flo/Fichier200Mo /home/flo/Fichier1Go
Je sais que ces fichiers ont une taille supérieure à 100 Mo. Bien sûr, on peut spécifier une taille différente exprimée en Gigaoctets. Pour rechercher les fichiers dont la taille est supérieure à 1 Go :
find / -type f -size +1G
Nous pouvons aussi effectuer la recherche sous une arborescence spécifique. Par exemple, dans "/home/" :
find /home/ -type f -size +100M
Cette fois-ci, il y a moins de fichiers dans la sortie car la recherche a été effectuée uniquement sous "/home/" :
/home/flo/Fichier100Mo /home/flo/Fichier200Mo /home/flo/Fichier1Go
Le problème c'est que cette sortie n'indique pas la taille du fichier, mais seulement son chemin. En ajoutant le paramètre "-printf", nous pouvons personnaliser la sortie pour indiquer la taille et le chemin du fichier :
find /home/flo/ -type f -size +100M -printf '%s %p\n'
Ce qui donne :
112640000 /home/flo/Fichier100Mo 204800000 /home/flo/Fichier200Mo 1126400000 /home/flo/Fichier1Go
On peut aller encore un peu plus loin en triant les fichiers du plus gros au plus petit :
find /home/flo/ -type f -size +100M -printf '%s %p\n' | sort -nr
La sortie sera plus simple à analyser :
Dans le cas où il y a énormément de fichiers, comment obtenir un "Top 10" ou un "Top 20" des plus gros fichiers ? La réponse avec la commande head, que l'on ajoutera de cette façon :
find /home/flo/ -type f -size +100M -printf '%s %p\n' | sort -nr | head -10
Remarque : lorsque vous précisez la taille, vous pouvez utiliser K pour Ko, M pour Mo, G pour Go.
III. Rechercher les dossiers volumineux
En complément de la commande find, il y a aussi la commande du que l'on peut utiliser pour trouver les dossiers les plus volumineux sur une machine. Le nom de cette commande signifie "disk usage", ou utilisation du disque en français : elle devrait être intéressante par rapport à notre besoin du jour !
du -a | sort -nr | head -n 5
Quelques explications sur cette commande :
- du -a : -a pour -all permet d'inclure tous les fichiers et dossiers dans le comptage
- sort -nr : trier en regardant les valeurs numériques (la taille, n) et inverse le résultat (r).
- head -n 5 : afficher uniquement les 5 premiers résultats, soit le Top 5 des dossiers les plus volumineux
Ce qui donne le résultat suivant, qui intègre à la fois des dossiers de premiers niveaux et des sous-dossiers :
Pour effectuer une analyse uniquement sur les dossiers de premiers niveaux (/var, /etc, /home, /tmp, etc.), avec une taille facilement lisible par un humain (exprimée en Go ou Mo), on utilisera cette syntaxe :
du -hs /* | sort -rh | head -5
En un coup d'œil, on peut identifier les répertoires racines les plus volumineux :
Mais, cela pourrait manquer de précision : il serait utile de pouvoir identifier quels sont les sous-répertoires les plus volumineux. En théorie, le répertoire "/home/flo", qui contient les fichiers que j'ai volontairement créé, devrait ressortir. Dans ce cas, nous devons adapter légèrement la commande :
du -Sh | sort -rh | head -5
Le résultat est satisfaisant :
Une fois que l'on a identifié les répertoires les plus volumineux, on peut effectuer une recherche ciblée des fichiers volumineux dans ces répertoires, à l'aide de la commande find évoquée précédemment.
IV. Conclusion
Être capable d'identifier les fichiers et dossiers volumineux sur une machine Linux, c'est une tâche d'administration simple, mais qu'il faut savoir faire ! Grâce aux commandes find et du, vous pouvez effectuer cette recherche facilement. Elles sont disponibles sur les différentes distributions Linux : Debian, Ubuntu, Rocky Linux, etc.
Pour être capable d'utiliser facilement ces commandes sans avoir à les retenir complètement, vous pouvez créer vos propres alias de commande Linux.
Si vous connaissez d'autres commandes, n'hésitez pas à les partager en commentaire !
Pour le coup, la commande NCDU est sûrement plus simple sur certains usages 🙂
L’utilitaire « gdu » fait la même chose, mais en plus rapide : c’est une sorte de gestionnaire de fichiers en ligne de commande qui affiche les sous-répertoires de celui spécifié en argument, en les triant par ordre décroissant de taille.
Dans le cas présent :
gdu -x ~
Le paramètre « -x » permet de rester dans un même système de fichier et de ne pas explorer d’éventuels liens qui pointeraient vers d’autres partitions.
Après un petit temps d’exploration, l’affichage de la liste apparaît (rapidement) et on peut se déplacer dessus avec les flèches et entrer dans n’importe sous-répertoire et explorer ainsi toute l’arborescence.
Hello Baptiste,
Je ne connaissais pas NCDU, je vais le tester ! 🙂 Merci pour l’idée !
aussi pardoistu peux avoir des million de petit fichier qui remplise les inode et full le disque ca airait ete pas mal de le traité aussi ?
Bonjour Florian et merci pour cet utile article.
Au paragraphe III « Rechercher les dossiers volumineux », pour la commande « du -hs /* | sort -rh | head -5 », il est possible d’ajouter des exclusions pour ne pas avoir l’affichage des messages « du: impossible d’accéder à … » ; la commande serait alors la suivante :
du -hs –exclude=/proc –exclude=/run /* | sort -rh | head -5
Si on a accès à une interface graphique, il y a kdirstat, qui présente les dossiers/fichiers sous forme de rectangles dont la taille est proportionnelle à l’espace occupé sur le disque.
Il existe des variantes pour Windows « windirstat », et pour macos » Disk Inventory X » .
Merci pour ce doc, ça fait fonctionner la cervelle pour ce type de recherche de fichier, ça fait une belle gymnastique 🙂
Mais de mon côté j’avoue utiliser moi aussi NCDU qui est un superbe outil et qui permet de naviguer facilement dans les recherches.
GDU aussi n’est pas mal.
Voilà c’est mon petit côté « paresseux » d’utiliser NCDU, mais ce rappel avec FIND est une très bonne chose.
Merci.
Ncdu est simple à utiliser et pratique