Comment fonctionne la recherche d'un fichier (localisation) ou la saisie semi-automatique?

8

Je suis un utilisateur Windows et venant de Windows avec tous les temps d'attente d'indexation et éternels lors de la recherche de fichiers, je trouve surprenant la rapidité avec laquelle le travail de localisation ou la saisie semi-automatique (que je connais) fonctionne sous Linux.

Y a-t-il une indexation en arrière-plan ou comment cela est-il réalisé? J'ai toujours une installation assez propre, alors peut-être que cela va mal avec le temps, mais dans Windows, au moment où vous voulez rechercher un dossier qui n'est pas indexé, vous devez attendre quelques secondes.

oli206
la source

Réponses:

18

Je trouve surprenant la rapidité avec laquelle le travail de localisation ou la saisie semi-automatique (que je connais) fonctionne sous Linux. ... Y a-t-il une indexation en arrière-plan ou comment cela est-il réalisé?

Il s'agit en fait de deux questions complètement distinctes.

locateutilise un index (slocate le stocke /var/lib/slocate/), qui est mis à jour par un crontravail nocturne . Ce travail de nuit s'exécute généralement à environ 1 ou 2 heures du matin, et analyse complètement votre système entier (y compris tous les lecteurs connectés). L'index résultant est simplement une liste de noms de fichiers.

La saisie semi-automatique est gérée par votre shell. La plupart des systèmes utilisent bash, tout bash-completioncomme la collection de scripts qui gère la façon dont cela fonctionne. ( zsha une collection portant le même nom, et la plupart des autres shells ont une forme d'achèvement intégrée.) Lorsque vous Tabappuyez sur, le shell exécute un script qui décide, en fonction de ce que vous avez déjà tapé, de ce qui, exactement, a besoin à compléter. Le script génère ensuite une liste de complétions possibles, qui peut être ou non la liste des fichiers dans le répertoire en cours, ou la liste des fichiers exécutables dans votre $PATH. La locatecommande n'est normalement pas utilisée pour cela.

gris-fondu
la source
1
Merci! Je vois, donc ce n'est pas si "magique" :)
oli206
greyfade a ruiné la magie pour toujours -_-
Michael Mrozek
@Michael Mrozek: Désolé. :(
greyfade
Le shell exécute un script qui n'est pas correct à 100%, lors de la mise en œuvre d'un shell, les gens ne devraient pas se tromper en pensant qu'ils devraient écrire des scripts externes. Il s'agit simplement d'une routine dans le code lui-même, il peut accéder ou non à des fichiers externes pour la commodité de la configuration, mais la complétion intégrée simple fonctionne bien.
Aki
1
@NabinKhadka Depuis que ma réponse a été écrite, je pense qu'Ubuntu est passé à un autre locateservice. Je ne sais pas lequel - je n'utilise pas Ubuntu - mais mlocate me vient à l'esprit. Vérifiez /etc/updatedb.conf. Il peut avoir le chemin par défaut pour n'importe quel locateoutil dont vous disposez.
greyfade
5

Habituellement, Locate utilise un index qui est généré une fois par jour via un cron-job (/etc/cron.daily/mlocate sur mon système par exemple). Il ne fait rien d'extraordinaire, essentiellement une traversée complète du système de fichiers avec quelques optimisations et la construction de la structure des données d'index.

Les shells utilisent probablement une mise en cache interne pour l'exécution des commandes, mais n'utilisent pas de fichier d'index global. De plus, généralement, les noyaux Unix maintiennent en mémoire un cache dentry, c'est-à-dire qu'ils mettent en cache les informations du répertoire de fichiers utilisées par les listes de répertoires, etc.

maxschlepzig
la source