Autant j'aime Oli (ce qui est beaucoup!) Je suis en désaccord avec lui sur la findcommande. Je n'aime pas ça.
find la commande prend plus de trois minutes
Prenons par exemple cette simple commande:
$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
(... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
real 3m40.589s
user 0m4.156s
sys 0m8.874s
Il faut plus de trois minutes pour findtout rechercher à partir de /. Par défaut, des tonnes de messages d'erreur apparaissent et vous devez les parcourir pour trouver ce que vous recherchez. Il vaut quand même mieux que grepde rechercher dans le lecteur entier une chaîne qui prend 53 heures : `grep`s tous les fichiers pour une chaîne prend beaucoup de temps
Je sais que je peux jouer avec les paramètres de la commande find pour la faire fonctionner mieux, mais le point ici est le temps qu'il faut pour s'exécuter.
locate la commande prend moins d'une seconde
Utilisons maintenant locate:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
La commande de localisation prend moins d'une seconde!
updatedb ne fonctionne qu'une fois par jour par défaut
Il est vrai que la updatedbcommande qui met à jour la base de données de localisation n'est exécutée qu'une fois par jour par défaut. Vous pouvez l'exécuter manuellement avant de rechercher les fichiers que vous venez d'ajouter en utilisant:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
Bien que cela prenne 3 secondes, c'est petit par rapport aux find3+ minutes de la commande.
J'ai mis sudo crontab -eà jour mon pour inclure la ligne en bas:
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
Maintenant, toutes les cinq minutes updatedbsont exécutées et la locatebase de données de commandes est presque toujours à jour.
Mais il n'y a pas d'attributs?
Vous pouvez diriger la locatesortie vers d'autres commandes. Si, par exemple, vous voulez les attributs de fichier, vous pouvez utiliser:
$ locate mail-transport-agent.target | xargs stat
File: '/lib/systemd/system/mail-transport-agent.target'
Size: 473 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 667460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
Birth: -
Sommaire
J'ai posté cette réponse pour montrer la vitesse et la facilité d'utilisation de locate. J'ai essayé de corriger certains des défauts de commande signalés par d'autres.
La findcommande doit parcourir toute la structure de répertoires pour rechercher des fichiers. La locatecommande possède sa propre base de données qui lui donne une vitesse de l'éclair en comparaison.