Locate

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Recherche rapide de fichiers (index)
Commande locate
Contexte Paquet mlocate — interroge une base d'index construite par updatedb, mise à jour quotidiennement par un cron/timer
Voir aussi Find (recherche en temps réel, toujours à jour)

locate recherche des fichiers par leur nom en interrogeant une base de données préconstruite, au lieu de parcourir l'arborescence en direct comme find. Cette base d'index est régénérée par updatedb, ce qui rend locate extrêmement rapide même sur de très gros systèmes de fichiers, au prix d'un résultat qui peut être légèrement périmé si l'index n'a pas encore été rafraîchi depuis la dernière modification.

Installation

La commande est fournie par le paquet mlocate (implémentation moderne de locate, avec prise en compte des permissions du système de fichiers) :

# Debian/Ubuntu
apt install mlocate

# RHEL/CentOS
yum install mlocate

Mise à jour de l'index (updatedb)

locate ne voit que ce qui a été indexé lors du dernier passage de updatedb. Un fichier créé après la dernière indexation n'apparaîtra pas dans les résultats tant que l'index n'aura pas été régénéré.

updatedb   # reconstruit immédiatement la base d'index (à lancer en root)

Sur la plupart des distributions, mlocate installe un cron quotidien (/etc/cron.daily/mlocate) ou un timer systemd (mlocate-updatedb.timer/mlocate-updatedb.service) qui appelle updatedb automatiquement chaque nuit — pas besoin de le faire à la main en usage courant. L'exécution manuelle reste utile juste après la création d'un lot de fichiers qu'on veut retrouver tout de suite, ou après l'installation d'un nouveau disque/répertoire à indexer.

Recherche

locate myfile          # recherche par sous-chaîne dans le chemin complet
locate -i myfile       # insensible à la casse (MyFile, MYFILE, myfile...)
locate -c myfile       # affiche uniquement le nombre de résultats, pas les chemins
locate -n 10 myfile    # limite l'affichage aux 10 premiers résultats
locate -b '\myfile'    # ne compare que le nom du fichier (basename), pas tout le chemin

locate fait par défaut une recherche par sous-chaîne sur le chemin complet, ce qui remonte aussi les répertoires dont le nom correspond, pas seulement les fichiers.

Différence avec find

locate et find répondent à des besoins différents :

  • locate est quasi instantané car il ne fait qu'interroger un index déjà construit, mais son résultat peut être en retard sur l'état réel du disque (fichiers créés/supprimés depuis le dernier updatedb).
  • find parcourt l'arborescence en direct à chaque exécution : plus lent sur de gros volumes, mais toujours exact, et permet des critères que locate ne gère pas (date de modification, taille, type, action -exec...).

En pratique : locate pour une recherche rapide par nom sur un système déjà indexé, find dès qu'on a besoin d'un résultat garanti à jour ou de critères plus fins que le nom.

Voir aussi

  • Find — recherche en temps réel dans l'arborescence, sans dépendre d'un index