プログラムlocate
はfindutils
1つ以上のファイル名データベースを検索し、一致するすべてのエントリを表示します。find
最後のファイル名データベースの更新中にファイルが存在する場合は、非常に高速なコマンドとして使用できます。
最近、多くの種類のデータベースがあります。
- リレーショナルデータベース(SQLなどのクエリ言語を使用)、
-
文書中心のデータベース(例:モンゴルDB)
Key-Value データベース(例:Redis)
熱指向データベース(例:カサンドラ)
updatedb
それでは、どのようなデータベースを更新して使用する必要がありますかlocate
?
ありがとうございます。
答え1
locate
/の実装はupdatedb
通常、汎用データベースエンジンではなく、ニーズに合わせてカスタマイズされた特定のデータベースを使用します。各実装ごとに文書化された特定のデータベースを見つけることができます。たとえば、次のようになります。
- GNU
findutils
'に文書化されています。locatedb(5)
、これは(特定の圧縮アルゴリズムを使用する)ファイルのリストにすぎません。 mlocate
に記録mlocate.db(5)
、ディレクトリ、およびファイルのリスト(メタデータを含む)として表示することもできます。
答え2
Gnu LibCを使って作成/読み込まれるC構造のフラットファイルのようです。障害物マクロ
ソースの表示
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
あなたは次のようなものを得ることができます
find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz
答え3
私が知っている限り、Berkeleyデータベースこれはキー/値デーモンを持たないデータベースです。詳細については、リンクをクリックしてください。ウィキペディアからの抜粋:
Berkeley DB(BDB)は、キー/値データ用の高性能組み込みデータベースを提供するように設計されたソフトウェアライブラリです。 Berkeley DBは、C ++、C#、Java、Perl、PHP、Python、Ruby、Smalltalk、Tclなど、さまざまなプログラミング言語へのAPIバインディングを使用してCで書かれています。 BDBは、任意のキー/データペアをバイト配列として格納し、単一のキーに対して複数のデータ項目をサポートします。 Berkeley DBはリレーショナルデータベースではありません。
RHEL / CentOSのデータベースの場所は次のとおりです/var/lib/mlocate/mlocate.db
(他のディストリビューションについてはわかりません)。このコマンドは、locate --statistics
データベースの場所といくつかの統計情報(例)に関する情報を提供します。
Database /var/lib/mlocate/mlocate.db:
16,375 directories
242,457 files
11,280,301 bytes in file names
4,526,116 bytes used to store database
mlocate形式の場合、マニュアルページの先頭は次のようになります。
mlocate データベースはファイルヘッダーで始まります。マジックナンバー(Cリテラルの「\0mlocate」)を示す8バイト、ビッグエンディアンバイト順で構成ブロックサイズを示す4バイト、ファイル形式バージョンを示す1バイト(0)、可視性必須フラグ(0または1)用1バイト、パディング2バイト、データベースルートのNUL終了パス名。
ヘッダーの後には、一部の構成変更がコンテンツに影響を与える可能性がある場合にデータベースが再利用されないようにするために含まれる構成ブロックが続きます。構成ブロックのサイズ(バイト単位)はファイルヘッダーに保存されます。構成ブロックは、変数名でソートされた一連の変数割り当てです。各変数の割り当ては、NUL で終わる変数名と、NUL で終わる値の順序付けられたリストで構成されます。値のリストは NUL 文字で終わります。使用される順序はstrcmp()関数によって定義されます。