このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:ファイル名データベースからファイルを探す:locateコマンド

ファイル名データベースからファイルを探す:locateコマンド

 locateコマンドは、パス名の一部を指定してファイルを高速に検索するためのコマンドです。これは、事前に作成されたファイル名データベースを参照することで、ディスク全体をスキャンするfindコマンドに比べて非常に迅速に検索を行うことができます。

 しかし、locateコマンドはデフォルトでインストールされていないLinuxディストリビューションも多いため、まずはインストール手順から確認していきましょう。

locateコマンドのインストール

インストールの確認

 まず、locateコマンドがシステムにインストールされているか確認します。ターミナルで以下のコマンドを実行してください。

user01@ubuntu:~$ locate

もし、以下のようなメッセージが表示された場合、locateコマンドはインストールされていません。

コマンド 'locate' が見つかりません。次の方法でインストールできます:
sudo apt install plocate

インストール手順

Ubuntuの場合、locateコマンドはplocateというパッケージに含まれています。以下のコマンドを実行してインストールします。

user01@ubuntu:~$ sudo apt install plocate
[sudo] user01 のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
  liburing2
以下のパッケージが新たにインストールされます:
  liburing2 plocate
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 31 個。
160 kB のアーカイブを取得する必要があります。
この操作後に追加で 623 kB のディスク容量が消費されます。
続行しますか? [Y/n] 

ポイント

  • sudoを使用しているため、パスワードの入力が求められます。
  • Yを入力してインストールを進めます。

データベースの作成

 インストール直後は、ファイルパスのデータベースがまだ作成されていないため、検索を行うことができません。データベースを作成するには、updatedbコマンドを実行します。

user01@ubuntu:~$ sudo updatedb

注意

  • updatedbコマンドは、システム上の全ファイルパスをデータベースに登録します。
  • 通常、locateコマンドをインストールすると、updatedbが定期的(1日1回)に自動実行されるように設定されます。

ファイルの検索

locateコマンドを使用して、実際にファイルを検索してみましょう。

【書式】
locate [オプション] <検索パターン>

使用例:「bash」という文字列を含むパス名を検索する

user01@ubuntu:~$ locate bash
/etc/bash.bashrc
/etc/bash_completion
/etc/apparmor.d/abstractions/bash
/etc/profile.d/bash_completion.sh
/etc/skel/.bash_logout
/etc/skel/.bashrc
/home/user01/.bash_history
/home/user01/.bash_logout
/home/user01/.bashrc
...(以下省略)...

ポイント

  • locateコマンドは、検索パターンに一致するすべてのパス名を高速に表示します。
  • 検索結果には、ファイル名だけでなく、ディレクトリ名も含まれます。

findコマンドとの比較

findコマンドとlocateコマンドの主な違いを理解しておきましょう。

比較表

コマンド検索方法検索速度データの新鮮さ
findディレクトリツリーを直接検索遅い(ファイル数に依存)常に最新
locateファイル名データベースを検索非常に速い更新頻度に依存
findコマンドとの比較

解説

  • findコマンドは、実行時にディスクを直接スキャンするため、大量のファイルがある場合には時間がかかりますが、常に最新の情報を取得できます。
  • locateコマンドは、事前に作成されたデータベースを検索するため、高速に結果を得られますが、データベースの更新頻度によっては最新の情報が反映されていない場合があります。

注意点

locateコマンドを使用する際には、以下の点に注意が必要です。

データベースの更新タイミング

  • デフォルトでは、locateコマンドのデータベースは1日1回自動更新されます。
  • そのため、直近で作成・削除したファイルはデータベースに反映されていない可能性があります。

実際のファイルの存在

  • locateコマンドで表示されたファイルが、実際には削除されて存在しない場合があります。
  • 逆に、データベース未更新のため、実際には存在するのに検索結果に表示されないファイルもあります。

データベースの手動更新

最新のファイル情報を検索したい場合は、手動でデータベースを更新する必要があります。

user01@ubuntu:~$ sudo updatedb

さまざまな検索方法の指定

 locateコマンドでは、検索パターンを指定してファイルを検索します。以下に、より高度な検索方法とその使い方を紹介します。

ワイルドカードを使用した検索

検索パターンには、findコマンドと同様にワイルドカードとして *? を利用できます。

  • *:任意の文字列(0文字以上)
  • ?:任意の1文字

例:拡張子が .sed のファイルを検索

