らっちゃいブログ

日々の学びと気づきを発信するブログ

locateコマンドなら迷子になったファイルも一瞬で見つかるよ!

スポンサーリンク

あのファイルどこいったかな?あのライブラリはどこにインストールされたんだろう?

そんなときこそ、locate コマンドの出番です。

locate コマンドとは

ローカルに保存されているすべてのファイル名をデータベース化し、その中からファイル検索することができるコマンドです。find のように毎回実ファイルを見に行かないため、高速に処理することができます。

事前準備

locate コマンドはほとんどの場合デフォルトでインストールされています。では何の準備が必要なのかと言いますと、locate コマンド自体はデータベースから検索するだけのコマンドですので、データベースが存在していなければ何もできないのです。したがって、事前にデータベースを作成しておく必要があります。

といっても、こちらのコマンドを実行するだけです。

$ sudo updatedb

ちなみに Mac の場合は locate コマンド実行時に以下のメッセージが出ますので、メッセージに従ってコマンドを打てばOKです。

> WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:

  sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.

初回実行時には全ファイルをデータベース化するので、数分かかります。二度目以降は差分更新になるので、数秒で終わります。

事前準備#2

これで locate コマンド自体は使える状態にはなりましたが、もうひとつやっておかなければならないことがあります。

それは、データベースの定期更新です。ローカルファイルは日々変化していますので、定期的にデータベースを最新にしておかなければ、いざというときに困ることになります。

というわけで、updatedb コマンドは cron で定期実行するように設定しておきましょう。

ファイルを検索してみる

準備ができたら、何かファイルを検索してみましょう。例えば、nginx の設定を変えたいけどどこに設定ファイルがわからないとします。いったん nginx をキーワードに検索してみましょう。

$ locate nginx
/etc/nginx
/etc/default/nginx
/etc/init.d/nginx
/etc/logrotate.d/nginx
/etc/nginx/conf.d
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/mime.types
/etc/nginx/naxsi-ui.conf.1.4.1
/etc/nginx/naxsi.rules
/etc/nginx/naxsi_core.rules
/etc/nginx/nginx.conf
/etc/nginx/proxy_params
/etc/nginx/scgi_params
/etc/nginx/sites-available
/etc/nginx/sites-enabled
/etc/nginx/sites-available/default
/etc/nginx/sites-enabled/default
/etc/rc0.d/K20nginx
/etc/rc1.d/K20nginx
/etc/rc2.d/S20nginx
/etc/rc3.d/S20nginx
/etc/rc4.d/S20nginx
/etc/rc5.d/S20nginx
/etc/rc6.d/K20nginx
/etc/systemd/system/multi-user.target.wants/nginx.service
/etc/ufw/applications.d/nginx
/lib/systemd/system/nginx.service
/usr/sbin/nginx
/usr/share/nginx
/usr/share/doc/nginx-common
/usr/share/doc/nginx-core
/usr/share/doc/nginx-common/CHANGES.gz
/usr/share/doc/nginx-common/NEWS.Debian.gz
/usr/share/doc/nginx-common/changelog.Debian.gz
/usr/share/doc/nginx-common/copyright
/usr/share/doc/nginx-core/CHANGES.gz
/usr/share/doc/nginx-core/changelog.Debian.gz
/usr/share/doc/nginx-core/copyright
...
...
...

おっとっと。たくさん出てきてしまいましたね。上の結果を見ればわかりますが、キーワードはディレクトリ名にもマッチしますので、検索対象のファイル名がわかる場合はなるべくファイル名で検索した方がよさそうです。

それでは気を取り直して、nginx.conf で検索してみましょう。

$ locate nginx.conf
/etc/nginx/nginx.conf

一発で見つかりました。しかも検索自体は一瞬なので、ストレスフリーです。

これまで find / してた人はぜひ locate コマンドを使ってみてください!