LOCATEDB(5L) LOCATEDB(5L) 名前 locatedb - 前置圧縮されたファイル名データベース 説明 このマニュアルページは GNU 版 locate で用いるファイル名データベースのフ ォーマットについて記述したものである。ファイル名データベースには、最 後 に 更新された時点において、特定のディレクトリツリー下に存在していたファ イルのリストが含まれている。 複数のデータベースを共存させることもできる。環境変数やコマンドライン オ プ ションを指定すれば、ユーザーは locate に検索させるデータベースを選択 することができる。詳しくは locate(1L) を見よ。システム管理者はデフォ ル ト で用いられるデータベースの名前や、データベースの更新頻度、またデータ ベースに入れるディレクトリなどを選択することができる。通常ファイル名 デ ー タベースの更新は updatedb プログラムを定期的に実行させることによって 行なう (夜間が良いだろう)。詳細は updatedb(1L) を見よ。 updatedb は frcode というプログラムを呼び出してファイル名のリストを前置 圧 縮 (front compression) する。これによってデータベースのサイズは 1/4 から 1/5 になる。前置圧縮 (インクリメンタルエンコーディングとも呼 ば れ る) は以下のような動作をする。 デ ータベースのエントリはソートされたリストからなっている (ユーザーの利 便性のため、大文字小文字は区別していない)。従って、各々のエントリは直前 の エントリと最初の数文字が一致していることが多い。それぞれのデータベー スエントリには、まずオフセット差分カウントという 1 バイトのデータが入っ て いる。これは現在のエントリと直前のエントリの共有部分の文字数から、直 前のエントリとそのもうひとつ前のエントリの共有文字数を引いたものであ る ( 従ってこの数値は負になることもある)。カウントの後には共有部分の文字列 以降の残りが ASCII 文字列で与えられる。これはヌル文字で終端するとみなさ れる。 も しオフセット差分カウントがバイトデータで与えられる範囲 (+/-127) を越 えた場合は、バイトデータ 0x80 がカウントに代入され、 2 バイトのワードデ ー タがその後に続く。このワードデータでは高位バイトが先に来る (ネットワ ークバイトオーダー)。 すべてのデータベースは、ファイルエントリの最初に ‘LOCATE02’ というダ ミ ー のエントリを持つ。これは locate によってチェックされ、このデータベー スが正しいフォーマットであることを確認するために用いられる。実際の検 索 においてはこのエントリは無視される。 複 数のデータベースを連結することはできない。最初の (ダミー) エントリを 結合するデータベースから取り去れば良さそうだが、これは正しくない。な ぜ な ら後に続くデータベースの最初のエントリにおけるオフセット差分カウント は正しい値を取り得ないからである。 Unix 版 locate および find や、以前の GNU 版で用いられていた古いデー タ ベ ースフォーマットも存在している。この古い形式のデータベースを作成する 場合には、 updatedb は bigram と code というプログラムを呼び出す。古 い フ ォーマットが上に述べた記述と異なる点を以下に示す。それぞれのエントリ がオフセット差分カウントのバイトデータで始まりヌル文字で終わる代わり に 、 0 から 28 までのバイトデータが -14 から 14 までのオフセット差分カウ ントとして用いられ、これがエントリ区切りを兼ねることになる。この範囲 外 の 長いオフセット差分カウントを示すデータには、 0x80 ではなく 0x1e (30) が使われる。長いカウントを保有するデータにはホストのバイトオーダが用 い られ (これはネットワークバイトオーダと等しいとは限らない)、またホストの integer のワードサイズ (4 バイトのことが多い) が用いられる。またここ に ス トアされるデータは実際の値から 14 を引いた値になる。データベースの各 エントリには終端バイトが無く、 30 以下の値を持つバイトデータが次のエ ン トリの始まりであると認識される。 さらに古いデータベース形式では、ダミーエントリの代わりに先頭に 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/zoo frcode からの出力は、最後のヌル文字を改行に代え、カウントバイトを数字に 代えると以下のようなものになる: 0 LOCATE02 0 /usr/src 8 /cmd/aardvark.c 6 rmadillo.c -9 tmp/zoo (6 = 14 - 8 また -9 = 5 - 14) 関連項目 find(1L), locate(1L), updatedb(1L), xargs(1L) Finding Files (on-line in Info, or printed) LOCATEDB(5L)
Copyright(C) linux-cmd.com All Rights Reserved. Author Takayuki Yukawa