web-dev-qa-db-ja.com

LinuxでのLocateとwhichの違い

Linuxでのlocatewhichの違いは何ですか?

なぜlocate mentorはすべてのメンターをリストしますが、which mentor「メンターなし...」と表示されます-これはどういう意味ですか?

27
Naddy

locatewhichの違いは何ですか?

locateは、以前に構築されたデータベースを使用してファイルを見つけます。

locateは、updatedb(8)によって準備された1つ以上のデータベースを読み取り、少なくとも1つのパターンに一致するファイル名を1行に1つずつ標準出力に書き込みます。

ソース locate(1)-Linux man page

updatedbは、locate(1)が使用するデータベースを作成または更新します。データベースがすでに存在する場合、変更されていないディレクトリの再読み取りを回避するために、そのデータが再利用されます。

updatedbは通常、cron(8)によって毎日実行され、デフォルトのデータベース(/var/lib/mlocate/mlocate.db

ソース pdatedb(8)-Linux man page


whichは、PATH環境変数のディレクトリで検索して、実行可能ファイルを探します。

whichは1つ以上の引数を取ります。引数ごとに、stdoutに、この引数がシェルプロンプトで入力されたときに実行されていた実行可能ファイルの完全パスが出力されます。これは、環境変数PATHにリストされているディレクトリで実行可能ファイルまたはスクリプトを検索することによって行われます。

bash(1)と同じアルゴリズムを使用します。

ソース which(1)-Linuxのマニュアルページ


locate mentorはメンターをリストしますが、which mentorは「メンターなし...」と言います

どういう意味ですか?

mentorデータベースにあるlocateという名前のファイルがいくつかあります。

mentorPATHという名前の実行可能ファイルまたはスクリプトがありません。

45
DavidPostill

whichはコマンドを見つけることです(whichは現在の環境で実行されるファイル/リンクのパス名を返します)

locateは名前でファイルを検索します(locateupdatedbで準備された1つ以上のデータベースを読み取り、パターンの少なくとも1つに一致するファイル名を標準出力に1行に1つずつ書き込みます)

11
manjesh23

locateはデフォルトでグロブパターンを取得し(正規表現パターンも使用できます)、データベースを検索します/var/lib/mlocate/mlocate.dbパターンに一致するファイル名。

whichは、PATH環境変数によって解釈されるディレクトリ内のコマンドの完全パスを検索するコマンドです。

5
heemayl