(CentOS,macOS)locateコマンドを使えるようにして、ファイルをファイル名で高速に検索できるようにする

locateコマンドは、ファイル名でファイルを高速検索できます。ここでは、CentOSとmacOSそれぞれで、locateコマンドを使えるようにする説明をしています。

※ 本ページはプロモーションが含まれています。

目的と動作環境

最終更新日:2021/5/29

locateコマンドは、ファイル名でファイル検索できます。ファイルを検索するコマンドと言うとfindコマンドがありますが、locateはfindよりも検索スピードが早いのがメリットです。

ここでは、CentOSとmacOSそれぞれで、locateコマンドを使えるようにしていきます。

・環境は以下の通りです。
OS:CentOS 7.1、macOS Big Sur(バージョン11.2.2)

【CentOS7】yumでlocateコマンドをインストールして、使ってみる

まず、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】locateコマンドを使えるようにする

今度は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
〜

(広告)Amazonでコマンド操作関連のKindleや書籍を探す。コマンド操作に強くなる!