LOCATEDB(5)

NOM
locatedb — Base de données de noms de fichier à compression de préfixe

DESCRIPTION
Cette page de manuel documente le format des bases de données de noms de fichier pour la version GNU de locate(1). Les bases de données de noms de fichier contiennent des listes de fichiers qui se trouvaient dans des arborescences particulières de répertoires la dernière fois que les bases de données ont été mises à jour.

Il peut y avoir plusieurs bases de données. Les utilisateurs peuvent sélectionner les bases de données dans lesquelles locate(1) effectuera ses recherches en utilisant une variable d’environnement ou une option de ligne de commande ; voir locate(1). L’administrateur système peut choisir le nom de fichier de la base de données par défaut, la périodicité de mise à jour des bases de données et les répertoires pour lesquels elles contiendront des enregistrements. Normalement, les bases de données de noms de fichier sont mises à jour en exécutant le programme updatedb(1) périodiquement, en général pendant la nuit ; voir updatedb(1).

Format de base de données GNU LOCATE02
C’est le format par défaut des bases de données produites par updatedb(1). Le programme updatedb(1) exécute frcode pour compresser la liste de noms de fichiers en utilisant la compression de préfixe qui permet de réduire la taille de la base de données d’un facteur 4 à 5. La compression de préfixe (connue aussi sous le nom de « codage incrémental ») fonctionne de la façon suivante :

Les enregistrements de la base de données constituent une liste triée (sans tenir compte de la casse, pour le confort de l’utilisateur). Comme la liste est triée, chaque enregistrement est susceptible de partager un préfixe (une chaîne à partir du début de l’enregistrement) avec l’enregistrement précédent. Chaque enregistrement de la base de données commence par un décompte sur un octet signé représentant une différence de décalage correspondant au nombre de caractères supplémentaires du préfixe de l’enregistrement précédent à utiliser au delà du décompte que l’enregistrement précédent utilise de son prédécesseur (ce décompte peut être négatif). Le décompte est suivi d’une chaîne en ASCII terminée par un caractère NULL — la partie du nom qui suit le préfixe partagé.

Si le décompte de la différence de décalage est supérieur à la valeur maximale qui peut être stockée dans un octet signé (±127), l’octet contiendra la valeur 0x80 (10000000 en binaire) et le vrai décompte suivra dans un mot sur 2 octets, avec l’octet de poids le plus fort en premier (l’ordre des octets du réseau). Ce décompte peut aussi être négatif (le bit de signe se trouvant dans le premier des deux octets).

Toute base de données commence par un enregistrement factice pour un fichier nommé « LOCATE02 » que locate(1) vérifie pour s’assurer que le fichier de la base de données possède bien le format correct ; cet enregistrement est ignoré lors d’une recherche.

Plusieurs bases de données ne peuvent pas être concaténées, même si le premier (faux) enregistrement est supprimé dans toutes les bases de données, sauf la première d’entre elles. Cela est dû au fait que les décomptes de la différence de décalage dans le premier enregistrement de la deuxième base de données et des suivantes seraient faux.

Dans le futur, les données de la base de données de locate(1) pourront ne pas être triées selon un ordre particulier. Pour obtenir un résultat trié, il faudra alors transmettre la sortie à la commande sort -f à l’aide d’un tube.

Format de base de données de slocate(1)
Le programme slocate(1) utilise un format de base de données similaire à celui de GNU locate(1), mais légèrement différent. Le premier octet de la base de données indique son niveau de sécurité. Si le niveau de sécurité est 0, slocate(1) va lire, comparer et afficher les noms de fichiers issus des informations brutes de la base de données. Si le niveau de sécurité est 1, slocate(1) n’affichera pas sur sa sortie les enregistrements correspondant à des fichiers auxquels l’utilisateur demandeur n’a pas accès. Le second octet de la base de données est égal à 0. Ce second octet est suivi du premier enregistrement de la base de données. Ce dernier n’est précédé d’aucun décompte de différence de décalage et d’aucun enregistrement factice. Le décompte de différence de décalage pour le premier enregistrement est défini implicitement à 0.

