見つけると探す:違いは何ですか
特定のファイルを1つまたは複数検索する必要がある場合、Linuxシステムにはそれらを見つけるための強力な方法がいくつかあります。たとえば、findコマンドやlocateコマンドなどです。これらのコマンドはどちらも同じ目的を持っていますが、ファイルを見つけるために異なる手法を使用しています。特定の名前のファイルを検索することもできますが、特定の命名パターンに従うファイルを検索することもできます。
これはファイルサイズ、ファイル拡張子、またはその他の多くのオプションに基づいてファイルを見つけることにまで広げることができます。このチュートリアルでは、findコマンドとlocateコマンドの違い、各コマンドの使用例について学びます。チュートリアルの最後には、どの状況でどのコマンドがより適切なのかを知ることができるでしょう。
このチュートリアルでは、あなたは学びます:
findコマンドとlocateコマンドの違いは何ですか?findとlocateの長所と短所- Linuxに
locateをインストールする方法 findおよびlocateのLinuxコマンドの使い方とその例
探すと見つける: その違いは何ですか?
findコマンドは、すべてのLinuxディストリビューションで標準装備されており、デフォルトで含まれています。このコマンドは、多数のパラメーターに基づいてファイルを検索し、非常に細かい検索を行うことができます。ファイルの名前、サイズ、所有者、変更日、その他のオプションに基づいてファイルを見つけることができます。
findはリアルタイムでファイルを検索します。つまり、実行時に指定されたディレクトリをクローリングして検索クエリを処理します。大きなファイルシステムや深いサブディレクトリでは、こうした検索には時間がかかることがあります。特に、遅いコンピュータや古いスタイルのハードディスクの場合はそうです。ソリッドステートドライブ(SSD)と浅いディレクトリの深さは、より速い結果をもたらします。
findは多くの状況で便利であり、検索結果として返されたファイルに対してコマンドを実行することもできます。また、正規表現の構文を受け付け、xargsにパイプして、大量のディレクトリに散らばったファイルの操作を迅速かつスムーズに行うことができます。
locateコマンドはfindほど知られておらず、Linuxディストリビューションではデフォルトのコマンドとして含まれていないことが多いですが、パッケージマネージャを通じて簡単にインストールできます。locateはファイル名に基づいてファイルをマッチングするため、詳細な検索を行うことはできませんが、正規表現などの複雑な構文を受け入れることができます。
locateは、システム上のファイルのデータベースを作成し、その場所とともに保存し、実際にハードドライブをスキャンして一致するファイルを探すのではなく、そのデータベースを検索して一致を探します。これにより、locateは非常に迅速な結果を生成することができ、数秒で一致するファイルをファイルシステム全体から効果的に検索できます。
locateはデータベースを使用しているため、このデータベースは常に更新されているわけではなく、最近作成されたファイルを見つけることができません。ユーザーは手動でupdatedbを実行してlocateデータベースを更新するか、自動的にバックグラウンドでデータベースが更新されるのを約1日待つことができます。
長所と短所
ほとんどの状況では、locate コマンドと find コマンドのどちらが優れているかは非常に明確です。以下の長所と短所の表を見て、特定のカテゴリにおいてどちらのツールが優れているかについての迅速な情報を得てください。
| カテゴリー | 見つける | 位置を特定する |
|---|---|---|
| スピード | 浅いディレクトリ構造では高速ですが、より深い構造では遅くなる可能性があります。 | ハードドライブ全体を検索するのが非常に速い |
| 粒度 | 名前、サイズ、所有者、最終更新時刻など、多くのパラメータを受け入れます。 | ファイル名に基づいてのみ検索します |
| シンプlicity | より複雑な構文で、より多くの引数が必要です | 非常にシンプルな構文で、ファイルの名前または名前の一部を指定するだけです。 |
| 目的 | 複数のパラメータを必要とする詳細な検索に最適です。 | 名前に基づいてファイルやディレクトリを迅速に見つけるのに最適です。 |
| 拡張使用 | ファイルを削除したり、ファイルに対してコマンドを実行したり、xargsにパイプしたりなどができます。 | 単にファイルまたはディレクトリの場所を返します。 |
| 在庫状況 | Linuxにデフォルトでインストールされており、ダウンロードするものはありません。 | 通常、システムのパッケージマネージャーを介してインストールする必要があります |
| 使いやすさ | 指定されたディレクトリとサブディレクトリをリアルタイムで検索します | ファイルを検索するためには、そのデータベースにログを記録する必要があります |
Linuxにlocateをインストールする
システムのパッケージマネージャーを使用してlocateをインストールするには、以下の適切なコマンドを使用できます。
Ubuntu、Debian、およびLinux Mintにlocateをインストールするには:
sudo apt install locate
Fedora、CentOS、AlmaLinux、およびRed Hatにlocateをインストールするには:
sudo dnf install locate
Arch Linux と Manjaro に locate をインストールするには:
sudo pacman -S locate
コマンドの例を見つけて特定する
今、findとlocateの違いを理解したので、残るのはコマンドの使い方を学ぶことだけです。以下の例を見て、アイデアを得てください。
コマンドの例を見つける
-
特定のファイルを現在の作業ディレクトリとそのサブディレクトリ内で検索します:
find . -name "example.txt" /homeディレクトリおよびそのサブディレクトリ内のすべての.png画像ファイルを見つけてください:find /home -name "*.avif"findにtype -fオプションを使ってファイルのみ検索する(ディレクトリを無視する)ことを検討し、-inameオプションを使用して検索を大文字小文字を区別しないものにすることを検討してください。find /home -type f -iname "example.txt"過去7日間に変更された、ユーザー
linuxconfigが所有している、かつそのユーザーのホームディレクトリに存在するすべての.confファイルを見つけてください。find /home/linuxconfig -type f -user linuxconfig -mtime -7 -name "*.conf"もし
findコマンドがサブディレクトリに深く移動しないようにしたい場合は、-maxdepthオプションを使って制限を指定できます。例えば、このコマンドはfindを2つのサブディレクトリの深さに制限します:find . -type f -maxdepth 2 -name "example.txt"findコマンドは、-deleteオプションを指定すると、自動的に見つけたファイルを削除できます。このオプションには非常に注意が必要であり、実際に何を削除しようとしているのかを正確に把握するために、まずはこのオプションなしでfindコマンドを実行することをお勧めします。find . -type f -name "*.tmp" -delete「find」コマンドの機能は、さらに「-exec」オプションを使用することで拡張できます。このオプションを使用すると、findが見つけたすべてのファイルに対してコマンドを実行できます。たとえば、見つかったすべてのファイルのファイルパーミッションを「750」に変更してみましょう:
find . -type f -name "*.conf" -exec chmod 750 '{}' \; -print上記のコマンドでは、
'{}'は find で見つかったファイルのプレースホルダーです。-execオプションはセミコロンで終了し、これはエスケープする必要があります。したがって、\;となります。-printオプションは、すべてのファイル名とパスをターミナルに出力します。
コマンド例を特定する
コマンドの構文は非常に簡単です。検索したいファイルまたはディレクトリを指定してください。
locate example.txtlocateのキャッシュを更新するには、次のコマンドを実行できます:sudo updatedb
締めくくりの考え
このチュートリアルでは、Linuxシステムにおけるfindとlocateコマンドの違いについて学びました。それぞれのコマンドの利点と欠点、および使用例について説明しましたので、特定のシナリオにおいて、コマンドを正確にいつどのように使用すべきかを理解できるようになっています。ここでの重要なポイントは、locateは非常に速いがキャッシュされたリストを使用して結果を提供するのに対し、findはリアルタイムで動作し、多様な検索パラメータを処理できるということです。
