Habituellement, lorsque j'ai des programmes qui effectuent une analyse complète du disque et parcourent tous les fichiers du système, leur exécution prend beaucoup de temps. Pourquoi updateb fonctionne-t-il si vite en comparaison?
la source
Habituellement, lorsque j'ai des programmes qui effectuent une analyse complète du disque et parcourent tous les fichiers du système, leur exécution prend beaucoup de temps. Pourquoi updateb fonctionne-t-il si vite en comparaison?
La réponse dépend de la version de locate
vous utilisez, mais il y a une chance équitable , il est mlocate
, qui updatedb
fonctionne rapidement en évitant de faire des scans de disques:
mlocate est une implémentation de localisation / mise à jourb. Le «m» signifie «fusion»: updatedb réutilise la base de données existante pour éviter de relire la majeure partie du système de fichiers, ce qui accélère la mise à jourb et n'élimine pas autant les caches du système.
(La base de données stocke l'horodatage de chaque répertoire ctime
ou mtime
, selon le plus récent.)
Comme la plupart des implémentations de updatedb
, mlocate
s ignorera également les systèmes de fichiers et les chemins d'accès qu'il est configuré pour ignorer. Par défaut, il n'y en a pas dans mlocate
le cas de, mais les distributions fournissent généralement une base updatedb.conf
qui ignore les systèmes de fichiers en réseau, les systèmes de fichiers virtuels, etc. (voir le fichier de configuration de Debian par exemple; c'est une pratique standard dans Debian, donc GNU updatedb
est configuré de la même manière ).
mtime
parent immédiat.mlocate
souciectime
etmtime
ce qui implique qu'il se soucie uniquement de savoir si la liste des entrées de répertoire est toujours la même (pas de fichiers supprimés ou ajoutés), ce qui signifie qu'il ne se soucie pas des fichiers réels eux-mêmes. Est-ce exact ?locate
n'est pasgrep -R
. Il ne lit pas le contenu du fichier.En plus de vérifier les temps de modification,
mlocate
ignore également certains sous-arbres du système de fichiers qui contiennent de nombreux fichiers inintéressants ou potentiellement dupliqués, comme spécifié dans /etc/updatedb.conf (et décrit dans man updatedb.conf ):la source
updatedb
implémentations prennent également en charge les exclusions configurées.)