Commande locate : utilisations et exemples

locate est une commande de bases Linux pour faire des recherches de fichiers sur Linux.
L'utilitaire locate est extrêmement rapide car il recherche dans une base de données.
Ainsi, cela évite une recherche sur chaque disques locaux ce qui peut prendre du temps.

Ainsi locate répond à la plupart des demandes pour localiser des fichiers par le nom.
Il peut se substituer à la commande find dans la plupart des cas, bien que cette dernière est beaucoup plus puissante.

Dans ce tutoriel, je vous explique comment utiliser la commande locate à travers de nombreux exemples.

Commande locate : utilisations et exemples

Comment utiliser la commande locate

Le principe de locate est très simple à comprendre.
Lorsque vous utilisez locate, ce dernier interroge une base de données /var/lib/mlocate/mlocate.db qui stocke les noms et emplacements des fichiers.
Cela va beaucoup plus vite que devoir recherche sur les disques locaux.
Cette base de données se met à jour tous les jours, à travers un cron pour ajouter les modifications apportées au système de fichiers.

Voici la syntaxe de la commande locate :

locate [Fichier]
OPTIONSDESCRIPTION
-eAfficher que les fichiers existants dans le système
-cCount : compter le nombre d'entrées)
--regex ou -rFaire une recherche en utilisant les regex
-iIgnorer la casse (rendre locate insensible à la casse)
-l <Num>Réduire le nombre d'entrée du résultat à Num
Les options de la commande locate

Par exemple, pour rechercher tous les fichiers malekal.txt sur votre Linux :

locate malekal
Comment faire une recherche de fichiers avec locate
Par défaut, locate ne prend pas en charge les fichiers qui se trouvent dans /tmp/ /var/spool et /media. Voir PRUNEFS dans le paragraphe suivant

Configurer et mettre à jour la base de données locate

Si vous avez besoin de mettre à jour la base de données manuellement pour refléter les dernières modifications de fichiers, utilisez la commande updatedb de cette manière :

sudo updatedb

Certaines distributions Linux incluent un fichier /etc/updatedb.conf avec la configuration updatedb.
Sur Debian, la configuration se trouve directement dans le fichier cron : /etc/cron.daily/locate
Notamment on trouve :

# Global options for invocations of find(1)
FINDOPTIONS='-ignore_readdir_race'
# filesystems which are pruned from updatedb database
PRUNEFS="NFS nfs nfs4 afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf ocfs2"
# paths which are pruned from updatedb database
PRUNEPATHS="/tmp /usr/tmp /var/tmp /afs /amd /alex /var/spool /sfs /media /var/lib/schroot/mount"
# netpaths which are added
NETPATHS=""
# run find as this user
LOCALUSER="nobody"
  • PRUNEFS : une liste des types de systèmes de fichiers séparés par des espaces qui ne doivent pas être intégrés dans la base de données. La correspondance de type système de fichiers est insensible à la casse. Par défaut, aucun type de système de fichiers n'est ignoré. Lorsque la numérisation d'un système de fichiers est ignorée, tous les systèmes de fichiers montés dans le sous-arbre sont également ignorés, même si leur type ne correspond à aucune entrée dans PRUNEFS.
  • PRUNENAMES : Une liste de noms de répertoires séparés par des espaces (sans chemins) qui ne doivent pas intégrés à la base de données. Par défaut, aucun nom de répertoire n'est ignoré. Notez que seuls les répertoires peuvent être spécifiés et aucun mécanisme de motif n'est utilisé.
  • PRUNEPATHS : une liste de noms de chemins séparés par des espaces blancheurs qui ne doivent pas être numérisés par mis à jour. Chaque nom de chemin doit être exactement sous la forme dans laquelle le répertoire serait signalé par localisation. Par défaut, aucun chemin n'est ignoré.

Comment faire une recherche de fichiers avec locate

Comme nous venons de le voir, l'utilisation de locate est simple puisqu'il suffit d'indiquer l'élément à rechercher.

locate malekal.txt

Toutefois, il faut bien comprendre que le résultat de la recherche inclut tous les fichiers comportant un mot.
Ainsi si vous recherche sur motif, locate recherche en réalité *motif*.

