GNU/Linux >> Tutoriels Linux >  >> Linux

7 exemples pratiques de commande Linux Locate - mlocate et updatedb

Lorsque vous devez rechercher certains fichiers, vous pouvez généralement utiliser la commande find. find est un bon utilitaire de recherche mais il est lent.

Cependant localiser peut rechercher des fichiers très rapidement.

Bien que la commande de localisation fonctionne très rapidement, elle n'a toujours pas dépassé la commande de recherche car elle a certaines limitations.

Cet article explique tout ce que vous devez savoir sur la commande de localisation .

Comment fonctionne la commande de localisation ? – mis à jourb et mis à jourb.conf

Lorsque nous disons que localiser recherche très rapidement, alors la première question qui vient à l'esprit est :qu'est-ce qui rend la localisation si rapide ?.

Eh bien, locate ne recherche pas les fichiers sur le disque, mais plutôt les chemins de fichiers dans une base de données.

La base de données est un fichier qui contient des informations sur les fichiers et leur chemin sur votre système. Le fichier de base de données de localisation se trouve à :

/var/lib/mlocate/mlocate.db

La prochaine question logique est, qu'est-ce qui maintient cette base de données mlocate à jour ?

Eh bien, il existe un autre utilitaire appelé updatedb . Lorsque vous exécutez updatedb, il analyse l'ensemble du système et met à jour le fichier de base de données mlocate.db.

Ainsi, une limitation de la commande ‘locate’ est sa dépendance à la base de données qui peut être mise à jour par un autre utilitaire ‘updatedb’. Par conséquent, afin d'obtenir les résultats les plus récents et fiables de la commande "locate", la base de données sur laquelle elle fonctionne doit être mise à jour à intervalles réguliers.

Nous pouvons également configurer l'utilitaire "updatedb" selon nos besoins. Ceci peut être réalisé en mettant à jour le fichier updatedb.conf. Il s'agit d'un fichier de configuration que updatedb lit avant de mettre à jour la base de données. updatedb.conf se trouve sous /etc/ :

# cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

