[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
locate
で使用されるファイル名のデータベースには,データベースが最
後に更新された時の,特定のディレクトリツリー内のファイルのリストが含ま
れています.データベースのデフォルトファイル名は,locate
と
updatedb
がコンフィグレーションされインストールされた時に決定され
ます.データベースが更新される頻度と,項目に含めるディレクトリは,
updatedb
が実行される頻度と,その引数に依存します.
`locate --statistics'を使用することで,データベースの統計情報を得 ることが可能です.
5.1 データベースの位置 | ||
5.2 データベースの書式 | ||
5.3 改行の取り扱い |
複数のファイル名のデータベースを存在させることが可能です.ユーザは,
locate
が検索を行なうデータベースを,LOCATE_PATH
環境変数や
コマンドラインオプションを使用して選択することが可能です.システム管理
者は,デフォルトのデータベースのファイル名,データベースを更新する頻度,
そして,項目に含めるディレクトリを選択することが可能です.ファイル名の
データベースは,updatedb
プログラムで,通常夜に実行され更新されま
す.
ネットワーク環境では,ファイルシステムの項目を含めながら,それぞれのルー
トファイルシステムでデータベースを構築することに意味があります.
updatedb
は,ネットワークのスラッシングを避けるため,ファイルシス
テムがローカルディスクにあるファイルサーバの,それぞれのファイルシステ
ムで実行されます.updatedb
に,それぞれのデータベースが含んでいる
項目のディレクトリを選択させるオプションは以下のとおりです.
updatedb
のオプションの記述で,項目を含むデータベースがあるディレ
クトリの指定は,See section updatedb
の呼び出し.
ファイル名のデータベースには,データベースが最後に更新された時の,特定
のディレクトリツリーのファイルのリストを含まれます.ファイル名のデータ
ベースの書式変更は,異なるバイト順序を用いるマシンでも,データベースの
共有が可能となるように,GNU locate
バージョン4.0から開始されまし
た.新しいGNU locate
は,新旧両方のデータベースの書式を読み込むこ
とが可能です.しかし,古いバージョンのlocate
とfind
では,
新しい書式のデータベースを与えられた場合,間違った結果となります.
`locate --statistics'を実行した場合,要約された結果は,それぞれの
locate
のデータベースの形式を示します.
5.2.1 新しいデータベースの書式 | ||
5.2.2 サンプルデータベース | ||
5.2.3 古いデータベースの書式 |
updatedb
は,4の要素を5にする(1)ことでデータベースの大きさが小さくなるように,ファイル名のリ
ストを前部圧縮(front-compress)するため,frcode
を実行します.
前部圧縮(増分符合化としても知られている)は以下のように動作します.
データベースの項目は,(ユーザの利便性のため,大文字小文字を識別しないで) ソートされているリストです.リストはソートされているので,それぞれの項 目は,前の項目と同じ接頭辞(最初の文字列)を共有することがよくあります. それぞれのデータベース項目はオフセットバイトの差分の数で始まっていて, それは前の項目の更に前のものが使用している数より多くなる,前の項目に前 置される接頭辞への追加の文字数です.(数は負になることもあります.) それ 以降の数は,ヌルで終端されているASCII文字の残りです--共有している接尾 辞以降の名前の部分です.
オフセット差分数がバイト(+/-127)で保存できるものより大きい場合,バイト の値が0x80になり,それ以下の2バイトがその数値になっていて,それはハイバ イトを最初(ネットワークバイトの順序)にしたものを用います.
すべてのデータベースは,`LOCATE02'と呼ばれるダミーの項目で始まって
いて,それは,データベースファイルの書式が正しいことを確認するために,
locate
が調査するものです.検索時にはその項目は無視されます.
最初の(ダミー)項目を,先頭のデータベース以外からすべて切り取っても,デー タベースを連結させることは不可能です.これは,二番目とそれ以降の最初の 項目にあるオフセット差分数が間違ってしまうためです.
`locate --statistics'の出力で,新しいデータベースの書式は `LOCATE02'として参照します.
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)
古いデータベースの書式は,Unixのlocate
とfind
プログラム,
そして早期のGNUがリリースしたもので使用されています.updatedb
は,
`--old-format'オプションが与えられた場合,この書式で生成します.
updatedb
は,古い書式のデータベースを生成するために,
bigram
とcode
と呼ばれるプログラムを実行します.古い書式は,
新しいものと以下の方式で異なります.オフセット差分数バイトで始まりヌル
で終るそれぞれの項目の代わりに,-14から14までのオフセット差分数を示す0
から28の値になります.それ以上の大きなオフセット差分数を示すバイト値は,
0x1e (30)で0x80ではありません.大きな数は,ホストのバイト順でソートされ,
それはネットワークバイトの順序である必要はなく,ホストのワード整数の大
きさとなっていて,それは通常4バイトです.その値が14より小さいものは表示
されません.データベースの行には終端バイトがありません.次の行の先頭は,
30より小さい値を持つバイトで示されます.
更に,最初のダミー項目で始まる代わりに,古いデータベース書式は,ファイ
ルリストで最も一般的な128のbigram
を含んでいる,256バイトの表で始
まります.bigram
は調整されたバイトの組となっています.ハイビット
セットを持つデータベースのバイトは,(ハイビットがクリアされてい
る)bigram
表内部の索引です.bigram
とオフセット差分数の符合
化は,これらのデータベースを,新しい書式より20から25%まで小さくしますが,
8ビットクリーンにはなりません.特殊コードに使用される範囲にあるファイル
名のバイトは,データベース内では疑問符に置換され,それは,単一文字にマッ
チするシェルのワイルドカードにはマッチしません.
そのため古い書式では,ASCII以外の文字の項目を忠実の保存することが不可能 です.そのため,国際化環境では使用すべきではありません.
`locate --statistics'の出力は,古い書式の改行やハイビット文字を含 むファイル名の計数で間違えてしまうでしょう.
データベースでは,ファイル名はヌル文字で終端されています.これは,古い 書式も新しい書式も同じようになっています.
新しいデータベースの書式が使用されているとき,frcode
に渡す前の,
ファイルのリストの並べ替え能力に依存する圧縮技術が,データベースの生成
に使用されています.
システムのソートコマンドが,入力されるファイルのリストを`-z'オプショ
ンでヌル文字で分離している場合,このオプションが使用され,そのため,
updatedb
とlocate
は両方共,改行を含むファイル名を正しく処
理します.sort
コマンドにこのサポートが無い場合,ファイルのリスト
は改行文字で分離され,つまり,改行を含むファイルの部分は間違って並べ替
えられます.結果として,正しくないマッチと,正しくない間違ったマッチの
両方が発生します.
一方,古いデータベース書式を使用している場合,改行が埋め込まれたファイ
ル名は正しく処理されません.これを強制する技術的な制限は無いので,
bigram
プログラムはヌルで分離されているファイル名のリストをサポー
トするように更新されていません.
そのため,新しいデータベース書式を使用していて(これはデフォルトです),
システムでGNU find
を使用している場合,改行はいつでも正しく処理さ
れます.そうでなければ,改行は正しく処理されない可能性があります.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated by Akihiro Sagawa on September, 28 2005 using texi2html 1.70.