À partir du deuxième enregistrement de la base de données (s’il y en a un), les données sont interprétées de la même façon qu’avec le format GNU LOCATE02.

Ancien format de base de données de locate(1)
Il existe aussi un ancien format de base de données utilisé par les programmes locate(1) et find(1) dans leurs versions GNU plus anciennes. Pour produire ces bases de données à l’ancien format, updatedb(1) exécute les programmes bigram et code. Cet ancien format se distingue des formats précédents par les différences suivantes : les enregistrements ne se terminent pas par un caractère NULL et leur premier octet ne contient pas un décompte de différence de décalage ; les valeurs de ce premier octet, de 0 à 28, correspondent à un décompte de différence de décalage de -14 à 14. La valeur d’octet indiquant qu’un décompte de différence de décalage long suit est 0x1e (30), au lieu de 0x80. Les décomptes longs sont stockés dans l’ordre des octets de la machine utilisée qui ne correspond pas forcément à celui du réseau, et sous la forme d’entiers de la taille du mot sur la machine utilisée, en général 4 octets. En outre, ils représentent un décompte inférieur à leur valeur de 14. Les enregistrements de la base de données n’ont pas de caractère de terminaison ; le début d’une nouvelle ligne est indiqué par un octet dont la valeur est inférieure ou égale à 30.

De plus, au lieu de commencer par un enregistrement factice, l’ancien format de base de données commence par un tableau de 256 octets contenant les 128 bigrammes les plus courants dans la liste de fichiers. Un bigramme est une paire d’octets adjacents. Les octets de la base de données dont le bit de poids fort est positionné sont des indices (avec le bit de poids fort non positionné) dans le tableau de bigrammes. L’encodage des bigrammes et des décomptes de différence de décalage fait que la taille de ces bases de données est 20–25 % inférieure à celle du nouveau format, mais il ne gère pas les caractères sur 8 bits. Dans un nom de fichier, tout octet situé dans la gamme de codage étendue (d’une valeur supérieure à 127) sera remplacé par un point d’interrogation dans la base de données qui, et ce n’est pas une coïncidence, est le caractère générique de l’interpréteur de commande remplaçant tout caractère unique.

EXEMPLE

Entrée de frcode :
/usr/src
/usr/src/cmd/aardvark.c
/usr/src/cmd/armadillo.c
/usr/tmp/zoo

Taille du plus grand préfixe à partager avec l’enregistrement précédent :
0 /usr/src
8 /cmd/aardvark.c
14 rmadillo.c
5 tmp/zoo

Sortie de frcode avec les caractères NULL finals remplacés par des caractères nouvelle ligne et les décomptes d’octets rendus imprimables :
0 LOCATE02
0 /usr/src
8 /cmd/aardvark.c
6 rmadillo.c
-9 tmp/zoo

(6 = 14 - 8, et -9 = 5 - 14)

SIGNALER DES BOGUES
Aide en ligne de GNU findutils : <https://www.gnu.org/software/findutils/#get-help>
Signaler toute erreur de traduction à <https://translationproject.org/team/fr.html>

Signaler tout autre problème à l’aide du formulaire de suivi des bogues de GNU Savannah :
    <https://savannah.gnu.org/bugs/?group=findutils>
Des sujets généraux à propos du paquet GNU findutils font l’objet de discussions sur la liste de diffusion bug-findutils :
    <https://lists.gnu.org/mailman/listinfo/bug-findutils>

COPYRIGHT
Copyright © 1994–2024 Free Software Foundation, Inc. Licence GPLv3+ : GNU GPL version 3 ou ultérieure <https://gnu.org/licenses/gpl.html>.
Ce programme est un logiciel libre. Vous pouvez le modifier et le redistribuer. Il n'y a AUCUNE GARANTIE dans la mesure autorisée par la loi.

VOIR AUSSI
find(1), locate(1), xargs(1), locatedb(5)

La documentation complète : <https://www.gnu.org/software/findutils/locatedb>
ou disponible en local à l’aide de : info locatedb

TRADUCTION
La traduction française de cette page de manuel a été créée par Lucien Gentis <lucien.gentis@univ-lorraine.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.