user01@ubuntu:~$ locate '*.sed'
/snap/gnome-42-2204/176/usr/share/gettext/po/boldquot.sed
/snap/gnome-42-2204/176/usr/share/gettext/po/quot.sed
/usr/share/doc/sed/examples/dc.sed
/usr/share/groff/1.23.0/font/devps/generate/symbol.sed

ポイント

  • パターンを '(シングルクォート) または "(ダブルクォート) で囲む必要があります。これは、シェルによるパス名展開を防ぐためです。

大文字小文字を区別しない検索(-iオプション)

 デフォルトでは、locateコマンドは大文字と小文字を区別して検索します。大文字小文字を無視して検索したい場合は、-i または --ignore-case オプションを使用します。

例:notes(大文字小文字を区別しない)を含むファイルを検索

user01@ubuntu:~$ locate -i notes
/snap/gnome-42-2204/176/usr/lib/python3/dist-packages/markdown/extensions/footnotes.py
/snap/gtk-common-themes/1535/share/icons/HighContrast/16x16/apps/fedora-release-notes.png
/snap/gtk-common-themes/1535/share/icons/HighContrast/22x22/apps/fedora-release-notes.png
...(以下省略)...

ポイント

  • notesNOTESNotes など、大文字小文字の違いを無視して検索結果に表示されます。

ファイル名だけを対象に検索(-bオプション)

 通常、locateコマンドはパス名全体を検索対象とします。ファイル名(ベースネーム)のみを検索対象にしたい場合は、-b または --basename オプションを使用します。

例:ファイル名に python を含むファイルを検索

user01@ubuntu:~$ locate -b python | less
/etc/python3
/etc/python3.12
/etc/apparmor.d/abstractions/python
/snap/core22/1612/etc/python3.10
...(以下省略)...

ポイント

  • less コマンドを使用して、長い出力結果をページ単位で閲覧できます。終了するには q キーを押します。
  • -b オプションにより、ファイル名そのものに python を含むファイルだけが表示されます。途中のディレクトリ名に python が含まれていても、ファイル名に含まれていなければ表示されません。

複数の検索パターンを指定(OR検索)

 locateコマンドでは、複数の検索パターンを同時に指定できます。この場合、少なくとも1つのパターンに一致するファイルが検索結果に表示されます(OR検索)。

例:docs または list を含むファイルを検索

user01@ubuntu:~$ locate docs list
/var/lib/dpkg/info/gnome-user-docs-ja.list
/var/lib/dpkg/info/gnome-user-docs.list
/var/lib/dpkg/info/ubuntu-docs.list
/var/lib/dpkg/info/xorg-docs-core.list

ポイント

  • docs または list のどちらかを含むファイルが表示されます。
  • 複数の検索パターンをスペースで区切って指定します。

複数の検索パターンすべてに一致する検索(AND検索)

 複数の検索パターンを指定して、それらすべてに一致するファイルを検索したい場合は、-A または --all オプションを使用します(AND検索)。

例:bashdoc の両方を含むファイルを検索

user01@ubuntu:~$ locate -A bash doc
/snap/core22/1612/usr/share/bash-completion/completions/asciidoc
/snap/core22/1612/usr/share/bash-completion/completions/asciidoc.py
/snap/core22/1612/usr/share/bash-completion/completions/javadoc
...(以下省略)...

ポイント

  • ファイルパス名に bashdoc両方 が含まれるファイルのみが表示されます。
  • AND検索を行うことで、より絞り込んだ検索が可能になります。

まとめ

  • locateコマンドは、ファイル名データベースを利用して高速にファイルを検索できる便利なコマンドです。
  • インストールと初期設定
    ・システムにlocateコマンドがない場合は、sudo apt install plocateでインストールします。
    ・インストール直後はsudo updatedbでデータベースを作成します。
  • 使用上の注意
    ・データベースは定期的に自動更新されますが、最新のファイル情報を反映させたい場合は手動でupdatedbを実行します。
    locateコマンドの結果が実際のファイルシステムと一致しない場合があることを認識しておきましょう。

効果的な活用法

  • 過去に作成したファイルの検索:しばらく前に作成したファイルを高速に探したい場合に有効です。
  • システム全体のファイル検索:特定のファイル名やパターンに一致するファイルを、迅速にリストアップできます。

 locateコマンドを効果的に活用することで、大量のファイルの中から目的のファイルを迅速に見つけ出すことができます。さまざまなオプションを組み合わせて、ニーズに合わせた検索を行いましょう。