[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

5. ファイル名のデータベース

locateで使用されるファイル名のデータベースには,データベースが最 後に更新された時の,特定のディレクトリツリー内のファイルのリストが含まれ ています.データベースのデフォルトファイル名は,locateupdatedbがコンフィグレーションされインストールされた時に決定され ます.データベースが更新される頻度と,項目に含めるディレクトリは, updatedbが実行される頻度と,その引数に依存します.

5.1 データベースの位置  
5.2 データベースの書式  


5.1 データベースの位置

複数のファイル名のデータベースの存在が可能です.ユーザは,locate が検索を行なうデータベースを,環境変数やコマンドラインオプションを使用し て選択可能です.システム管理者は,デフォルトのデータベースのファイル名, データベースを更新する頻度,そして,項目に含めるディレクトリを選択するこ とが可能です.ファイル名のデータベースは,updatedbプログラムで, 通常夜に実行され更新されます.

ネットワーク環境では,ファイルシステムの項目を含めながら,それぞれのルー トファイルシステムでデータベースを構築することに意味があります. updatedbは,ネットワークのスラッシングを避けるため,ファイルシス テムがローカルディスクにあるファイルサーバの,それぞれのファイルシステム で実行されます.updatedbに,それぞれのデータベースが含んでいる項 目のディレクトリを選択させるオプションは以下のとおりです.

--localpaths='path...'
データベースに書き込むネットワーク以外のディレクトリです.デフォルトは `/'です.

--netpaths='path...'
データベースに書き込むネットワークディレクトリ(NFS,AFS,RFS,等々)です. デフォルトはありません.

--prunepaths='path...'
データベースに書き込まないディレクトリで,それ以外は書き込まれます.デフォ ルトは,`/tmp /usr/tmp /var/tmp /afs'です.

--output=dbfile
構築されるデータベースファイルです.デフォルトはシステムに依存しますが, 通常は,`/usr/local/var/locatedb'です.

--netuser=user
ネットワークディレクトリを検索するユーザで,suを使用します.デフォ ルトはdaemonです.


5.2 データベースの書式

ファイル名のデータベースには,データベースが最後に更新された時の,特定の ディレクトリツリーのファイルのリストを含まれます.ファイル名のデータベー スの書式変更は,異なるバイト順序を用いるマシンでも,データベースの共有が 可能となるように,GNU locateバージョン4.0から開始されました.新し いGNU locateは,新旧両方のデータベースの書式を読み込むことが可能 です.しかし,古いバージョンのlocatefindでは,新しい書式 のデータベースを与えられた場合,間違った結果となります.

5.2.1 新しいデータベースの書式  
5.2.2 サンプルデータベース  
5.2.3 古いデータベースの書式  


5.2.1 新しいデータベースの書式

updatedbは,4の要素を5にする(2)ことでデータベースの大きさが小さくなるように,ファイル名のリスト を前部圧縮するためにfrcodeを実行します.前部圧縮(増分符合化 としても知られている)は以下のように動作します.

データベースの項目は,(ユーザの利便性のため,大文字小文字を識別しないで) ソートされているリストです.リストはソートされているので,それぞれの項目 は,前の項目と同じ接頭辞(最初の文字列)を共有することがよくあります.それ ぞれのデータベース項目はオフセットバイトの差分の数で始まっていて,それは 前の項目の更に前のものが使用している数以上を使用している,前の項目に前置 される接頭辞の追加の文字数です(3).(数は負になることもあるはずです.)それ以降の 数は,ヌルで終端されているASCII文字の残りです---共有している接尾辞以降の 名前の部分です.

オフセット差分数がバイト(+/-127)で保存できるものより大きい場合,バイトの 値が0x80になり,それ以下の2バイトがその数値になっていて,それはハイバイ トを最初(ネットワークバイトの順序)にしたものを用います.

すべてのデータベースは,`LOCATE02'と呼ばれるダミーの項目で始まって いて,それは,データベースファイルの書式が正しいことを確認するために, locateが調査するものです.検索時にはその項目は無視されます.

最初の(ダミー)項目を,最初のデータベース以外からすべて切り取った場合でも, データベースをお互いに連結させることは不可能です.これは,2番目とそれ以 降の最初の項目にあるオフセット差分数が間違ってしまうためです.


5.2.2 サンプルデータベース

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, and -9 = 5 - 14)

(6 = 14 - 8,そして -9 = 5 - 14)


5.2.3 古いデータベースの書式

古いデータベースの書式は,Unixのlocatefindプログラム,そ して早期のGNUがリリースしたもので使用されています.updatedbは, `--old-format'オプションが与えられた場合,この書式を生成します.

updatedbは,古い書式のデータベースを生成するために,bigramcodeと呼ばれるプログラムを実行します.古い書式は,新しいものと 以下の方式で異なります.オフセット差分数バイトで始まりヌルで終るそれぞれ の項目の代わりに,-14から14までのオフセット差分数を示している,0から28の 値になります.それ以上の大きなオフセット差分数を示すバイト値は,0x1e (30)で0x80ではありません.大きな数は,ホストのバイト順でソートされ,それ はネットワークバイトの順序である必要はなく,ホストのワード整数の大きさで, それは通常4バイトです.その値が14より小さいものは表示されません.データ ベースの行には終端バイトがありません.次の行の先頭は,30より小さい値を持 つバイトで示されます.

更に,最初のダミー項目で始まる代わりに,古いデータベース書式は,ファイル リストで最も一般的な128のbigramを含んでいる,256バイトの表で始まります. bigramは調整されたバイトの組となっています.ハイビットセットを持つデータ ベースのバイトは,(ハイビットがクリアされている)bigram表内部の索引です. bigramとオフセット差分数の符合化は,これらのデータベースを,新しい書式よ り20から25%まで小さくしますが,8ビットクリーンにはなりません.特殊コード に使用される範囲にあるファイル名のあらゆるバイトは,データベース内では疑 問符に置換され,それは,単一文字に一致するシェルのワイルドカードには一致 しません.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Akihiro Sagawa on January, 21 2003 using texi2html