Por lo general, cuando tengo programas que realizan un análisis completo del disco y revisan todos los archivos del sistema, tardan mucho tiempo en ejecutarse. ¿Por qué updatedb se ejecuta tan rápido en comparación?
fuente
Por lo general, cuando tengo programas que realizan un análisis completo del disco y revisan todos los archivos del sistema, tardan mucho tiempo en ejecutarse. ¿Por qué updatedb se ejecuta tan rápido en comparación?
La respuesta depende de la versión de locate
que está utilizando, pero hay una buena posibilidad es mlocate
, cuyaupdatedb
carreras rápidamente evitando hacer exploraciones de disco completo:
mlocate es una implementación de localizar / actualizadob. La 'm' significa "fusión": updatedb reutiliza la base de datos existente para evitar volver a leer la mayor parte del sistema de archivos, lo que hace que updatedb sea más rápido y no destruye tanto el caché del sistema.
(La base de datos almacena la marca de tiempo de cada directorio, ctime
o la mtime
que sea más nueva).
Como la mayoría de las implementaciones de updatedb
, mlocate
's también omitirá los sistemas de archivos y las rutas que está configurado para ignorar. Por defecto no hay ninguno en mlocate
el caso 's, pero las distribuciones suelen proporcionar un básico updatedb.conf
que ignora los sistemas de archivos en red, sistemas de archivos virtuales, etc. (véase el archivo de configuración de Debian , por ejemplo, lo que es una práctica estándar en Debian, por lo GNU de updatedb
está configurado de manera similar ).
mtime
de su padre inmediato.mlocate
importactime
y lomtime
que implica que solo le importa si la lista de entradas del directorio sigue siendo la misma (sin archivos eliminados o agregados), lo que significa que no le importan los archivos reales. Es eso correcto ?locate
no esgrep -R
. No lee el contenido del archivo.Además de verificar los tiempos de modificación,
mlocate
también ignora ciertos subárboles del sistema de archivos que tienen muchos archivos poco interesantes o potencialmente duplicados, como se especifica en /etc/updatedb.conf (y se describe en man updatedb.conf ):fuente
updatedb
implementaciones también admiten exclusiones configuradas.)