新Linux入門|locateコマンドでファイルを高速検索する方法

Linuxシステムでは、たくさんのファイルがあちこちのディレクトリに散らばっています。
 「どこに保存したっけ?」と探すとき、find コマンドを使う方法もありますが、検索範囲が広いと時間がかかってしまうことがあります。

そんなときに便利なのが、locate コマンドです。
 このコマンドは、あらかじめ作成されたファイル名データベースを利用して、超高速でファイルを探してくれます。

管理者・開発者問わず重宝するコマンドです。
ここでは、locate コマンドの仕組みと使い方を、実例を交えてわかりやすく解説します。

⚡ locateコマンドの概要

locate コマンドは、ファイルシステム全体を1から探索するのではなく、
事前に作成されたファイルリスト(データベース)をもとに検索します。

そのため、検索速度は圧倒的に速く、数万〜数十万のファイルがあっても一瞬で結果を返します。

 ただし、新しく作成したファイルは、データベースを更新するまで検索結果に反映されません。
後ほど紹介する updatedb コマンドで更新できます。

🧩 locateコマンドの基本書式

📘 コマンド書式

locate [オプション] 検索文字列

📗 例

[suzuki@AlmaLinux ~]$ locate hosts

💬 この例では、ファイル名またはディレクトリ名に「hosts」を含むものを高速に検索します。

🧱 locateコマンドの主なオプション一覧

オプション説明
-c検索結果の件数のみを表示する。
-d使用するデータベースファイルを指定する。
-e実際に存在するファイル・ディレクトリのみを表示する。
-i大文字・小文字を区別せずに検索する。
-l 数値出力件数を制限する。
-qエラーメッセージを非表示にする。
-r正規表現を使って検索する。
-wパス全体で検索する(デフォルト動作)。

💡 ポイント

  • 通常は -i(大文字小文字を無視)や -c(件数のみ表示)がよく使われます。
  • -r を使うと、正規表現による柔軟な検索も可能です。

🔍 locateコマンドの使用例と出力解説

① ファイル名に「hosts」を含むものを検索

[suzuki@AlmaLinux ~]$ locate hosts
/etc/hosts
/etc/avahi/hosts
/etc/chromium/native-messaging-hosts
/etc/chromium/native-messaging-hosts/org.gnome.browser_connector.json
/etc/chromium/native-messaging-hosts/org.gnome.chrome_gnome_shell.json
/etc/opt/chrome/native-messaging-hosts
(省略)

💬 ファイル名またはディレクトリ名に「hosts」が含まれるすべての結果が表示されます。

② 検索結果の件数だけを表示

[suzuki@AlmaLinux ~]$ locate -c hosts
526

💬 ファイルの総件数が表示されます。
「どのくらいの数がヒットするか」だけ確認したいときに便利です。

③ 正規表現を使った検索

[suzuki@AlmaLinux ~]$ locate -r 'sh.*Color'
/usr/share/app-info/icons/rhel-9/128x128/org.gnome.ColorProfileViewer.png
/usr/share/app-info/icons/rhel-9/64x64/org.gnome.ColorProfileViewer.png
/usr/share/applications/org.gnome.ColorProfileViewer.desktop
/usr/share/dbus-1/interfaces/org.freedesktop.ColorHelper.xml
(省略)

💬 「sh」で始まり、「Color」が含まれるファイルを正規表現で探しています。
柔軟な検索をしたい場合に役立ちます。

④ grepと組み合わせてさらに絞り込み

[suzuki@AlmaLinux ~]$ locate hosts | grep '^/etc'
/etc/hosts
/etc/avahi/hosts
/etc/chromium/native-messaging-hosts
/etc/chromium/native-messaging-hosts/org.gnome.browser_connector.json
/etc/chromium/native-messaging-hosts/org.gnome.chrome_gnome_shell.json
/etc/opt/chrome/native-messaging-hosts
/etc/opt/chrome/native-messaging-hosts/org.gnome.browser_connector.json
/etc/opt/chrome/native-messaging-hosts/org.gnome.chrome_gnome_shell.json
/etc/samba/lmhosts

💬 locateの出力結果から、/etc 配下にあるファイルだけを絞り込んで表示しています。
grep '^/etc' では、行頭が /etc のものを抽出しています。

⑤ ファイルデータベースを手動で更新

locate が参照するデータベースは、システムが定期的に更新しますが、手動更新も可能です。

📘 例

[suzuki@AlmaLinux ~]$ su -
パスワード:
[root@AlmaLinux ~]# updatedb

💬 この updatedb コマンドを実行すると、システム内のファイル一覧が再収集され、
locate の検索結果が最新の状態になります。
この操作は rootユーザーのみが実行可能 です。

⚙️ locateとfindの違いを理解しよう

比較項目locatefind
検索方式データベースを参照ファイルシステムを直接探索
検索速度非常に高速やや遅い(リアルタイム検索)
結果の鮮度更新タイミングによる常に最新の結果
権限一般ユーザーも利用可一般・rootどちらも可能

💬 locate はスピード重視、find は精度重視
どちらを使うかは、状況に応じて使い分けるのがコツです。

✅ まとめ

  • locate は、データベースを使って超高速でファイル検索を行うコマンド。
  • find よりも軽くてスピーディー。
  • データベースを最新に保つには updatedb コマンドを実行。
  • grep などと組み合わせれば、正確なファイル位置の特定にも役立つ。

💬 「あの設定ファイルどこだっけ?」と思ったら、まずは locate で検索してみましょう!
スクリプト開発やシステム管理の効率がぐっと上がります。