Locateハンドブック
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)により効率的に格納されます。
- 隣接するエントリ間の共通プレフィックスの長さを記録。
- 共通部分以降のサフィックスのみを保存。
- バイナリ形式で格納され、圧縮が施されています。
使用例
編集- 特定のファイルを検索する:
locate myfile.txt
- 特定のデータベースを指定して検索する:
locate -d /path/to/database myfile
- 検索結果をカウントする:
locate -c myfile
- NULL区切りで出力する:
locate -0 myfile
制約
編集- データベースが更新されるまで最新のファイル情報は反映されません。
- データベースは読み取り可能なディレクトリのファイルのみを収録します。
- 異なるエンディアンのシステム間ではデータベースを共有できません。
- マルチバイト文字はサポートされていません。
参考文献
編集- Woods, James A., “Finding Files Fast”, ;login, 8:1, pp. 8-10, 1983.