NAZWA¶
locatedb - bazy nazw plików z kompresją początków
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
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)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 5 locatedb
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.