Linux でファイルを素早く検索する (locate コマンド)

locate コマンドとは

Linux でファイルを検索する場合、find コマンドで検索していると思いますがファイル数やディレクトリ階層が深いと非常に検索に時間が掛ることがあり、またシステムへの負荷が大きくなってしまうことがあります。

そのような場合には locate コマンドを使ってファイルを素早く検索するようにしましょう。locate コマンドが高速にファイルを検索できる理由は、予め updatedb というコマンドを実行することによってファイルの一覧をデータベースとして 管理し、それを検索することによって素早いファイル検索処理を実現しています。

それでは早速導入から利用方法までを解説していきます。




mlocate パッケージの導入

locate コマンドは CentOS や Ubuntu では次のようにしてインストールします。

CentOS 系の場合は次のようにして mlocate パッケージをインストールします。
$ sudo yum install mlocate

Ubuntu 系の場合には次のようにして mlocate パッケージをインストールします。
$ sudo apt install mlocate


ファイル一覧データベースを作成

locate コマンドによるファイル検索ではデータベースを検索しますので、まずそのデータベースを作成します。

これは非常に簡単で updatedb コマンドを実行するだけでデータベースが構築されます。ファイル一覧データベースを作成しますので少々時間が掛る場合があります。
$ sudo updatedb

updatedb コマンドの実行が完了しても特に何も出力はされませんが、コマンドの実行が終了すればファイル一覧データベースの構築が完了したということになります。


locate コマンドでファイルを素早く検索

では実際に locate コマンドを使ってみましょう。locate コマンドはファイル名の部分一致検索をしてくれるので完全なファイル名が分からなくても、ファイル名の一部だけでも検索可能です。

ここでは "password" という文字列を含む文字列を検索してみましょう。私のマシンでは以下のような結果になりました。
$ locate password
/etc/openldap/certs/password
/etc/pam.d/password-auth
/etc/pam.d/password-auth-ac
/usr/local/dev/jdk1.6.0_45/db/docs/html/tools/rtoolsijproprefpassword.html
/usr/local/dev/jdk1.6.0_45/jre/lib/management/jmxremote.password.template
/usr/share/augeas/lenses/dist/jmxpassword.aug
/usr/share/doc/krb5-devel-1.10.3/kadmin/draft-ietf-cat-kerb-chg-password-02.txt
/usr/share/man/man3/des_read_2passwords.3ssl.gz
/usr/share/man/man3/des_read_password.3ssl.gz
/usr/share/man/man5/password-auth-ac.5.gz


パターンマッチを使って locate コマンドでファイルを素早く検索

また locate コマンドはパターンマッチを使うことが出来ますので、以下のように "/etc/openldap/certs/password" を検索する場合にディレクトリ名も 検索の一部に含めて検索することも出来ます。
$ locate certs/password
/etc/openldap/certs/password

$ locate *cer*pass*
/etc/openldap/certs/password


ファイル一覧データベースは locate コマンドを使う前に常にアップデート

locate コマンドは最後に updatedb コマンドによって構築されたファイル一覧データベースを基に検索を行うため、長期間 updatedb コマンドを実行していない場合には新しいファイルを検索できなくなってしまいます。

その場合には locate コマンドを使う前に再度前述の updatedb コマンドでファイル一覧データベースを再構築してあげましょう。