Por mucho que me guste Oli (¡lo cual es mucho!) No estoy de acuerdo con él en el find
comando. 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 find
buscar 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 grep
buscar 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 updatedb
comando 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 find
los más de 3 minutos del comando.
He actualizado mi sudo crontab -e
para 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 updatedb
se ejecuta cada cinco minutos y la locate
base de datos de comandos está casi siempre actualizada.
Pero no hay atributos?
Puede canalizar la locate
salida 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 find
comando necesita atravesar toda la estructura del directorio para encontrar archivos. El locate
comando tiene su propia base de datos que le da la velocidad del rayo en comparación.