find est puissant mais il parcourt le disque en temps réel — sur un gros système, ça peut prendre plusieurs secondes. locate fonctionne différemment : il consulte une base de données pré-indexée de tous les fichiers de votre système. Le résultat est quasi-instantané.
La contrepartie : cette base de données n’est pas mise à jour en temps réel. Un fichier créé il y a 5 minutes n’y sera peut-être pas encore.
La forme de base
locate nom_du_fichier
C’est tout. locate cherche dans toute sa base de données et affiche tous les chemins qui contiennent ce que vous avez tapé.
locate nginx.conf
/etc/nginx/nginx.conf
/usr/share/doc/nginx/nginx.conf.example
Remarquez que locate fait une recherche par sous-chaîne par défaut — il trouve tous les chemins qui contiennent nginx.conf, pas seulement les fichiers qui s’appellent exactement comme ça.
La base de données — ce qu’il faut comprendre
locate ne cherche pas sur le disque, il cherche dans /var/lib/mlocate/mlocate.db (ou équivalent selon votre système). Cette base est mise à jour automatiquement, généralement une fois par jour via une tâche cron.
Si un fichier récent n’apparaît pas, mettez la base à jour manuellement :
sudo updatedb
Ça prend quelques secondes, et après, locate voit les nouveaux fichiers.
Les options essentielles
-i — ignorer la casse
locate -i "readme"
Trouve README.md, Readme.txt, readme.rst... Même logique que -i dans grep.
-c — juste le nombre
locate -c "*.py"
4821
Affiche uniquement le nombre de fichiers trouvés, sans les lister. Utile pour avoir une idée rapide de la quantité.
-n — limiter les résultats
locate -n 10 "*.conf"
Arrête après 10 résultats. Pratique quand vous savez que vous allez avoir des milliers de réponses et que vous cherchez juste à confirmer que le fichier existe quelque part.
-r — utiliser une regex
locate -r "\.log$"
Cherche les chemins qui se terminent par .log. Avec -r, vous pouvez utiliser les expressions régulières standards.
locate -r "/etc/.*\.conf$" # fichiers .conf directement dans /etc
--basename — chercher seulement dans le nom
Par défaut, locate cherche dans le chemin complet. Donc locate lib va trouver /usr/lib/python, /var/lib/apt, etc. — tout ce qui contient “lib” dans le chemin.
Avec --basename, il ne cherche que dans le nom du fichier lui-même :
locate --basename "nginx.conf"
Beaucoup plus précis quand vous connaissez le nom exact.
Combiner avec d’autres commandes
locate produit une liste de chemins — elle se prête bien au pipe.
# Chercher "TODO" dans tous les fichiers Python de votre système
locate "*.py" | xargs grep -l "TODO" 2>/dev/null
# Compter les fichiers .log par dossier
locate "*.log" | grep "/var/log" | wc -l
# Ouvrir le premier fichier trouvé
locate -n 1 "nginx.conf"
find ou locate — lequel choisir ?
Ce sont deux outils complémentaires, pas concurrents.
| Situation | Outil recommandé |
|---|---|
| Vous cherchez un fichier dont vous connaissez le nom | locate — instantané |
| Le fichier a été créé très récemment | find — locate ne l’a peut-être pas encore indexé |
| Vous cherchez par date, taille, permissions | find — locate ne sait pas faire ça |
| Vous voulez exécuter une commande sur les résultats | find avec -exec |
| Vous cherchez dans un dossier spécifique | find — plus précis |
| Vous voulez juste savoir où est ce fichier | locate — plus rapide |
En pratique : commencez par locate pour les recherches simples par nom. Si vous avez besoin de plus de contrôle, passez à find.
Petite mise en pratique
Exercice 1 — Débutant
Trouvez tous les fichiers qui s’appellent bashrc sur votre système.
Voir la réponse
locate bashrc
Ou plus précis, uniquement sur le nom du fichier :
locate --basename "bashrc"
Exercice 2 — Débutant
Combien de fichiers .conf sont indexés sur votre système ?
Voir la réponse
locate -c ".conf"
Exercice 3 — Intermédiaire
Trouvez les 5 premiers fichiers nginx.conf sur le système, sans tenir compte de la casse.
Voir la réponse
locate -i -n 5 "nginx.conf"
Exercice 4 — Intermédiaire
Vous cherchez un fichier dont vous savez qu’il se termine par .key et qu’il est quelque part dans /etc. Trouvez-le.
Voir la réponse
locate -r "/etc/.*\.key$"
Ou plus simplement :
locate "/etc/*.key"
Exercice 5 — Avancé
La base de données n’a pas été mise à jour depuis hier et vous cherchez un fichier que vous venez de créer. Comment procéder ?
Voir la réponse
Mettez d’abord à jour la base, puis cherchez :
sudo updatedb && locate "nom_du_fichier"
Cheatsheet
| Commande | Ce qu’elle fait |
|---|---|
locate nom |
Recherche dans toute la base |
locate -i "nom" |
Insensible à la casse |
locate -c "*.log" |
Compter sans afficher |
locate -n 20 "motif" |
Limiter à 20 résultats |
locate --basename "nom" |
Chercher sur le nom seul |
locate -r "regex" |
Avec une expression régulière |
sudo updatedb |
Mettre à jour la base de données |
Pour aller plus loin
mlocatevsplocate— selon votre distribution, la commande peut être légèrement différente, mais l’usage est identique.plocateest une version plus récente et plus rapide./etc/updatedb.conf— le fichier de configuration qui définit quels dossiers sont exclus de l’indexation (par défaut :/tmp,/proc, les systèmes de fichiers réseau...).locaten’existe pas sur votre machine ? Installez-le :sudo apt install mlocate(Debian/Ubuntu) ousudo dnf install mlocate(Fedora/RHEL).fd— une alternative moderne qui combine la rapidité delocateet la flexibilité defind, avec une syntaxe plus intuitive. Vaut le coup d’œil.
La documentation complète : man locate dans votre terminal.
Commentaires
Aucun commentaire pour l'instant. Soyez le premier !
Laisser un commentaire