locate (mlocate)

Dans un terminal, locate permet de localiser immédiatement n'importe quel fichier ou répertoire présent sur votre système (y compris les fichiers cachés).

A la différence de la commande find, locate va vous donner le résultat de votre recherche immédiatement. find offre cependant beaucoup plus de possibilités

locate est en fait un fichier lien vers le programme mlocate

locate est rapide parce qu'au lieu de parcourir en « live » toute l'arborescence du système (comme le fait find), une base de données ou index est régulièrement mis à jour qui contient la liste de tous les fichiers et répertoires. C'est cet index statique qui va être exploré très rapidement et fournir le résultat de la recherche lors de l'utilisation de locate.

La base de données est automatiquement mise à jour quotidiennement grâce au programme anacron.

anacron est un programme qui permet l'exécution de tâches quotidiennes, hebdomadaires ou mensuelles sur un système de type Unix.

La base de données mise à jour quotidiennement à 7h30. Si la machine n'était pas allumée à ce moment précis, la mise à jour est déclenchée 5 minutes après le prochain démarrage.

locate indexe l'ensemble du système de fichiers : un utilisateur lambda peut utiliser locate pour connaître le contenu de dossiers dont il n'a pas les droits. Si cet aspect vous gêne, il faudra remplacer mlocate par slocate. Ce n'est en général pas un problème sur une machine personnelle dont l'accès est sécurisé, mais c'est un point à garder en tête pour une utilisation sur serveur ou dans un contexte à accès partagé.

Plutôt que de relire l'ensemble du contenu de tous les répertoires chaque fois que la base de données est mise à jour, locate conserve des informations d'horodatage dans sa base de données de telle sorte qu'il puisse savoir si le contenu d'un répertoire a changé sans le relire. Cela rend les mises à jour plus rapides et sollicite moins le disque dur. Cette fonctionnalité est par contre uniquement disponible dans mlocate.

Avant la version 13.10 d'Ubuntu, les adeptes de l'hibernation ou de la mise en veille devaient potentiellement mettre à jour la base de données manuellement pour pouvoir utiliser locate, dans le cas où leur PC ne fonctionnait pas à l'heure exacte prévue de la mise à jour de l'index. Désormais, la mise à jour est automatiquement lancée à la sortie de veille.

La commande locate est fournie par le paquet mlocate, lequel est normalement pré-installé. Si ce n'est pas le cas :

 sudo apt-get install mlocate

Un fichier script mlocate est placé dans /etc/cron.daily pour être exécuté chaque jour et mettre à jour la base de donnée mlocate, qui se trouve à l'emplacement /var/lib/mlocate/mlocate.db. L'installation de mlocate modifie le binaire /usr/bin/locate pour pointer sur la version "mlocate". Si mlocate n'était pas pré-installé sur votre système, que vous avez réalisé une installation manuelle et que vous souhaitez utiliser locate sans attendre, vous devez exécuter /etc/cron.daily/mlocate manuellement (une seule fois) dans un terminal pour créer la base de données, faute de quoi la commande de recherche ne fonctionnera pas correctement.

Utilisation de locate

Rechercher par exemple le fichier ".profile" :

 locate .profile

Rechercher tous les fichiers mp3 (en majuscules et minuscules) en affichant page par page :

 locate -i mp3 | less

Mise à jour manuelle de la base de données

 sudo updatedb

Exclusion de répertoire de l'indexation

L'indexation d'une grande quantité de fichiers est consommatrice de ressources/temps et nécessite un espace disque important. Il peut donc se révéler intéressant d'exclure certains répertoires de l'indexation.

Cela se fait dans le fichier /etc/updatedb.conf en ajoutant le répertoire en question dans les PRUNEPATHS :

/etc/updatedb.conf
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /data"

Dans cet exemple, les fichiers contenus dans les répertoires /tmp /var/spool, /media, /home/.ecryptfs et /data sont exclus de l'indexation.

Modification de l'heure de l'exécution de la mise à jour

Ceci oblige de modifier l'heure d'exécution de anacron donc ce sera toutes les tâches exécutées par anacron qui seront exécutées à l'heure de votre choix

Modifier le fichier /etc/cron.d/anacron

Original :

 30 7    * * *   root	test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null

Pour passer l'exécution à 5h45 du matin :

 45 5    * * *   root	test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null

Sites relatifs anacron

Auteur : sylvainsjc

Contributeurs :

  • locate.txt
  • Dernière modification: Le 04/02/2018, 10:58
  • (modification externe)