複数のデータベースを共存させることもできます。環境変数やコマンドラインオプションを指定すれば、ユーザーは locate に検索させるデータベースを選択することができます。詳しくは locate(1) を参照してください。システム管理者はデフォルトで用いられるデータベースの名前や、データベースの更新頻度、またデータベースに入れるディレクトリなどを選択することができます。通常ファイル名データベースの更新は updatedb プログラムを定期的に実行させることによって行ないます(夜間が良いでしょう)。詳細は updatedb(1) を参照してください。
データベースのエントリは整列されたリストからなってます (ユーザーの利便性のため、大文字小文字は区別していません)。従って、各々のエントリは直前のエントリと最初の数文字が一致していることが多くなります。それぞれのデータベースエントリには、まずオフセット差分カウントという 1 バイトのデータが入っています。これは現在のエントリと直前のエントリの共有部分の文字数から、直前のエントリとそのもうひとつ前のエントリの共有文字数を引いたものです (従ってこの数値は負になることもあります)。カウントの後には共有部分の文字列以降の残りが ASCII 文字列で与えられます。これはヌル文字で終端するとみなされます。
もしオフセット差分カウントがバイトデータで与えられる範囲 (±127) を越えた場合は、バイトデータ 0x80 がカウントに代入され、2 バイトのワードデータがその後に続きます。このワードデータでは高位バイトが先に来ます (ネットワークバイトオーダー)。このカウントは負になることもあります(符号ビットは2バイトの最初の方にあります)。
すべてのデータベースは、ファイルエントリの最初に `LOCATE02' というダミーのエントリを持ちます。これは locate によってチェックされ、このデータベースが正しいフォーマットであることを確認するために用いられます。実際の検索においてはこのエントリは無視されます。
複数のデータベースを連結することはできません。最初の (ダミー) エントリを結合するデータベースから取り去れば良さそうですが、これは正しくはありません。なぜなら後に続くデータベースの最初のエントリにおけるオフセット差分カウントは正しい値を取り得ないからです。
将来的に locate データベース内のデータは、特定順での並び替えができなくなるかもしれません。並び替えを必要とする場合は、locate の出力に対してパイプにより sort -f を処理してください。
2 番目のエントリがデータベースに存在していたとすると、データは GNU LOCATE02 フォーマットと同様のものとして解釈されます。
さらに古いデータベース形式では、ダミーエントリの代わりに先頭に 256 バイトのテーブルがあり、ファイルリストでもっとも頻繁に用いられている bigram が並べてあります。bigram とは隣接した二つのバイトデータをインデックス付けしたものです。データベースに現われるバイトデータのうち、最高位ビットがセットされているものは (残りの 7 ビットをインデックスとして) bigram テーブルのデータと置換されます。この bigram とオフセット差分カウントを用いることで、データベースの大きさは新しいフォーマットより 20-25% 小さくなっています。しかし 8 ビットクリーンでないという欠点を併せ持ちます。ファイル名に含まれるバイトデータのうち、スペシャルコードに属するものは、データベース中ではすべてクエスチョンマークで置き換えられます。これは任意の一文字を表わすシェルのワイルドカードなので、実際のファイル名に現われることはありません。
frcode への入力が以下のようなものとします: /usr/src /usr/src/cmd/aardvark.c /usr/src/cmd/armadillo.c /usr/tmp/zoo 直前のエントリとの最長一致部分の長さは: 0 /usr/src 8 /cmd/aardvark.c 14 rmadillo.c 5 tmp/zoofrcode からの出力は、最後のヌル文字を改行に代え、カウントバイトを数字に代えると以下のようなものになります:
0 LOCATE02 0 /usr/src 8 /cmd/aardvark.c 6 rmadillo.c -9 tmp/zoo (6 = 14 - 8 または -9 = 5 - 14)
その他の問題について GNU Savannah バグトラッカー経由での報告:
充実したドキュメントは <https://www.gnu.org/software/findutils/locatedb> を参照してください。
またローカルにおいては info locatedb により参照できます。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]