ウェブサイト検索

Linuxのターミナルからファイルを検索する方法


Linuxのターミナルからファイルを検索する方法

このページで

  1. 位置特定コマンドを使用してください
  2. 検索コマンドを使用します

Linuxではファイルやディレクトリを検索して特定する方法はたくさんありますが、おそらく最も簡単で迅速なのはターミナルを通じて行う方法です。しかし、多くのLinuxユーザーはこの方法を知らないため、不必要なフラストレーションが生じています。ここでは、システム内で探しているものを見つける手助けとなることを願って、簡単なガイドを紹介します。ここでは、二つの異なる検索アプリケーションについて説明します。一つは、検索を高速化するためにデータベースを使用するlocateコマンド、もう一つはファイルシステム上で直接検索操作を行うfindコマンドです。

位置特定コマンドを使用してください

「locate」コマンドは、Linuxユーザーが最初に利用すべき手段です。なぜなら、それは他のどの方法よりもはるかに速いからです。この優れたスピードの理由は、locateコマンドが必要なファイルやディレクトリをローカルハードディスク上で実際に検索しているのではなく、システム内のすべてのファイルパスを含むmlocate.dbデータベースファイルを読み込んでいるからです。

locate をまだインストールしていない場合は、これらのコマンドを使用してください:

Debian と Ubuntu

sudo apt install locate

CentOS、AlmaLinuxおよびRocky Linux

dnf install locate

初回使用のための位置特定コマンドを準備する

初めて使用する前にmlocate.dbデータベースを更新するには、次のコマンドを実行してください:

sudo updatedb

locateを使用するには、ターミナルを開き、locateと探しているファイル名を入力します。この例では、名前に「sunny」という単語が含まれているファイルを検索しています。

locate sunny

Locate は、検索キーワードがデータベースに何回一致するかも教えてくれます。これは、“-c” パラメータをコマンドに含めることで実現されます。このパラメータは “カウント” を意味します。

locate -c sunny

ここでユーザーが念頭に置くべきことは、「locate」は探しているファイルの具体的かつ正確な名前を必要とするということです。他のより柔軟なツールとは対照的です。つまり、locateは名前が確実にわかっているものを見つけるのには素晴らしいですが、ファイル名を正確に覚えていない場合にはあまり役立ちません。

locate howtoforge

対

locate Howtoforge

さらに、“locate” はデータベースファイルを読み込むため、結果は古くなっている可能性があり、完全に正確ではない場合があります。この問題を軽減するために、ターミナルセッションで “sudo updatedb” と入力してファイルパスデータベースを更新できます。

locateコマンドの使い方のさらに多くの例については、こちらをご覧ください。

もしその後もあなたが探していたものを見つけられない場合、または結果の数に圧倒されている場合は、次のステップである「find」コマンドに進んでください。

検索コマンドを使用します

「find」コマンドは、より強力ですが遅い検索ユーティリティです。これは「locate」コマンドとは異なり、「find」はユーザーが探しているファイルやディレクトリを実際にディスク上で検索するからです。ファイルやディレクトリの名前を覚えていないときにそれを特定するためには、「find」が完璧です。なぜなら、「find」は特定のユーザーまたはユーザーグループに属するファイル、最近変更またはアクセスされたファイル、特定のサイズ範囲のファイル、隠しファイル、実行可能ファイル、読み取り専用ファイル、特定の権限を持つファイルを検索することができるからです。最も良い点は、ユーザーが上記の複数の条件を1つの「find」コマンドで組み合わせることができ、結果を絞り込むことができることです。

絞り込むということに関して言えば、"find" を実行する際に最初にやりたいことは、特定のディレクトリで検索するように指示することです。これにより、検索プロセスが大幅に速くなりますが、常にディレクトリのサイズに依存します。ファイルがどこにあるか知っている場合は、ターミナルを開き、ディレクトリに移動して "find . [filename]" を実行します。そのドットは、現在のディレクトリで検索するように指示します。ホームディレクトリを検索したい場合は、ドットを "~/" に置き換え、ファイルシステム全体を検索したい場合は、"/" を使用します。

例として、ダウンロードディレクトリにポスターを含むファイルを検索したいと思います。ファイル名に「poster」という単語が含まれていることは知っていますが、正確な名前は覚えていません。このため、端末で「cd Downloads」を使ってダウンロードフォルダに移動し、その後コマンドを入力します:

sudo find . -name "*poster*"

こちらが結果です:

これは、ダウンロードフォルダーに「billy_poster copy」と名付けられたPDFファイルが存在することを示しています。それがどこにあるのか知らなかった場合でも、「find」を使えば、親ディレクトリで検索したときにダウンロードフォルダーにあることがわかるでしょう。

さて、もし「-name」パラメータを「-iname」に置き換えると、文字の大文字小文字に関係なく結果を得ることができます。それは「locate」にはない機能なので、ファイル名が確実でないときに役立ちます。

sudo find . -iname "*poster*"

さて、もし私がまだその同じポスターのファイルを探しているとしましょう。そして、私が覚えている唯一のことは、それが5MB未満のサイズであるということです。その場合、私が使用するコマンドは次のとおりです:

find ~/ -size -5M

もしそれが例えば2MBより大きいことが分かっていたら、コマンドは「find ~/ -size +2M」となります。最も良い点は、findがブール演算子をサポートしていて、検索をさらに強化できることです。この例では、ファイルが5MB未満で、2MBより大きいという私の知識を組み合わせたコマンドを使用します。このコマンドは次のようになります:

find / -size -5M -and -size +2M

最後に、ファイルについて何も思い出さないが、3分前にアクセスしたことだけは覚えていると仮定しましょう。それを見つけるには、次のようにfindコマンドを使用します:

find / -amin -3

これは「find/-amin -30」で30分間、そして「-amin -120」で2時間などになります。もし2日前にファイルにアクセスした場合、代わりにこれを使ってください:

find / -time -2

これは、検索の場所で過去2日間にアクセスされたすべてのファイルを表示します。

上記は通常の使用ケースシナリオのほとんどをカバーしていると思います。強力な「find」コマンドについての詳細は、ターミナルを開いて「man find」と入力してください。探しているものが見つかることを祈っています。

Linuxのfindコマンドのさらなる例はここにあります。

関連記事: