22/12/2024

Commandes et Système

Comment rechercher les fichiers et dossiers volumineux sous Linux ?

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 :

Rechercher les gros fichiers sous Linux

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 :

Dossiers les plus volumineux sous Linux

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 :

Dossiers racines les plus gros sous Linux

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 :

Trouver les dossiers les plus gros sous Linux

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 !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

8 commentaires sur “Comment rechercher les fichiers et dossiers volumineux sous Linux ?

  • Pour le coup, la commande NCDU est sûrement plus simple sur certains usages 🙂

    Répondre
    • 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.

      Répondre
    • Hello Baptiste,
      Je ne connaissais pas NCDU, je vais le tester ! 🙂 Merci pour l’idée !

      Répondre
  • 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 ?

    Répondre
  • 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

    Répondre
  • 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 » .

    Répondre
  • 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.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.