Le fichier updatedb.conf contient des informations sous la forme VARIABLES=VALUES. Ces variables peuvent être classées en :

  • PRUNEFS :une liste de types de systèmes de fichiers séparés par des espaces (tels qu'utilisés dans /etc/mtab) qui ne doivent pas être analysés par updatedb. La correspondance du type de système de fichiers est insensible à la casse. Par défaut, aucun type de système de fichiers n'est ignoré. Lorsque l'analyse d'un système de fichiers est ignorée, tous les systèmes de fichiers montés dans la sous-arborescence 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 être analysés par updatedb. Par défaut, aucun nom de répertoire n'est ignoré. Notez que seuls les répertoires peuvent être spécifiés et qu'aucun mécanisme de modèle (par exemple, le globbing) n'est utilisé.
  • PRUNEPATHS :une liste séparée par des espaces blancs des noms de chemin des répertoires qui ne doivent pas être analysés par updatedb. Chaque nom de chemin doit être exactement sous la forme dans laquelle le répertoire serait signalé par locate. Par défaut, aucun chemin n'est ignoré.
  • PRUNE_BIND_MOUNTS :  Une des chaînes   0,  non,   1  ou oui. Si PRUNE_BIND_MOUNTS vaut 1 ou oui, les montages liés ne sont pas analysés par updatedb. Tous les systèmes de fichiers montés dans la sous-arborescence d'un montage lié sont également ignorés, même s'il ne s'agit pas de montages liés. Par défaut, les montages liés ne sont pas ignorés.

Notez que toutes les informations de configuration ci-dessus peuvent également être modifiées ou mises à jour via les options de ligne de commande de l'utilitaire "updatedb".

Avant d'essayer des exemples de commande de localisation, assurez-vous d'explorer les exemples de commande de recherche.

Exemples pratiques de commande de localisation

1. Rechercher un fichier à l'aide de la localisation

Pour rechercher un fichier particulier à l'aide de la localisation, procédez comme suit

$ locate sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

La commande suivante recherche httpd.conf dans tout le système.

$ locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf.bak

Vous pouvez également utiliser "locate -0" pour afficher toute la sortie sur une seule ligne. Par exemple :

$ locate -0 httpd.conf

2. Afficher uniquement le décompte

Pour obtenir le nombre d'entrées correspondantes, utilisez locate -c comme indiqué ci-dessous.

$ locate -c httpd.conf
3

3. Utilisez updatedb pour actualiser la base de données mlocate

Supposons que vous ayez effectué une sauvegarde d'un fichier existant :

# cd /etc
# cp sysctl.conf sysctl.conf.orig

Si vous essayez de rechercher sysctl.conf à l'aide de l'utilitaire "locate", vous ne trouverez pas sysctl.conf.orig.

# locate sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

La raison en est qu'après la création de sysctl.conf.orig, la base de données sur laquelle l'utilitaire de localisation fonctionne n'est pas mise à jour. Mettons donc à jour la base de données à l'aide de la commande "updatedb" et réexécutons locate :

$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

Veuillez noter que la mise à jour de la base de données doit être exécutée en tant que root.

# updatedb

Après la mise à jourb, si vous exécutez locate, vous trouverez le fichier sysctl.conf.orig.

# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.orig
/usr/share/man/man5/sysctl.conf.5.gz

4. Modifier l'emplacement de la base de données mlocate

La base de données par défaut lue par l'utilitaire de localisation est /var/lib/mlocate/mlocate.db, mais si vous souhaitez lier la commande de localisation à une autre base de données conservée à un autre emplacement, utilisez l'option -d.

Par exemple :

$ locate -d <new db path> <filename>

Notez que le chemin de la base de données peut également être extrait de stdin et si un chemin vide est mentionné, la base de données par défaut est sélectionnée.

5. Vérifier l'existence du fichier

Supposons maintenant que le fichier sysctl.conf.orig que nous avons créé dans l'exemple 3 ci-dessus soit supprimé, et si vous essayez de localiser sysctl.conf, il affichera toujours le fichier sysctl.conf.orig.

# cd /etc
# rm sysctl.conf.orig

# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.orig
/usr/share/man/man5/sysctl.conf.5.gz

Comme vous le voyez dans la sortie ci-dessus, la commande locate affiche sysctl.conf.orig même après la suppression du fichier. Ce résultat est trompeur.

Bien sûr, vous pouvez exécuter updatedb et réessayer de localiser, ce qui affichera des résultats corrects.

Ou, vous pouvez simplement utiliser 'locate -e', qui n'affichera que les fichiers qui existent dans le système, lorsque vous exécutez la commande de localisation. c'est-à-dire que même lorsque le fichier existe dans mlocate.db, il vérifiera toujours pour s'assurer que le fichier est physiquement présent dans le système avant de l'afficher.

# locate -e sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

6. Ignorer la casse dans la sortie de localisation

La commande de localisation par défaut est configurée pour accepter le nom de fichier en respectant la casse. Afin de rendre les résultats insensibles à la casse, nous pouvons utiliser l'option -i :

Dans l'exemple suivant, nous avons créé deux fichiers avec des minuscules et des majuscules.

# cd /tmp
# touch new.txt NEW.txt

# updatedb

Si vous utilisez la commande de localisation uniquement avec les minuscules, elle ne trouvera que le fichier en minuscules.

# locate new.txt
/tmp/new.txt

Utilisez locate -i, qui ignorera la casse, et cherchera les fichiers en minuscules et en majuscules.

$ locate -i new.txt
/tmp/NEW.txt
/tmp/new.txt
/usr/share/doc/samba-common/WHATSNEW.txt.gz

7. Restreindre la sortie de localisation

Dans l'exemple suivant, la commande de localisation a affiché plusieurs entrées.

$ locate passwd
/etc/passwd
/etc/passwd-
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/security/opasswd
/etc/vsftpd/passwd
/lib64/security/pam_unix_passwd.so
/usr/bin/gpasswd
/usr/bin/htpasswd
/usr/bin/ldappasswd
/usr/bin/mksmbpasswd.sh
/usr/bin/passwd
..

Si vous souhaitez afficher uniquement un certain nombre d'enregistrements, utilisez l'option locate -l et spécifiez le nombre d'enregistrements que vous souhaitez voir dans la sortie de la commande locate.

Par exemple, ce qui suit n'affiche que 5 enregistrements (même lorsque la commande de localisation trouve plusieurs enregistrements..)

$ locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/security/opasswd

Rechercher des exemples de commandes

Comme vous le voyez, les exemples de commandes de localisation sont assez simples à utiliser. Cependant, pour obtenir une sortie fiable et pour effectuer des opérations de recherche complexes, vous devez également savoir utiliser efficacement la commande find.

  • Maman, je l'ai trouvé ! - 15 exemples pratiques de commande de recherche Linux
  • Papa, j'ai trouvé !, 15 exemples de commandes de recherche Linux géniaux (Partie 2)

Linux
  1. Commande Linux Cat :utilisation et exemples

  2. Commandes Linux - Présentation et exemples

  3. 5 exemples pratiques de la commande dd sous Linux

  4. 10 exemples pratiques de commandes Linux nm

  5. localiser des exemples de commandes sous Linux

12 exemples pratiques d'In Command sous Linux

16 exemples pratiques et utiles de la commande Echo sous Linux

15 exemples pratiques de commande Rsync sous Linux

5 exemples pratiques de la commande Tail sous Linux

commande echo sous Linux :7 exemples pratiques

Commande Ping pratique dans des exemples Linux