Pourquoi le programme `updatedb` s'exécute-t-il si vite?

22

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?

hugomg
la source

Réponses:

22

La réponse dépend de la version de locatevous utilisez, mais il y a une chance équitable , il est mlocate, qui updatedbfonctionne 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 ctimeou mtime, selon le plus récent.)

Comme la plupart des implémentations de updatedb, mlocates 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 mlocatele cas de, mais les distributions fournissent généralement une base updatedb.confqui 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 updatedbest configuré de la même manière ).

Stephen Kitt
la source
Assez bonne question et réponse, ne savait même pas qu'il y avait des scans "différentiels".
Rui F Ribeiro
1
Merci! Je n'avais jamais remarqué que la modification d'un fichier modifiait également le ctime et le mtime de tous ses répertoires parents.
hugomg
4
@hugomg Je ne pense pas que ce soit le cas. Il ne devrait changer que le mtimeparent immédiat.
Kusalananda
Donc, si je comprends bien, se mlocatesoucie ctimeet mtimece 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 ?
Sergiy Kolodyazhnyy
@Sergiy: Bien sûr. locaten'est pas grep -R. Il ne lit pas le contenu du fichier.
Kevin
9

En plus de vérifier les temps de modification, mlocateignore é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 ):

  • Lier les montures
  • Certains types de systèmes de fichiers (9p, afs, bdev, etc.)
  • Bases de données du référentiel VCS (.git, .hg, etc.)
  • Certains répertoires codés en dur (/ media, / tmp, / var / spool / cups, etc.).
hugomg
la source
Ce n'est cependant pas le cas par défaut, donc le comportement de base dépend de la distribution utilisée. (D'autres updatedbimplémentations prennent également en charge les exclusions configurées.)
Stephen Kitt
Effectivement. Je décrivais les valeurs par défaut de Fedora.
hugomg