¿Cómo funciona la búsqueda de un archivo (localizar) o el autocompletado?

8

Soy un usuario de Windows y vengo de Windows con toda la indexación y los tiempos de espera eternos al buscar archivos, me resulta sorprendente lo rápido que funciona el trabajo de localización o el autocompletado (que sé) en Linux.

¿Se está realizando alguna indexación en segundo plano o cómo se logra esto? Todavía tengo una instalación bastante limpia, así que tal vez esto va mal con el tiempo, pero en Windows en el momento en que desea buscar en una carpeta que no está indexada, debe esperar unos segundos.

oli206
fuente

Respuestas:

18

Me resulta sorprendente lo rápido que funciona el trabajo de localización o el autocompletado (que sé) en Linux. ... ¿Se realiza alguna indexación en segundo plano o cómo se logra?

Esto es en realidad dos preguntas completamente distintas.

locateusa un índice (slocate lo almacena /var/lib/slocate/), que se actualiza mediante un crontrabajo nocturno . Este trabajo nocturno generalmente se ejecuta a aproximadamente 1 o 2 a.m. a la hora local, y escanea completamente todo el sistema (incluidas todas las unidades conectadas). El índice resultante es simplemente una lista de nombres de archivo.

El autocompletado es manejado por su shell. La mayoría de los sistemas usan bash, también lo bash-completiones la colección de scripts que administran cómo funciona esto. ( zshtiene una colección con un nombre similar, y la mayoría de los otros shells tienen alguna forma de finalización incorporada). Cuando Tabse presiona, el shell ejecuta un script que decide, según lo que ya ha escrito, qué necesita exactamente. a completar. Luego, el script genera una lista de posibles finalizaciones, que puede ser o no la lista de archivos en el directorio actual, o la lista de archivos ejecutables en su $PATH. El locatecomando normalmente no se usa para esto.

Greyfade
fuente
1
¡Gracias! Ya veo, así que no es tan "mágico" :)
oli206 10/10/10
greyfade ha arruinado la magia para siempre -_-
Michael Mrozek
@Michael Mrozek: Lo siento. :(
greyfade
El shell ejecuta un script que no suena 100% correcto, cuando se implementa un shell, las personas no deben equivocarse al pensar que deberían escribir scripts externos. Es simplemente una rutina en el propio código, puede o no acceder a archivos externos para la conveniencia de la configuración, pero la terminación integrada simple funciona bien.
Aki
1
@NabinKhadka Dado que mi respuesta fue escrita, creo que Ubuntu cambió a otro locateservicio. No sé cuál, no uso Ubuntu, pero me viene a la mente mlocate. Compruebe /etc/updatedb.conf. Puede tener la ruta predeterminada para cualquier locateherramienta que tenga.
greyfade
5

Por lo general, localizar utiliza un índice que se genera una vez al día a través de un trabajo cron (/etc/cron.daily/mlocate en mi sistema, por ejemplo). No hace nada lujoso, básicamente un recorrido completo del sistema de archivos con algunas optimizaciones y la construcción de la estructura de datos de índice.

Los shells usan probablemente algo de caché interno para completar el comando, pero no usan un archivo de índice global. Además, por lo general, los núcleos de Unix mantienen una memoria caché de dentry, es decir, almacenan en caché la información del directorio de archivos utilizada por las listas de directorios, etc.

maxschlepzig
fuente