Par exemple, vous souhaitez rechercher tous les fichiers avec l'extension .conf.
Vous pouvez alors utiliser :

locate .conf
Comment faire une recherche de fichiers avec locate

Mais cela va faire ressortir des fichiers contenant le motif de recherche.
Ainsi, on peut tomber sur des fichiers avec une extension .config ou encore adduser.confiles

/usr/src/linux-headers-5.10.0-9-amd64/.config
/usr/src/linux-headers-5.10.0-9-amd64/include/config/auto.conf
/usr/src/xtables-addons-3.13/dkms.conf
/var/lib/dpkg/info/adduser.conffiles
/var/lib/dpkg/info/adduser.config
/var/lib/dpkg/info/apparmor.conffiles
/var/lib/dpkg/info/apparmor.config
/var/lib/dpkg/info/apt-file.conffiles

Ou encore les fichiers du man comme :

/usr/share/man/ru/man5/deluser.conf.5.gz
/usr/share/man/ru/man5/semanage.conf.5.gz
/usr/share/man/sv/man5/adduser.conf.5.gz

De même si vous souhaitez rechercher les fichiers HTML :

locate .html

Cela peut inclure des fichiers comme xxx.html.gz

Comment rechercher un nom de fichiers exact

Pour rechercher des fichiers sur une extension particulière, utilisez locate comme ceci :

locate "*.extf"

Par exemple pour rechercher les fichiers .conf :

locate "*.conf"

Pour trouver les fichiers qui commencent par le mot malekal :

locale malekal*

Mais pour affiner la recherche de fichiers et limiter les résultats, vous pouvez aussi utiliser les expressions régulières.
Pour cela, on utilise l'option -r ou --regex.
Par exemple pour rechercher sur une extension de fichiers exacts :

locate -r "\.conf$"
locate --regex "\.html$"

Enfin vous souhaitez rechercher sur un nom de fichier exact :

locate -r /nomfichier$

Comment ignorer la casse (case insensitive)

Par défaut, locate est case sensitive.
Ainsi lorsque vous rechercher nomfichier.txt, cela ne va pas trouver les versions du fichier avec une majuscules comme Nomfichier.txt, NomFichier.txt, nomfichier.TXT ou NOMFICHIER.TXT.
Pour ignorer la casse, utilisez l'option -i :

locate -i nomfichier.txt
Comment ignorer la case sensitive sur locate

Comment afficher que les fichiers qui existent dans le système

Après une modification récente de fichiers, la base de données n'est pas tout à fait jour.
Ainsi locate peut référencer des fichiers qui n'existent plus.
On peut forcer la mise à jour avec updatedb mais cela peut prendre du temps.
Il existe toutefois une option qui permet de s'assurer que le fichiers existent bien, c'est l'option -e :

locate -e sysctl.conf

Même lorsque le fichier existe dans le MLOCK.DB, il vérifiera toujours que le fichier est physiquement présent dans le système avant de l'afficher.

Comment afficher le nombre d'entrées correspondantes

Parfois il est utile de connaître le nombre d'entrées correspondant à une recherche de fichiers.
Cela est possible avec l'option -c :

locate -c malekal*

Comment limiter les résultats de recherche

Utilisez l'option -l pour limiter le nombre de résultats.
Par exemple pour limiter le résultat à 5 occurrences :

locate *.conf -l 5

Comment visualiser les informations de la base de données

Utilisez l'option -S pour afficher les informations de la base de données.
Vous obtenez alors les informations comme son emplacement, la taille, le nombre de fichiers.

[email protected]:~$ locate -S
Database /var/cache/locate/locatedb is in the GNU LOCATE02 format.
Database was last modified at 2021:12:26 06:25:57.112067013 +0000
Locate database size: 59007254 bytes
All Filenames: 5968003
File names have a cumulative length of 300369566 bytes.
Of those file names,

        5 contain whitespace,
        0 contain newline characters,
        and 4 contain characters with the high bit set.
Compression ratio 80.36% (higher is better)

Tags: