Por mucho que me guste Oli (¡lo cual es mucho!) No estoy de acuerdo con él en el findcomando. No me gusta
find el comando lleva más de tres minutos
Tome por ejemplo este simple comando:
$ 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
Se tarda más de tres minutos para findbuscar todo a partir de /. Por defecto, aparecen montones de mensajes de error y debe buscarlos para encontrar lo que está buscando. Aún así, es mejor que grepbuscar en todo el disco una cadena que demore 53 horas : `grep` todos los archivos para una cadena lleva mucho tiempo
Sé que puedo jugar con los parámetros del comando find para que funcione mejor, pero el punto aquí es la cantidad de tiempo que tarda en ejecutarse.
locate el comando lleva menos de un segundo
Ahora usemos locate:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
¡El comando de localización toma menos de un segundo!
updatedb solo se ejecuta una vez al día de forma predeterminada
Es cierto que el updatedbcomando que actualiza la base de datos de localización solo se ejecuta una vez al día de forma predeterminada. Puede ejecutarlo manualmente antes de buscar los archivos que acaba de agregar usando:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
Aunque esto tomará 3 segundos, es pequeño en comparación con findlos más de 3 minutos del comando.
He actualizado mi sudo crontab -epara incluir la línea en la parte inferior:
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
Ahora updatedbse ejecuta cada cinco minutos y la locatebase de datos de comandos está casi siempre actualizada.
Pero no hay atributos?
Puede canalizar la locatesalida a otros comandos. Si, por ejemplo, desea los atributos de archivo que puede usar:
$ 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: -
Resumen
Publiqué esta respuesta para mostrar la velocidad y facilidad de uso de locate. Traté de abordar algunas de las deficiencias de comando señaladas por otros.
El findcomando necesita atravesar toda la estructura del directorio para encontrar archivos. El locatecomando tiene su propia base de datos que le da la velocidad del rayo en comparación.