|
LOCATEDB(5L) manual page
Table of Contents
locatedb - base di dati di nomi di file compressa con front
Questa pagina di manuale documenta il formato delle basi di dati di nomi
di file per la versione GNU di locate. Le basi di dati di nomi di file
contengono le liste dei file presenti in particolari directory l'ultima
volta che tali basi di dati sono state aggiornate.
Ci possono essere diverse
basi di dati. Gli utenti possono decidere su quali basi di dati locate
deve fare la ricerca usando una variabile d'ambiente o un'opzione in riga
di comando; si veda locate (1L)
. L'amministratore di sistema può scegliere
il nome di file della base di dati di default, la frequenza con la quale
sono aggiornate le basi di dati, e le directory per le quali queste contengono
informazioni. Solitamente, le basi di dati di nomi di file sono aggiornate
lanciando periodicamente il programma updatedb (tipicamente di notte);
si veda updatedb (1L)
.
updatedb lancia un programma chiamato frcode per
comprimere, usando la compressione front ("front-compression"), le liste
di nomi di file, riducendo in tal modo la dimensione della base di dati
di 4 o 5 volte. La compressione front (nota anche come codifica incrementale
- "incremental encoding") funziona come segue.
Le voci della base di dati
sono una lista ordinata (considerando, per convenienza dell'utente, maiuscole
e minuscole equivalenti). Poiché la lista è ordinata, è probabile che ogni
voce condivida un prefisso (stringa iniziale) con la voce precedente. Ogni
voce della base di dati inizia con un byte di conteggio dell'offset differenziale
("offset-differential count byte"), che è il numero di caratteri del prefisso
della voce precedente da usare, oltre a quelli che tale voce usa dei suoi
predecessori. (Il contatore può essere negativo.) Dopo del contatore c'è
il rimanente ASCII (terminato con un null) -- la parte del nome che segue
il prefisso condiviso.
Se il valore dell'offset differenziale è maggiore
di quanto è immagazzinabile in un byte (+/-127), tale byte sarà posto pari
a 0x80 e il contatore seguirà in una parola di 2 byte, con il byte più
significativo per primo (ordinamento dei byte di rete -"network byte order").
Ogni base di dati inizia con una voce fittizia per il file chiamato `LOCATE02',
che locate controlla per assicurarsi che il formato della base di dati
sia corretto; questa voce è ignorata durante la ricerca.
Le basi di dati
non possono essere concatenate una all'altra, anche se la prima voce (quella
fittizia) è rimossa da tutte tranne che dalla prima. Questo perché il valore
dell'offset differenziale della prima voce della seconda e delle successive
basi di dati sarà errato.
Ciò vale anche per il vecchio formato delle basi
di dati usato dai programmi Unix locate e find e dalle prime release
delle versioni GNU. updatedb lancia i programmi chiamati bigram e code
per produrre le basi di dati nel vecchio formato. Il vecchio formato differisce
dalla descrizione precedente nel seguente modo. Invece di far iniziare
ogni voce con con un byte per il contatore dell'offset differenziale e
farla finire con un null, i valori del byte da 0 a 28 indicano un valore
dell'offset differenziale da -14 a 14. Il valore del byte che indica che
di seguito è presente un contatore dell'offset differenziale lungo è 0x1e
(30), non 0x80. I contatori lunghi sono immagazzinati nell'ordine di byte
della macchina ("host byte order"), che non è necessariamente il network
byte order, e nella dimensione delle parole della macchina, che di solito
è di 4 byte. Questi inoltre rappresentano un numero che è 14 in meno del
loro valore effettivo. Le righe della base di dati non hanno nessun byte
di terminazione; l'inizio della riga successiva è indicato dal primo byte
che ha valore minore o uguale a 30.
Inoltre, invece di cominciare con una
voce fittizia, il vecchio formato delle basi di dati inizia con un tabella
di 256 byte contenente i 128 "bigrammmi" più comuni nella lista dei file.
Un bigrammma ("bigram") è una coppia di byte adiacenti. I byte che nella
base di dati hanno il bit più significativo a 1 sono indicizzati (con
il bit più significativo posto a 0) nella tabella dei bigrammi. I bigrammi
e la codifica dei contatori dell'offset differenziale rendono queste basi
di dati il 20-25% più piccole rispetto a quelle nel nuovo formato, ma fanno
sì che non siano "8-bit clean". Qualsiasi byte che in un nome di file è
nel range usato per i codici speciali viene rimpiazzato nella base di
dati da un punto di domanda, il quale non a caso è il metacarattere della
shell che corrisponde ad un qualsiasi carattere singolo.
Ingresso
a frcode :
/usr/src
/usr/src/cmd/aardvark.c
/usr/src/cmd/armadillo.c
/usr/tmp/zoo
Lunghezza dei prefissi più lunghi condivisi con le voci
precedenti:
0 /usr/src
8 /cmd/aardvark.c
14 rmadillo.c
5 tmp/zoo
Output di frcode , con i null finali cambiati in newline e i byte di
conteggio resi stampabili: 0 LOCATE02
0 /usr/src
8 /cmd/aardvark.c
6
rmadillo.c
-9 tmp/zoo
(6 = 14 - 8, e -9 = 5 - 14)
find (1L)
,
locate (1L)
, locatedb (5L)
, xargs (1L)
Finding Files (Info in linea,
o stampato)
Table of Contents
|