locate コマンドは、あらかじめ作成されたファイル名データベースを利用して、高速にファイルやディレクトリを検索するコマンドです。
一般的な find コマンドと比べて、ファイルシステム全体をその場で走査せずに済むため、非常に高速に結果を得ることができます。
ただし、locate の検索対象は「過去のタイミングで作られたデータベース」なので、
最近作ったファイルや削除したファイルが反映されていないことがあります。
このデータベースは、通常 updatedb コマンド(cron など)によって定期的に更新されています。
locate [オプション] パターン...
パターンには、検索したいファイル名・ディレクトリ名の一部を指定します。
デフォルトでは大文字小文字を区別して部分一致検索を行い、ヒットしたフルパスを 1 行ずつ出力します。
検索対象は「データベースに登録されているパス」のみなので、updatedb の実行タイミングや権限によって結果が変わる点に注意が必要です。
・ファイル名に「httpd.conf」を含むパスを探す(基本)。
locate httpd.conf
ファイル名・パス名に httpd.conf を含むエントリをすべて表示します。
Apache の設定ファイルの位置をすぐに知りたいときなど、find より手軽に調べられます。
・ディレクトリ名に「nginx」を含むパスを探す。
locate nginx
パス中に nginx を含むファイル・ディレクトリを一覧表示します。
インストール場所やログディレクトリ、設定ファイルなど「関連しそうな場所」をまとめて確認したいときに便利です。
・大文字小文字を無視して検索する。
locate -i Readme
-i(–ignore-case)を付けると、大文字小文字を区別せずに検索します。
README / Readme / readme など表記がまちまちなファイルを探したいときに役立ちます。
・ファイル名の末尾が「.log」で終わるものだけ、正規表現で検索する。
locate -r '\.log$'
-r 正規表現 を指定すると、パターンを正規表現として解釈します。
この例では、.log で終わるパス(ログファイル)だけを抽出しています。
シェルのメタ文字と正規表現が混ざらないよう、クォート('...)しておくのがおすすめです。
・ファイル名部分だけを対象に検索する。
locate -b '\httpd.conf'
-b(–basename)は、パス全体ではなくファイル名(ベース名)のみを検索対象にします。
先頭に \ を付けると、「パスの区切り」ではなく文字としてのスラッシュを抑制するため、
httpd.conf というファイル名そのものにマッチさせることができます。
・ヒット件数が多すぎる場合に、先頭 20 件だけに絞る。
locate -n 20 php.ini
-n 数 で、表示する件数の上限を指定できます。
パターンが広すぎて大量にヒットする場合でも、まずは一部だけを確認したいときに使います。
・ヒット件数だけを確認したい(件数をカウント)。
locate -c php.ini
-c(–count)は、マッチした件数のみを数値で表示します。
ファイル自体を列挙する必要はないが、「どれくらいあるか」だけ知りたいときに便利です。
・実在するファイルに限定して検索する。
locate -e nginx.conf
-e(–existing)は、現在も実在するパスのみを結果として表示します。
データベース更新前に削除された古いファイルへのエントリを除外したいときに使えます(環境によっては対応していない locate 実装もあります)。
・locate データベースの統計情報を確認する。
locate -S
-S(–statistics)は、データベース内の登録件数やサイズなどを表示します。
どれくらいのパスがデータベースに登録されているか、ざっくり把握したいときに使います。
・find と組み合わせて、候補を絞り込んでから詳細検索する。
locate nginx.conf | grep '/etc/'
まず locate で高速に候補を列挙し、そのあと grep などで絞り込む、という使い方もよく行われます。
「とりあえず全候補を出してから、欲しいディレクトリ配下だけを抜き出す」といったケースで便利です。
・インストールされた設定ファイルやバイナリの場所を素早く知りたいとき
「このミドルウェアの設定ファイルどこだっけ?」というときに、
locate conf名 や locate bin名 でパスを一気に洗い出すのは日常的な使い方です。
・バージョン違いの設定・ライブラリが混在していないか確認する
例えば php.ini や my.cnf などが複数存在していないか、
locate php.ini / locate my.cnf で一覧して、どれが実際に使われているかを確認する入り口として使えます。
・大規模なディレクトリをいちいち find したくないとき
find / -name ... を毎回実行すると時間がかかるため、まず locate で候補を挙げてから、
必要に応じて ls や stat で詳細を確認する、という流れにすると効率的です。
・削除し忘れたログやバックアップファイルの洗い出し
locate '.gz' や locate backup などで、古いバックアップや圧縮ログの場所をざっくり洗い出し、
容量の整理対象を見つけるときにも使えます(削除するときはパスをよく確認してください)。
locate は高速な反面、「データベースが最新とは限らない」「位置だけ分かる(所有者やサイズは別途確認が必要)」といった特徴があります。
正確さが重要なときは find、スピード重視で候補を絞りたいときは locate、という使い分けができると便利です。
| short option | long option | description |
|---|---|---|
| -i | --ignore-case | 検索時に大文字小文字を区別せずに検索する |
| -r | --regexp | 指定したパターンを通常の文字列ではなく正規表現として解釈して検索する |
| -b | --basename | パス全体ではなくファイル名(ベース名)のみを検索対象にする |
| -w | --wholename | パス全体と完全一致するものだけを検索する |
| -n | --limit | 表示する検索結果の件数の上限を指定する |
| -c | --count | 検索結果を一覧表示せずヒット件数のみを表示する |
| -e | --existing | 現在も実在するファイル・ディレクトリのみを表示する(削除済みパスを除外する) |
| -q | --quiet | エラーメッセージなどの出力を最小限にする(静かなモードで動作する) |
| -S | --statistics | locate データベースの統計情報(登録件数やサイズなど)を表示する |
| -0 | --null | 出力の区切り文字として改行の代わりに NULL 文字を使用する(xargs -0 などと組み合わせる場合に使用) |
| -d | --database | 使用する locate データベースファイルを明示的に指定する |
| -h | --help | locate コマンドの使い方(ヘルプ)を表示して終了する |
| -V | --version | locate コマンドのバージョン情報を表示して終了する |
ここでは、Linux 環境で一般的に利用される locate コマンドの主なオプションを TablePress の表としてまとめている想定です。
実際に使用できるオプションや挙動は、利用している locate の実装(mlocate / plocate など)やディストリビューションによって異なる場合があるため、
本番環境で使用する前に man locate で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
![]()
にほんブログ村