Linux / コマンド / locate - ファイル名インデックスで素早くパスを検索

locateは、あらかじめ作成されたファイル名データベースからパスを検索します。ファイルシステムを毎回走査する必要がないため高速ですが、インデックスが更新される前の新しいファイルや削除されたファイルの状態は正確に反映されない場合があります。

この記事ではlocateの基本的な文法と主なオプション、実際の使用例、関連コマンドとの違い、使用時の注意点について説明します。

locateコマンドとは?

ディストリビューションによって、plocate、mlocate、またはGNU locateがコマンドを提供します。データベースは通常、updatedb を定期ジョブで実行して更新します。権限フィルタやデフォルトのデータベースパスは実装やシステム設定によって異なります。

基本的な文法

locate [オプション] パターン ...

オプションや詳細な動作は実装やバージョンによって異なる場合があります。現在のシステムではlocate --helpとman locateでインストールされたコマンドの説明を確認してください。

locateの基本的な使い方

名前の一部で検索する

パターンがパス全体の一部と一致する結果を素早く見つけます。

locate nginx.conf

大文字小文字を無視する

対応する実装では、-iで大文字小文字を区別しません。

locate -i readme.md

現在存在するパスのみを表示する

-e または --existing は、索引内の候補が現在存在するかを追加で確認します。新しいパスを探索して索引へ追加する指定ではないため、未登録のファイルは見つかりません。

locate -e '*.service'

高速検索結果が最新のファイルを保証しない理由

locate は現在のディスクを直接調べるのではなく、あらかじめ作成したパスのインデックスを検索します。インデックスに含まれるシステムの例:

locate /etc/passwd

例の出力:

/etc/passwd

新しいファイルはインデックスの更新前には表示されない場合があり、すでに削除されたファイルが残って表示されることもあります。結果がないときは、インデックスの状態と検索パターンを確認し、現在の存在が重要な場合は find で再度確認してください。

主なオプション

オプション 説明
-i 大文字小文字を区別せずに検索します。
-e, --existing 現在存在するファイルのみを表示します。
-b, --basename 全パスではなく、最後のファイル名部分のみを検索します。
-c, --count 結果の代わりに一致数を出力します。
-l N, --limit N 最大結果数を制限します。
-r REGEXP, --regexp REGEXP 正規表現で検索します。
-d DBPATH 検索するデータベースを指定します。

実践的活用例

末尾のファイル名部分で検索する

-b では末尾のファイル名部分だけを照合し、ディレクトリ名での一致を減らします。以下は hosts を含む名前の検索なので、hosts.bak なども対象です。表示は引き続きパス全体です。バックスラッシュで完全一致を指定する書き方は実装差があるため、共通の手順として使いません。

locate -b 'hosts'

結果数を制限する

あまりにも多くの結果を出力する前に数を数えるか、上限を設けます。

locate -c cache
locate -l 20 cache

インデックスを更新する

システム全体のデータベース更新には権限と時間が必要な場合があります。ディストリビューションのスケジュールタスクポリシーをまず確認してください。

sudo updatedb

locateと関連コマンドの比較

コマンド 主な役割 適した状況
locate インデックスに基づく名前検索 高速パス探索
find 現在のファイルシステムの直接検索 最新の状態とさまざまな条件
which PATH実行ファイル検索 実行経路の確認
whereis プログラム関連の標準経路検索 バイナリ・ソース・マニュアルを探す

使用する際の注意点

結果は最新ではない場合があります

インデックス作成後に生成・移動・削除された経路は、欠落しているか残っている場合があります。

権限と個人情報を考慮する

データベースの構築方法に応じて、他のユーザーの経路公開を制限する設定が適用されます。

実装ごとのオプションを確認する

共通のオプションでも詳細は確認が必要です。plocateのマニュアルでは、複数パターンはすべてに一致するAND検索、-r はPOSIX基本正規表現、--regex は拡張正規表現です。mlocateやGNU locateの既定の複数パターン検索などとは異なるため、locate --version と対象のマニュアルで確認してください。

FAQ

locateコマンドがインストールされていない理由は何ですか?

一部のディストリビューションではデフォルトでインストールされていません。パッケージ名はplocateまたはmlocateである場合があります。

作成したばかりのファイルが検索されない理由は何ですか?

まだデータベースが更新されていない可能性があります。すぐに確認するにはfindによる現在のファイル検索を使用してください。

updatedbは必ずsudoで実行する必要がありますか?

システム全体のインデックスは通常管理者権限が必要ですが、実装や設定によってはユーザーデータベースを作成することもできます。

削除したファイルが結果に残る理由は何ですか?

古いインデックス項目です。-eで存在を確認するか、データベースを更新してください。

参考資料