Autant j'aime Oli (ce qui est beaucoup!) Je suis en désaccord avec lui sur la find
commande. 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 find
tout 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 grep
de 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 updatedb
commande 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 find
3+ 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 updatedb
sont exécutées et la locate
base de données de commandes est presque toujours à jour.
Mais il n'y a pas d'attributs?
Vous pouvez diriger la locate
sortie 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 find
commande doit parcourir toute la structure de répertoires pour rechercher des fichiers. La locate
commande possède sa propre base de données qui lui donne une vitesse de l'éclair en comparaison.