findコマンドは、間違いなくLinuxでファイルを検索するための最も人気のある強力なコマンドラインユーティリティの1つですが、すぐに結果が必要な状況では十分な速度ではありません。 コマンドラインからシステム上のファイルを検索する場合で、速度が最優先事項である場合は、使用できる別のコマンドがあります。検索。
このチュートリアルでは、わかりやすい例を使用して、locateコマンドについて説明します。 ここに記載されているすべての手順/例はUbuntu22.04LTSでテストされており、使用するロケートはバージョン4.8.0であることに注意してください。
1.locateコマンドをインストールします
Locateコマンドは、UbuntuおよびDebianLinuxにはプリインストールされていません。 次のコマンドを使用してインストールできます。
sudo apt install locate
Locateは、プリコンパイルされたファイル名データベースに基づいてファイル検索を実行します。これにより、後続の検索を実行するときに、たとえばfindコマンドよりもはるかに高速になります。 ただし、使用する前に、ファイルデータベースを作成して更新する必要があります。 次のコマンドを実行して、検索データベースを作成します。
sudo updatedb
これで、locateの使用を開始する準備が整いました。
2.Linuxでlocateコマンドを使用する方法
Locateコマンドは非常に使いやすいです。 あなたがしなければならないのはあなたが検索したいファイル名を渡すことです。
locate [filename]
たとえば、文字列「dir2」を含むすべてのファイル名を検索する場合は、次の方法でlocateを使用して検索できます。
ノート:コマンド’locate dir2’(アスタリスクなし)も実行されます。locateは、渡した名前(たとえばNAME)を*NAME*に暗黙的に置き換えるためです。
3.locateコマンドがどのように機能するか、またはなぜそれがとても速いのか
検索が非常に高速である理由は、検索されたファイルまたはディレクトリ名のファイルシステムを読み取らないためです。 実際にはデータベースを参照します(コマンドによって準備されます) 更新されたb)ユーザーが探しているものを見つけ、その検索に基づいて、その出力を生成します。
これは良いアプローチですが、欠点もあります。 主な問題は、システム上に新しいファイルまたはディレクトリが作成されるたびに、ツールが正しく機能するようにツールのデータベースを更新する必要があることです。 そうしないと、コマンドは、最後のデータベース更新後に作成されたファイル/ディレクトリを見つけることができません。
たとえば、システムの「ダウンロード」ディレクトリで「tosearch」文字列を含む名前のファイルを検索しようとすると、 探す コマンドは、出力に1つの結果を生成します。
しかし、locateコマンドを使用して同じ検索を実行しようとすると、出力が生成されません。
これは、ファイルがシステムで作成された後、データベース検索の検索が更新されなかったことを意味します。 それでは、データベースを更新しましょう。これは、 更新されたb 指図。 これを行う方法は次のとおりです。
sudo updatedb
そして、同じ検索コマンドを再度実行すると、出力にファイルが表示されます。
同様に、ファイルまたはディレクトリが削除された後、データベースの検索が更新されていることを確認する必要があります。更新されていない場合、コマンドは検索時に出力にファイルを表示し続けます。
4.ロケートを出力に一致するエントリの数または数を印刷させる方法
これまで見てきたように、locateコマンドは、一致したファイルの名前と、それらの完全パスまたは絶対パスを出力に生成します。 ただし、必要に応じて、ツールでこのすべての情報を抑制し、代わりに一致するエントリの数または数を出力することができます。 これは、 -c コマンドラインオプション。
5.既存のファイルに対応するエントリのみを印刷するようにロケートを強制する方法
この記事の前半ですでに説明したように、ファイルがシステムから削除された場合、ロケートデータベースを再度更新するまで、コマンドはそのファイル名を出力に表示し続けます。 ただし、この特定のケースでは、データベースの更新をスキップしても、 -e コマンドラインオプション。
たとえば、システムから「filetosearch.txt」ファイルを削除しました。 これは、ファイルを検索できなくなったfindコマンドによって確認されました。
しかし、locateを使用して同じ操作を実行すると、出力にファイルが表示されたままでした。
そして、その理由はわかっています。ファイルが削除された後、locateのデータベースが更新されなかったからです。 ただし、 -e オプションはトリックをしました:
このオプションについて、ロケートのマニュアルページには次のように記載されています。「ロケートの実行時に存在するファイルを参照するエントリのみを印刷する」。
6.ロケートに大文字と小文字の区別を無視させる方法
デフォルトでは、locateコマンドが実行する検索操作では大文字と小文字が区別されます。 ただし、を使用して、ツールに大文字と小文字の区別を無視させることができます。 -私 コマンドラインオプション。
たとえば、システムには「newfiletosearch.txt」と「NEWFILETOSEARCH.txt」という名前の2つのファイルがあります。 したがって、ご覧のとおり、ファイル名は同じですが、大文字と小文字が異なります。 あなたが尋ねれば 見つける たとえば、「* tosearch *」を検索すると、出力には小文字の名前のみが表示されます。
ただし、-iコマンドラインオプションを使用すると、コマンドは大文字と小文字を区別せず、両方のファイル名が出力に生成されます。
7.ASCIINULを使用して出力エントリを分離する方法
デフォルトでは、locateコマンドが生成する出力エントリは改行( n)文字を使用して区切られます。 ただし、必要に応じて、区切り文字を変更し、改行の代わりにASCIINULを使用できます。 これは、 -0 コマンドラインオプション。
たとえば、上記の前のセクションで使用したのと同じコマンドを実行しましたが、-0コマンドラインオプションを追加しました。
したがって、改行区切り文字はもう存在しないことがわかります。NULに置き換えられています。
8.ロケートデータベースに関する情報を表示する方法
どのデータベースロケートが使用されているか、およびデータベースに関するその他の統計を知りたい場合は、 -S コマンドラインオプション。
9.locateを使用して正確なファイル名を検索する方法
デフォルトでは、locateを使用してファイル名を検索すると、渡す名前(NAMEなど)は暗黙的に*NAME*に置き換えられます。 たとえば、ファイル名’testfile’を検索すると、*testfile*に一致するすべての名前が出力に生成されます。
しかし、要件が「testfile」と完全に一致する名前のファイルを検索することである場合はどうなりますか? この場合、正規表現を使用する必要があります。正規表現は、 -r コマンドラインオプション。 したがって、正規表現を使用して「testfile」だけを検索する方法は次のとおりです。
locate -r /testfile$
正規表現に慣れていない場合は、 ここ。
結論
Locateにはさらに多くのオプションがありますが、ここで説明したオプションは、コマンドラインユーティリティに関する基本的なアイデアを提供し、開始するのに十分なはずです。 Linuxマシンでここに記載されているすべてのオプションを試してから、ツールにある他のオプションに切り替えることをお勧めします。 manページ。
ご不明な点やご質問がございましたら、お気軽にコメントをお寄せください。
The post 初心者向けのLinuxロケートコマンド(8例) appeared first on Gamingsym Japan.