Tutoriel Linux

Find sous Linux : trouver un fichier sans fouiller tout le serveur à la main

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Quand vous savez qu’un fichier existe quelque part sur un serveur, mais pas où, la tentation est souvent de fouiller dossier par dossier. Mauvais plan. Sous Linux, find est fait pour ça : chercher par nom, type, taille, date, droits, puis agir seulement quand le résultat est clair.

Je vous conseille de l’utiliser avec méthode, surtout sur un serveur de production. Une commande find lancée à la racine peut parcourir énormément de fichiers, afficher des erreurs de permissions et charger inutilement le disque. L’idée n’est pas de taper la commande la plus large possible, mais de réduire vite le périmètre.

Tux utilise une loupe pour chercher des fichiers sur un serveur Linux
Find permet de retrouver un fichier dans une arborescence Linux sans fouiller chaque dossier à la main.

Commencer par chercher au bon endroit

La forme de base est simple : vous indiquez un dossier de départ, puis un critère de recherche.

find /etc -name "ssh_config"

Ici, Linux cherche un fichier nommé ssh_config dans /etc et ses sous-dossiers. Si vous savez déjà que le fichier devrait être dans une zone précise, partez de cette zone. C’est plus rapide, plus lisible, et vous évitez de scanner tout le système pour rien.

Pour ignorer la casse, utilisez -iname :

find /var/www -iname "*.conf"

Si vous partez de la racine, attendez-vous à voir des messages Permission denied. Ce n’est pas forcément grave. Vous pouvez les masquer, mais ne le faites pas systématiquement si vous cherchez justement un problème de droits.

find / -name "nginx.conf" 2>/dev/null

Limiter la recherche par type de fichier

Sur un serveur, un nom peut correspondre à un fichier, un dossier, un lien symbolique ou autre chose. Ajoutez -type pour éviter les résultats inutiles.

find /var/log -type f -name "*.log"
find /var/www -type d -name "cache"
find /usr/bin -type l -name "python*"

-type f cible les fichiers classiques. -type d cible les dossiers. -type l cible les liens symboliques. Ce petit filtre évite beaucoup de bruit dans les résultats.

Vous pouvez aussi limiter la profondeur quand vous ne voulez pas descendre trop loin dans l’arborescence :

find /var/www -maxdepth 2 -type d -name "cache"

C’est très pratique sur des sites web, des sauvegardes ou des dossiers utilisateurs avec beaucoup de sous-répertoires.

Trouver les gros fichiers avant de supprimer quoi que ce soit

Quand un serveur manque d’espace disque, find peut aider à repérer les gros fichiers. Commencez par lister, pas par supprimer.

find /var -type f -size +100M -print
find /home -type f -size +1G -print

Pour afficher les tailles de manière lisible, vous pouvez exécuter ls -lh sur chaque résultat :

find /var -type f -size +100M -exec ls -lh {} +

Si votre but est de libérer de la place, ne partez pas directement sur rm. Vérifiez d’abord ce que vous avez trouvé, surtout dans /var/lib, /var/log ou les dossiers applicatifs. Un fichier de base de données ou un cache peut demander une méthode propre de purge.

Pour une méthode plus large sur le sujet, vous pouvez compléter avec le guide sur les commandes à utiliser quand l’espace disque Linux est plein.

Chercher par date de modification

Pour retrouver ce qui a changé récemment, les options de date sont très utiles. Par exemple, les fichiers modifiés dans les 7 derniers jours :

find /etc -type f -mtime -7

Les fichiers modifiés il y a plus de 30 jours :

find /var/log -type f -mtime +30

-mtime travaille en jours. Pour une recherche plus fine, regardez aussi -mmin, qui travaille en minutes :

find /tmp -type f -mmin -60

C’est utile après une modification de configuration, une mise à jour ou un script qui a généré des fichiers sans vous dire clairement où.

Filtrer par droits sans casser les permissions

Find peut aussi chercher selon les permissions. Exemple pour trouver des scripts exécutables dans un dossier :

find /usr/local/bin -type f -perm /111

Pour repérer des fichiers trop ouverts, vous pouvez chercher les fichiers modifiables par tout le monde :

find /var/www -type f -perm -002 -exec ls -lh {} ;

Ne corrigez pas une liste de résultats avec un chmod global sans comprendre le contexte. Les permissions Linux peuvent vite se transformer en panne applicative. Si vous devez revoir ce point, l’article sur chmod récursif sous Linux explique justement pourquoi il faut rester prudent.

Utiliser -exec sans déclencher une catastrophe

-exec permet d’exécuter une commande sur les fichiers trouvés. C’est puissant, donc c’est aussi l’endroit où l’on peut faire le plus de dégâts.

Commencez toujours par afficher les résultats :

find /tmp -type f -name "*.tmp" -print

Ensuite seulement, si la liste est correcte, vous pouvez demander une confirmation avant suppression :

find /tmp -type f -name "*.tmp" -exec rm -i {} +

Le couple {} représente les fichiers trouvés. Le + demande à find de regrouper plusieurs résultats dans la même commande quand c’est possible, ce qui évite de lancer un processus par fichier.

find /var/log -type f -name "*.log" -exec ls -lh {} +

Mon conseil est simple : tant que vous n’avez pas relu la liste, pas de suppression automatique. Sur un serveur, la seconde gagnée ne vaut pas une restauration de sauvegarde.

Une méthode courte avant de lancer find en production

  • partez du dossier le plus précis possible ;
  • ajoutez -type f, -type d ou -type l dès que possible ;
  • utilisez -maxdepth si vous voulez éviter une recherche trop profonde ;
  • affichez les résultats avec -print ou -exec ls -lh avant d’agir ;
  • gardez les commandes destructrices pour la fin, avec confirmation si possible.

Pour la documentation de référence, vous pouvez consulter le manuel GNU Findutils sur find et la page find(1) de man7. Si vous devez suivre les logs après avoir trouvé un fichier, le guide sur tail sous Linux complète bien cette méthode.

sudo apt update && sudo apt upgrade