[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
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
を使用している場合,改行はいつでも正しく処理さ
れます.そうでなければ,改行は正しく処理されない可能性があります.
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。