Provided by:
manpages-pl_20051117-1_all 
NAZWA
locatedb - bazy nazw plików z kompresją początków
OPIS
Ta strona podręcznika opisuje format baz danych nazw plików dla locate
w wersji GNU.
Bazy nazw plików zawierają listy plików, istniejących w szczególnych
drzewach katalogów w momencie ostatniej aktualizacji baz.
Może istnieć wiele baz danych nazw plików. Użytkownicy mogą wybrać
bazy, które przeszukuje locate, posługując się zmienną środowiskową lub
opcją wiersza poleceń; zobacz locate(1L). Administrator systemu może
wybrać częstość, z jaką aktualizowane są bazy, oraz katalogi, dla
których zawierają zapisy. Normalnie bazy nazw plików zaktualizowane są
przez okresowe uruchamianie programu updatedb, zwykle nocą; zobacz
updatedb(1L).
updatedb uruchamia program o nazwie frcode kompresujący listę nazw
plików przy użyciu front-compression [kompresji początków], redukującej
rozmiar bazy danych 4 do 5-krotnie. Front-compression (znana również
jako incremental encoding [kodowanie przyrostowe]) działa według
następujących zasad.
Pozycje w bazie danych stanowią posortowaną listę (dla wygody
użytkowników nie rozróżniającymi wielkości znaków). Ponieważ lista jest
posortowana, prawdopodobnie każda z jej pozycji posiada wspólny
przedrostek (łańcuch początkowy) z pozycją poprzednią. Każda pozycja
bazy rozpoczyna się bajtem licznika różnicy offsetu. Jest to dodatkowa
liczba znaków przedrostka pochodzącego z poprzedniej pozycji bazy, jaka
powinna być zastosowana ponad liczbę znaków, jakiej używa poprzednia
pozycja w stosunku do jej z kolei poprzednika. (Licznik ten może być
ujemny.) Po liczniku następuje ograniczona znakiem null końcówka ASCII
-- część nazwy, która następuje po wspólnym przedrostku.
Jeśli licznik różnicy offsetu jest większy niż możliwy do przechowania
w pojedynczym bajcie (+/-127), to bajt posiada wartość 0x80, a licznik
następuje w słowie dwubajtowym, z bajtem starszym jako pierwszym
(sieciowy porządek bajtów).
Każda baza danych rozpoczyna się od sztucznej pozycji dla pliku o
nazwie `LOCATE02'. locate sprawdza ten zapis, by upewnić się, że plik
bazy posiada poprawny format; ignoruje te pozycję podczas przeszukiwań.
Bazy danych nie mogą być sklejane (łączone), nawet jeśli ze wszystkich
baz oprócz pierwszej usunięto pierwszą (sztuczną) pozycję. Wynika to
stąd, że licznik różnicy offsetu pierwszego wpisu pochodzącego z
drugiej i kolejnych baz będzie nieprawidłowy.
Istnieje również stary format bazy danych, używany przez uniksowe
programy locate i find oraz ich wcześniejsze wydania GNU. W celu
utworzenia baz w starym formacie updatedb uruchamia programy o nazwach
bigram i code. Stary format różni się od powyższego opisu w następujący
sposób. W nowym formacie każda z pozycji zaczyna się od licznika
różnicy offsetu i kończy się bajtem null. W starym formacie wartości
bajtu od 0 do 28 wskazują na licznik różnicy offsetu od -14 do 14.
Wartością bajtu wskazującą, na to że występuje po niej długi licznik
jest 0x1e (30), nie zaś 0x80. Długie liczniki przechowywane są w
porządku bajtów hosta, który niekoniecznie jest sieciowym porządkiem
bajtów, oraz o rozmiarze słowa integer hosta, zwykle mającym 4 znaki.
One także reprezentują licznik o 14 mniejszy od ich wartości. Wiersze
bazy danych nie posiadają bajtu ogranicznika; początek następnego
wiersza wskazywany jest jego pierwszy bajt o wartości <= 30.
Poza tym, zamiast rozpoczynania się fikcyjną pozycją, stary format bazy
danych rozpoczyna się od 256 bajtowej tablicy zawierającej 128
najczęściej występujących dwuznaków (bigram) w liście plików. Dwuznak w
tym kontekście jest parą sąsiednich bajtów. Bajty w bazie danych
posiadające ustawiony starszy bit są indeksami (z wyczyszczonym
starszym bitem) do tablicy dwuznaków. Kodowanie dwuznaków i liczniki
różnicy offsetu powodują, że bazy te są o 20-25% mniejsze w porównaniu
z nowym formatem. Nie są jednak czysto 8-bitowe. Każdy z bajtów nazwy
pliku, przypadający na zakres używany dla kodów specjalnych,
zastępowany jest w bazie przez znak zapytania, co nieprzypadkowo
stanowi maskę powłoki dopasowującą pojedynczy znak.
PRZYKŁAD
Dane wejściowe do frcode:
/usr/src
/usr/src/cmd/aardvark.c
/usr/src/cmd/armadillo.c
/usr/tmp/zoo
Długość najdłuższego wspólnego przedrostka z poprzedniego zapisu:
0 /usr/src
8 /cmd/aardvark.c
14 rmadillo.c
5 tmp/zoo
Dane wynikowe z frcode, z końcowymi znakami null zamienionymi na znaki
nowej linii i zmianie liczby bajtów na postać drukowalną:
0 LOCATE02
0 /usr/src
8 /cmd/aardvark.c
6 rmadillo.c
-9 tmp/zoo
(6 = 14 - 8, a -9 = 5 - 14)
ZOBACZ TAKŻE
find(1L), locate(1L), locatedb(5L), xargs(1L).
Znajdowanie plików (dokumentacji Info on-line lub drukowanej)
LOCATEDB(5)