Linuxコマンドlocateは、数千個のファイルがあるシステムで特定のファイルやディレクトリを素早く見つける際に便利です。この記事では、locateコマンドと更新されたmlocate、plocateについて説明し、これらのコマンドを最も効率的に使用する方法を解説します。
目次
Linuxコマンドlocateとは?
locateコマンドは、Linuxシステムでファイルやディレクトリの位置を素早く見つけることができるツールです。このコマンドは、システム内のファイルデータベースを使用して検索を行うため、非常に迅速に結果を返します。データベースには、ファイルの完全なパスと名前が保存されており、それに基づいて検索が行われます。
locateコマンドの基本的な使い方
locateコマンドの基本的な使い方は非常に簡単です。例えば、特定のファイルを探したい場合は、次のようにコマンドを入力すると、システムに保存されたデータベースを基に、ファイル名が含まれるパスをすべて出力します。
locate ファイル名
ShellScriptlocateコマンドの動作原理
locateは、/var/cache/locate/locatedbファイルに保存されたデータベースを使用します。plocateの場合、/var/lib/plocate/plocate.dbファイルを使用します。このデータベースファイルは、updatedbコマンドを実行してシステムのファイル構造をスキャンすることで更新されます。crontabを利用して毎日決まった時間にデータベースを更新したり、手動でデータベースを更新することもできます。
以下のコマンドは、システム内のすべてのファイルを再スキャンし、データベースを最新の状態に保ちます。
sudo updatedb
ShellScriptmlocateとplocateの違い
locateコマンドの派生版には、mlocateとplocateがあります。これらの2つは、locateの欠点を補ったり、特定の状況でより優れたパフォーマンスを提供するために開発されました。
mlocate
mlocateは「Merging Locate」の略で、locateの改良版です。最大の違いは、データベースをマージする方法です。mlocateは、新しいファイルシステムデータベースを生成する際に既存のデータベースを破棄せず、既存のデータベースとマージします。このため、パフォーマンスが向上し、システムへの負荷が軽減されます。また、ファイルアクセス権を考慮してデータベースが構成されるため、ユーザーは自分がアクセスできないファイルのパスを検索できないため、セキュリティ面でも優れています。
plocate
plocateは、最近登場したlocateのもう一つの派生版で、mlocateよりも高速な検索性能を提供することを目指しています。plocateは、データベースをより効率的に圧縮してディスク容量を節約し、検索速度も大幅に向上させます。特に大規模なファイルシステムでは、plocateが非常に有利な選択肢となる可能性があります。
Ubuntu 24.04では、以下のようにsudo apt installコマンドを使用してplocateをインストールできます。
sudo apt install plocate
ShellScriptplocateをインストールすると、locateコマンドが次のようにplocateを参照していることが確認できます。つまり、従来のlocateではなくplocateを使用することになります。
各コマンドの選択と活用方法
3つのコマンドの中からどれを選ぶべきか悩むかもしれません。各コマンドには利点と欠点があるため、使用環境に応じて適切なツールを選択することが重要です。
現在私が使用しているUbuntu 24.04では、mlocateパッケージは個別に提供されておらず、locateとplocateのみがインストール可能です。特に従来のlocateを必ず使用する必要がない場合は、plocateの使用をお勧めします。
locateコマンドの主要オプション
locateコマンドには、検索結果をフィルタリングしたり、出力形式を調整したりするためのさまざまなオプションがあります。
-c オプション: 結果のカウント
locate -c where
ShellScriptファイルパスにwhereが含まれるものの数が119個であることが確認できます。ファイル名だけでなく、途中のパスにあるディレクトリ名にもwhereが含まれていれば、すべて集計されます。
-i オプション: 大文字小文字を区別せずに検索
-i オプションは、データベース内のファイルパスを大文字小文字を区別せずに検索します。
locate -i wh
ShellScript小文字のwhを検索した場合は1633件、大文字のWHを検索した場合は738件、大文字小文字を区別せずに検索した場合は2598件が検索されました。大文字小文字を区別しない場合、wHやWhも含まれるため、件数が多くなることがわかります。
-r オプション: 正規表現
正規表現は、特定のパターンに一致するファイルのみを検索したい場合に便利です。正規表現を使用して、特定のディレクトリ下のみでファイルを検索することもできます。以下のコマンドは、/etc/ディレクトリ内で.confで終わるすべてのファイルを検索します。
locate -r '^/etc/.*conf$'
ShellScriptパイプラインとgrepコマンドを併用すると、その結果からも希望する結果のみを抽出できます。以下では、/etc/ディレクトリの下にあるすべての.confファイルを検索し、結果にsystemdが含まれるものだけを抽出しています。
-n オプション: 検索結果の件数制限
-n オプションは、検索結果の出力数を制限したい場合に便利です。以下のコマンドはREADMEファイルを最大10個まで出力します。
locate -n 10 'README'
ShellScript以下の図では、検索結果が10件のみ表示されていることがわかります。
–statistics オプション
以下のオプションは、locatedbに関する統計情報を提供します。このオプションは、locateではサポートされていますが、plocateではサポートされていません。
locate --statistics
ShellScript以下の図のようにlocatedbファイルのパスを確認でき、GNU LOCATE02フォーマットが使用されていることがわかります。また、最終更新日時、Locateデータベースのサイズ、すべてのファイル名の数、そして圧縮率が83.19%であることも確認できます。
plocateをインストールしている場合、次のように「locate: unrecognized option ‘–statistics’」というメッセージが表示されます。
注意点
locateコマンドを使用する際に知っておくべきいくつかの注意点があります。
データベースの更新
データベースはリアルタイムで更新されません。最近ファイルを作成または移動した場合、updatedbコマンドを使用してデータベースを手動で更新する必要があります。
効率性
データベースを頻繁に更新しすぎると、システムリソースが多く消費される可能性があります。システムを最も使用しない時間帯にcrontabを利用して更新スケジュールを設定しておけば、より快適にシステムを使用することができます。sudoコマンドを併用してcrontabを設定することで、updatedbが正常に実行されるようになります。
sudo crontab -e
ShellScript以下の設定は、毎日午前5時ちょうどにupdatedbを実行するようにします。
0 5 * * * updatedb
Plaintextまとめ
Linuxシステムでファイルを効率的に見つけることは非常に重要な作業です。Linuxコマンドlocate、mlocate、plocateにはそれぞれ利点があり、状況に応じて適切に選択して使用することが重要です。mlocateはlocateを改善し、plocateもまたパフォーマンスを向上させており、大規模なファイルシステムで高い性能を提供します。また、locateコマンドのさまざまなオプションを使用することで、検索をさらに精密に行うことができます。データベースの更新とセキュリティの観点からは、locateよりもmlocateやplocateを利用する方が役立ちます。これらのツールを適切に活用して、Linuxシステムでのファイル検索をさらに迅速かつ効率的に行ってみてください。