Provided by:
manpages-it_0.3.4-5_all 
NOME
locatedb - base di dati di nomi di file compressa con front
DESCRIZIONE
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.
ESEMPIO
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)
VEDERE ANCHE
find(1L), locate(1L), locatedb(5L), xargs(1L) Finding Files (Info in
linea, o stampato)
LOCATEDB(5L)