NOM
locatedb - Bases de données incrémentales de noms de fichiers
Cette page de manuel documente le format des bases de noms de fichiers
de la version GNU de locate. Les bases de données de noms de fichiers
contiennent des listes de fichiers qui étaient dans des arborescences
de répertoires particulières lors de la dernière mise à jour des bases
de données.
Il est possible d’avoir plusieurs bases de données. Les utilisateurs
peuvent sélectionner la base de données de recherche en utilisant une
variable d’environnement ou une option en ligne de commande ; consultez
locate(1). L’administrateur système peut choisir le nom du fichier de
la base de données par défaut, la fréquence des mises à jour et les
répertoires à référencer. Normalement, les bases de noms de fichiers
sont mises à jour en exécutant updatedb périodiquement, typiquement
chaque nuit ; consultez updatedb(1).
Le format de base de données du LOCATE02 du GNU.
C’est le format par défaut des bases de données générées par updatedb.
updatedb exécute un programme appelé frcode afin de compresser la liste
des noms de fichier en utilisant «\ front-compression\ » qui réduit la
taille de la base de données d’un facteur 4 à 5. «\ Front-compression\
» (aussi connu sous le nom d’« encodeur incrémental ») travaille comme
suit.
Les éléments de la base de données sont triés (sans distinction des
minuscules et des majuscules pour la convenance des utilisateurs).
Puisque la liste est triée, chaque entrée partage probablement un
préfixe (début du nom de fichier) avec l’entrée précédente. Chaque
entrée de la base de données débute avec un octet de compteur de
décalage différentiel, composé du nombre de caractères supplémentaires
à ajouter par rapport au préfixe de l’entrée précédente qui n’étaient
pas déjà partagés avec le prédécesseur. (Les compteurs peuvent être
négatifs). Après le compteur, on trouve le reste de la chaîne ASCII
terminée par un caractère nul, à savoir la partie du nom qui suit le
préfixe partagé.
Si le compteur de décalage différentiel est plus grand que la valeur
d’un octet (+/- 127), l’octet prend la valeur 0x80 (en binaire
10000000) et le compteur qui suit est un mot de 2 octets avec le poids
fort en premier (ordre des octets réseau). Ce compteur peut aussi être
négatif (le signe moins apparaissant dans le premier des deux octets).
Toute base de données débute avec une entrée factice d’un fichier
appelé « LOCATE02 » que locate vérifie pour s’assurer que la base de
données de fichiers se trouve dans un format correct ; il ignore cette
entrée pendant les recherches.
Les bases de données ne peuvent pas être concaténées ensemble même si
la première entrée (factice) est enlevée de toutes les bases de données
sauf pour la première. Cela est dû au compteur de décalage différentiel
de la première entrée de la seconde base de données et des suivantes
qui serait alors erroné.
A l’avenir, les données contenues dans la base de données de locate
pourraient ne plus être ordonnées d’une quelconque façon. L’obtention
de données triées nécessitera l’utilisation d’un tube vers sort -f.
format de la base de données slocate
Le programme slocate utilise un format de données proche de celui du
locate du GNU, quoique légèrement différent. Le premier octet de la
base de données indique le niveau de scurit. Si ce niveau de sécurité
est à 0, slocate lira, cherchera, et affichera les noms des fichiers
d’après les informations contenues dans la base. Toutefois, si le
niveau de sécurité est à 1, slocate fera disparaître de sa sortie les
données auxquelles l’utilisateur ne peut accéder réellement. Le second
octet de la base de données est zéro. Ce second octet est suivi par la
première valeur contenue dans la base de données. Cette première entrée
n’est précédée par aucun compteur de décalage, ni donnée fantôme. En
fait, le compteur de décalage différentiel de la première entrée vaut
zéro.
À partir de la deuxième donnée (si elle existe), la base de données est
interprétée comme le format LOCATE02 du GNU.
Format de l’ancienne base de données Locate
Un ancien format de base de données est également utilisé par les
programmes Unix locate et find et leurs premières versions GNU.
updatedb exécute des programmes appelés bigram et code pour créer les
bases de données dans l’ancien format. L’ancien format diffère de la
description ci-dessus de la façon suivante. Au lieu que chaque entrée
commence avec un octet de compteur de décalage différentiel et finisse
avec un octet nul, les valeurs d’octets comprises entre 0 et 28
indiquent un compteur de décalage différentiel compris entre -14 et 14.
L’octet, indiquant qu’un compteur de décalage différentiel long suit,
est 0x1e (30) et non 0x80. Les compteurs longs sont ordonnés selon
l’hôte, qui n’est pas forcément l’ordre des octets réseau et selon la
taille des mots entier de l’hôte qui est habituellement de 4 octets.
Ils représentent un compteur dont leurs valeurs sont soustraites de 14.
Les lignes de la base de données ne possèdent pas d’octet de
terminaison ; le début de la ligne suivante est indiqué par le premier
octet de valeur <= 30.
En plus, au lieu de débuter avec une entrée factice, l’ancien format
des bases de données débute avec une liste de 256 octets contenant les
128 «bigrams » les plus fréquents de la liste de fichiers. Un
« bigram » est une paire d’octets contiguë. Les octets dans la base de
données qui ont le bit de poids fort à 1 sont indexés (avec le bit de
poids fort à 0) dans la table de « bigrams ». Le « bigram » et le
codage du compteur de décalage différentiel fait que ces bases de
données sont 20 à 25 % plus petites que celles du nouveau format mais
elles ne sont pas dans un format 8 bits classique. Tout octet dans un
nom de fichier qui est dans l’intervalle utilisé par les codes spéciaux
est remplacé dans la base de données par un « ? » qui, ce n’est pas une
coïncidence, est le caractère spécial de l’interpréteur de commande
pour la correspondance d’un seul caractère.
EXEMPLE
Entrées de frcode :
/usr/src
/usr/src/cmd/aardvark.c
/usr/src/cmd/armadillo.c
/usr/tmp/zoo
Longueur du plus long préfixe de l’entrée précédente à partager :
0 /usr/src
8 /cmd/aardvark.c
14 rmadillo.c
5 tmp/zoo
Sortie de frcode avec les caractères nuls restant changés en caractères
saut de ligne et les octets de compteurs rendus affichables :
0 LOCATE02
0 /usr/src
8 /cmd/aardvark.c
6 rmadillo.c
-9 tmp/zoo
(6 = 14 - 8 et -9 = 5 - 14)
VOIR AUSSI
find(1), locate(1), locatedb(5), xargs(1), Finding Files (en ligne avec
info ou en version imprimée)
BOGUES
La meilleure façon de signaler un bogue est d’utiliser le formulaire à
l’adresse http://savannah.gnu.org/bugs/?group=findutils. L’utilité de
cette page est que vous serez en mesure de suivre l’évolution de la
correction du problème. D’autres commentaires à propos de locate et du
paquet findutils peuvent être envoyés à la liste de diffusion
bug-findutils. Pour s’abonner à cette liste, envoyez un courriel à
bug-findutils-request@gnu.org.
TRADUCTION
Cette page de manuel a été traduite et est maintenue depuis 2006 par
Sylvain Cherrier <sylvain DOT cherrier AT free DOT fr> et les membres
de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez
signaler toute erreur de traduction par un rapport de bogue sur le
paquet manpages-fr-extra.