Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名前
locatedb - 前置圧縮されたファイル名データベース
説明
このマニュアルページは GNU 版 locate で用いるファイル名データベースのフォーマットについて 記述したものです。ファイル名データベースには、最後に更新された時点において、特定のディレク トリツリー下に存在していたファイルのリストが含まれています。 複数のデータベースを共存させることもできます。環境変数やコマンドラインオプションを指定すれ ば、ユーザーは locate に検索させるデータベースを選択することができます。詳しくは locate(1) を参照してください。システム管理者はデフォルトで用いられるデータベースの名前や、データベー スの更新頻度、またデータベースに入れるディレクトリなどを選択することができます。通常ファイ ル名データベースの更新は updatedb プログラムを定期的に実行させることによって行ないます(夜 間が良いでしょう)。詳細は updatedb(1) を参照してください。
GNU LOCATE02 データベースフォーマット
これは updatedb により生成されるデフォルトのデータベースフォーマットです。updatedb は frcode というプログラムを呼び出してファイル名のリストを前置圧縮 (front compression) しま す。これによってデータベースのサイズは 1/4 から 1/5 になります。前置圧縮 (インクリメンタル エンコーディングとも呼ばれる) は以下のような動作をします。 データベースのエントリは整列されたリストからなってます (ユーザーの利便性のため、大文字小文 字は区別していません)。従って、各々のエントリは直前のエントリと最初の数文字が一致している ことが多くなります。それぞれのデータベースエントリには、まずオフセット差分カウントという 1 バイトのデータが入っています。これは現在のエントリと直前のエントリの共有部分の文字数か ら、直前のエントリとそのもうひとつ前のエントリの共有文字数を引いたものです (従ってこの数値 は負になることもあります)。カウントの後には共有部分の文字列以降の残りが ASCII 文字列で与え られます。これはヌル文字で終端するとみなされます。 もしオフセット差分カウントがバイトデータで与えられる範囲 (±127) を越えた場合は、バイトデー タ 0x80 がカウントに代入され、2 バイトのワードデータがその後に続きます。このワードデータで は高位バイトが先に来ます (ネットワークバイトオーダー)。このカウントは負になることもありま す(符号ビットは2バイトの最初の方にあります)。 すべてのデータベースは、ファイルエントリの最初に `LOCATE02' というダミーのエントリを持ちま す。これは locate によってチェックされ、このデータベースが正しいフォーマットであることを確 認するために用いられます。実際の検索においてはこのエントリは無視されます。 複数のデータベースを連結することはできません。最初の (ダミー) エントリを結合するデータベー スから取り去れば良さそうですが、これは正しくはありません。なぜなら後に続くデータベースの最 初のエントリにおけるオフセット差分カウントは正しい値を取り得ないからです。 将来的に locate データベース内のデータは、特定順での並び替えができなくなるかもしれませ ん。並び替えを必要とする場合は、locate の出力に対してパイプにより sort -f を処理してくださ い。
slocate データベースフォーマット
slocate プログラムが利用するデータベースフォーマットは locate が利用するものと似ています が、全く同じではありません。データベースの最初のバイトは security level (セキュリティレベ ル) を指定しています。このセキュリティレベルが 0 のときは slocate が読み込みを行い、データ ベース内にのみある情報に基づいて、ファイル名の検索と表示を行います。一方、セキュリティレベ ルが 1 のとき、実行ユーザのデータベースアクセスが不能である場合、slocate はエントリ出力を 省略する。データベースの 2 番目のバイトはゼロです。3 番目のバイト以降にデータベースエント リが続きます。データベースエントリの先頭に、差分カウントやダミーエントリが置かれることはあ りません。その代わりに最初の項目に対する差分カウントは、ゼロとして取り扱われます。 2 番目のエントリがデータベースに存在していたとすると、データは GNU 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)
バグ報告
GNU findutils オンラインヘルプ: <https://www.gnu.org/software/findutils/#get-help> 翻訳に関するバグ報告: <https://translationproject.org/team/> その他の問題について GNU Savannah バグトラッカー経由での報告: <https://savannah.gnu.org/bugs/?group=findutils> GNU findutils パッケージのメーリングリスト bug-findutils において議論されている全般的なト ピック: <https://lists.gnu.org/mailman/listinfo/bug-findutils>
著作権
Copyright © 1994-2022 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
関連項目
find(1), locate(1), xargs(1), locatedb(5) 充実したドキュメントは <https://www.gnu.org/software/findutils/locatedb> を参照してくださ い。 またローカルにおいては info locatedb により参照できます。 LOCATEDB(5)