【Linux】locateコマンドでファイルを高速検索する

目次

概要

Linuxシステム全体から、ファイル名やディレクトリ名をキーワードにしてファイルを検索するコマンドです。

find コマンドがディスクを都度スキャンするのに対し、locate はあらかじめ作成された「ファイル名データベース」を参照するため、検索速度が圧倒的に速いのが特徴です。

ただし、データベース更新後に作成された新しいファイルは検索できないという特性があります。

仕様(引数・オプション)

構文

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

主な引数・オプション

オプション説明
-i大文字・小文字を区別せずに検索します(ignore-case)。
-cマッチしたファイルのパスではなく、ヒットした「数」のみを表示します(count)。
-r検索パターンとして正規表現(基本正規表現)を使用します(regexp)。
--regex検索パターンとして拡張正規表現を使用します。
-0出力結果をヌル文字(\0)区切りにします(空白を含むパスを処理する場合など)。
-d <DBパス>デフォルト以外のデータベースファイルを指定して検索します。

基本の使い方

ファイル名の一部を指定して検索します。パスの一部にその文字列が含まれていればすべてヒットします。

コマンド

# "nginx.conf" という文字列を含むパスをすべて検索
locate nginx.conf

実行結果

/etc/nginx/nginx.conf
/usr/share/doc/nginx/nginx.conf.example
/var/lib/docker/overlay2/.../etc/nginx/nginx.conf

実践コマンド

大文字・小文字を区別せずに探す

ファイル名が “ReadMe” か “README” か分からない場合などに便利です。

# "readme.md" を大文字小文字区別なく検索
locate -i readme.md
/home/user/project/README.md
/usr/share/doc/git/README.md.gz

正規表現を使って完全一致や拡張子で絞り込む

通常の locate は部分一致ですが、正規表現を使うことで「末尾が.jpgで終わるファイル」のように厳密な条件指定が可能です。

# /var/log 以下にある、末尾が .log で終わるファイルのみ検索
locate -r "^/var/log/.*\.log$"
/var/log/auth.log
/var/log/kern.log
/var/log/syslog

マッチしたファイルの数を数える

ファイルパスのリストではなく、「全部で何個あるか」だけを知りたい場合に使用します。

# システム内の全JPEGファイルの数をカウント
locate -c -i .jpg
1452

カスタムポイント

  • updatedbの実行: 検索結果が古いと感じた場合は、手動で sudo updatedb を実行してデータベースを更新します。
  • AND検索: locate 自体にはAND検索機能はありませんが、grep と組み合わせることで絞り込みが可能です(例: locate nginx | grep conf)。

注意点

  1. リアルタイムではない:検索対象は「データベース作成時点」のファイルです。直前に作成したファイルは、データベースが更新されるまで(通常は日次cron処理)検索にヒットしません。急ぎの場合は sudo updatedb が必要です。
  2. 削除されたファイルも出る:ファイルが削除されても、データベースが更新されるまでは検索結果に表示され続けます。
  3. 権限の設定:環境によっては、一般ユーザーが実行すると「閲覧権限のないディレクトリのファイル」は検索結果から除外されることがあります(セキュリティ設定に依存します)。

応用

検索データベースを手動で更新・制御する

locate コマンドの裏側では updatedb コマンドが動いています。特定ディレクトリを除外してデータベースを作成したい場合などは、設定ファイルやオプションを利用します。

データベースの手動更新

# 直近の変更を反映させるためにDBを即時更新
sudo updatedb

特定パスを除外して更新(一時的)

バックアップディレクトリなど、巨大で検索不要な領域を除外することで、DB作成時間を短縮し検索ノイズを減らせます。

# /mnt/backup を除外してデータベースを更新
sudo updatedb --prunepaths='/mnt/backup'

※ 恒久的に除外したい場合は /etc/updatedb.confPRUNEPATHS を編集します。

まとめ

locateコマンドは、システム全体を横断するような広範囲のファイル検索において、findコマンドよりも圧倒的に高速なレスポンスを返します。「設定ファイルがどこにあるか分からない」「あの名前のライブラリが入っているか確認したい」といった場面で、まずはlocateで当たりをつけるのが効率的です。ただし、結果の正確性はデータベースの鮮度に依存するため、直近の作業ファイルを追う場合はfind、既存のシステムファイルを探す場合はlocateという使い分けが重要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次