locateコマンドは、ファイル名でファイルを高速検索できます。ここでは、CentOSとmacOSそれぞれで、locateコマンドを使えるようにする説明をしています。
※ 本ページはプロモーションが含まれています。
locateコマンドは、ファイル名でファイル検索できます。ファイルを検索するコマンドと言うとfindコマンドがありますが、locateはfindよりも検索スピードが早いのがメリットです。
ここでは、CentOSとmacOSそれぞれで、locateコマンドを使えるようにしていきます。
・環境は以下の通りです。
OS:CentOS 7.1、macOS Big Sur(バージョン11.2.2)
まず、CentOS7の場合です。私の環境のCentOS7にはデフォルトでlocateが入っていなかったので、yumでmlocateをインストールします。
$ yum -y install mlocate
読み込んだプラグイン:fastestmirror
このコマンドを実行するには root である必要があります。
$ sudo yum -y install mlocate
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
* remi-safe: ftp.riken.jp
* updates: ftp-srv2.kddilabs.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ mlocate.x86_64 0:0.26-8.el7 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
〜
Transaction test succeeded
Running transaction
インストール中 : mlocate-0.26-8.el7.x86_64 1/1
検証中 : mlocate-0.26-8.el7.x86_64 1/1
インストール:
mlocate.x86_64 0:0.26-8.el7
完了しました!
インストールできたので、早速locateコマンドを使ってみます(試しにphp.iniファイルを検索してみる)。
$ locate php.ini
locate: stat () `'/var/lib/mlocate/mlocate.db' できません: そのようなファイルやディレクトリはありません
mlocate.dbが存在しないというエラーが出ました。どうやら最初にファイル検索をするためのデータベース(mlocate.db)を作成する必要があるようなので、そのためにupdatedbコマンドを実行します。
$ sudo updatedb
再度、locateコマンドを実行してみます。
$ locate php.ini
/etc/php.ini
/etc/php.ini.orig
/etc/php.ini.rpmnew
/usr/share/doc/php-common-7.4.16/php.ini-development
/usr/share/doc/php-common-7.4.16/php.ini-production
今度はできました。かなり高速で検索してくれます!
また、新規にファイルを作成したり、既存ファイルのファイル名を変更した場合、ファイル検索のデータベースを更新してあげないと、新しいファイル名が検索対象になりません。
ファイル検索のデータベースを更新するには、updatedbコマンドを実行すればできます。
$ sudo updatedb
今度はmacOSの場合です。macのターミナルでlocateコマンドを実行してみると、WARNINGメッセージが出ました。
$ locate index.html
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.
コマンド自体は最初から使えるようですが、ファイル検索のためのデータベースファイル(locate.database)が存在しないからダメという意味ですね。
ですので、書かれている通りにlaunchctlコマンドを実行します。
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
これで時間を置いた後に、再度locateコマンドを実行してみたけど、ずっと同じWARNINGメッセージが出続けて実行できません(/var/db/locate.databaseファイルも作成されない) 。
ここでネットで調べてみたら、下記のlocate.updatedbコマンドを実行する必要があるらしいので、実行します。
$ sudo /usr/libexec/locate.updatedb
locate.updatedbコマンドが実行し終えるまで少し時間がかかりました。
そして、再度locateコマンドを実行したら、検索できるようになりました。
$ locate index.html
/Applications/3Hub.app/Contents/Resources/index.html
/Applications/Eclipse_2020-06.app/Contents/Eclipse/plugins/org.eclipse.wildwebdeveloper_0.5.10.202008281220/node_modules/less/test/sourcemaps/index.html
/Applications/Ecli
〜