locateハンドブック

編集

概要

編集

locateコマンドは、ファイル名を迅速に検索するためのツールです。検索対象のファイルパスはあらかじめデータベースに格納されており、locateはそのデータベースを利用して効率的に検索を行います。このデータベースは通常、定期的に更新されます。

使用方法

編集

以下はlocateコマンドの一般的な形式です:

locate [-0Scims] [-l limit] [-d database] pattern ...
主なオプション
  • -0: 出力をNULL文字で区切る(デフォルトは改行)。
  • -S: データベースの統計情報を表示し、終了する。
  • -c: マッチしたファイル数のみを出力。
  • -d database: 指定したデータベースを検索(複数指定可)。
  • -i: 大文字と小文字を区別しない。
  • -l number: 出力を指定した数の結果に制限する。
  • -m: mmap(2)を使用して検索を行う(デフォルト動作)。
  • -s: 標準ライブラリ(stdio(3))を使用して検索。

データベースの更新

編集

データベースの更新は通常、/usr/libexec/locate.updatedbで行われます。このスクリプトは/etc/periodic/weekly/310.locateから週に一度実行されます。

関連ファイル
  • /var/db/locate.database : デフォルトのデータベースファイル
  • /etc/locate.rc : データベース更新の設定ファイル

データベースの構造

編集
  • データベースは、全てのファイルパスを辞書順にソートして格納します。
  • 各ファイルパスは差分符号化(delta encoding)により効率的に格納されます。
    • 隣接するエントリ間の共通プレフィックスの長さを記録。
    • 共通部分以降のサフィックスのみを保存。
  • バイナリ形式で格納され、圧縮が施されています。

使用例

編集
  1. 特定のファイルを検索する
    locate myfile.txt
    
  2. 特定のデータベースを指定して検索する
    locate -d /path/to/database myfile
    
  3. 検索結果をカウントする
    locate -c myfile
    
  4. NULL区切りで出力する
    locate -0 myfile
    

制約

編集
  • データベースが更新されるまで最新のファイル情報は反映されません。
  • データベースは読み取り可能なディレクトリのファイルのみを収録します。
  • 異なるエンディアンのシステム間ではデータベースを共有できません。
  • マルチバイト文字はサポートされていません。

参考文献

編集
  • Woods, James A., “Finding Files Fast”, ;login, 8:1, pp. 8-10, 1983.