`updatedb`と`locate`はどのタイプのデータベースを使用しますか?

`updatedb`と`locate`はどのタイプのデータベースを使用しますか?

プログラムlocatefindutils1つ以上のファイル名データベースを検索し、一致するすべてのエントリを表示します。find最後のファイル名データベースの更新中にファイルが存在する場合は、非常に高速なコマンドとして使用できます。

最近、多くの種類のデータベースがあります。

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()関数によって定義されます。

関連情報