C'est toujours une expérience enrichissante lorsqu'un administrateur réseau nous assiste pour faire des manipulations sur un serveur Linux. J'apprends quelque chose de nouveau à tout coup. Enthousiaste de Linux, je suis loin d'être un expert. Lentement, je découvre le système d'exploitation et j'apprends à maîtriser mon environnement, une étape à la fois. Comme on dit qu'il n'y a pas de question stupide, j'en profite pour les poser à ces experts pour qui Linux n'a plus de secrets.
À partir de Windows, j'étais connecté à un serveur Linux avec Putty et il m'a demandé de chercher un fichier par son nom. Intuitivement, j'ai entré quelque chose comme ceci (recherche à partir de la racine /) :
find / -name 'php.ini'
C'est là qu'il m'a arrêté pour me suggérer l'utilisation de la commande locate, qui est plus rapide. Ok, mais pourquoi ? Je ne veux pas l'utiliser sans avoir compris en quoi locate est mieux que find dans cette situation.
Il m'explique que locate utilise un index maintenu à l'interne. Si un fichier est nouvellement ajouté, il ne sera peut-être pas répertorité immédiatement (un cron permet de réindexer les fichiers de façon périodique, par exemple quotidiennement). Mais pour un fichier plus vieux, il le trouvera plus rapidement. Dans le pire des cas, si le fichier n'est pas trouvé avec locate, on pourra se rabattre sur la commande find qui le trouvera. Cette dernière est plus puissante et possède plus d'options mais demeure plus lente.
Donc je me suis réessayé en entrant :
locate php.ini
Le résultat est apparu instantanément. Le soir même, chez moi, j'ai cherché à en savoir plus sur locate et son indexation. Sur le bureau d'Ubuntu, j'ai créé un fichier nommé "youppi". Immédiatement après, j'ai tenté de le chercher par locate : aucun résultat.
À quel moment l'indexation a lieu ? Comment repartir manuellement le processus d'indexation en cas de besoin ?
En fouillant un peu, j'ai trouvé que le processus s'appelle updatedb et se trouve dans /usr/bin/updatedb. Si je l'exécute, le nouveau fichier sera indexé pour les recherches ultérieures :
sudo updatedb
Ensuite :
locate youppi
Résultat:
/home/code18/Desktop/youppi
Autrement, je peux patienter lors de la prochaine indexation automatique. Ceci se fait à partir d'un cron job où on peut voir l'appel dans /etc/cron.daily/mlocate. Selon ce que j'en lis, mlocate est la nouvelle implémentation de locate (où "m" est pour merging, qui utilise la même base de données d'updatedb). En jetant un coup d'oeil à l'aide (locate -h), j'ai été étonné de voir que les implémentations de locate et mlocate sur Ubuntu avaient été développées par RedHat ou du moins un contributeur qui y travaille.
dimanche 18 juillet 2010
0 réponse à "Linux : pourquoi locate est plus rapide que find"
S'abonner à :
Publier des commentaires (Atom)