Linuxでのlocateとwhichの違い


27

Linux locatewhichLinuxの違いは何ですか?

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


この関連を参照してくださいunix.stackexchange.com/a/60208/84427
しゃれ

whereともありwhereisます。
1月Tojnar

bashでは、好む:type -all acommand。そして、あなたの質問の背後にあるXYProblemを読んだ場合、あなたはコマンドを持っているので、locateを介してそれを見ることができますが、それを実行できませんか?次に、特定のユーザーの~/.profileファイルでPATHを編集するか、グローバル/etc/profileファイルで何をすべきかを確信している場合[警告:間違ったパスを追加すると、システムスクリプト(および場合によっては多くのOS)を破損する可能性があります/ etc / profile ...の$ PATH(例:通常elswhereにあるコマンドを含むパス)。変数の最後にのみ追加することをお勧めします。そして入れないで下さい::または. そのPATH内の任意の場所。
オリビエデュラック

回答:


45

違いは何であるlocateとはwhich

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

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

ソースLocate(1)-Linux manページ

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

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

ソースupdatedb(8)-Linux manページ


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

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

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

ソースwhich(1)-Linux manページ


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

どういう意味ですか?

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

あなたは、名前の実行可能ファイルまたはスクリプトがありませんmentor、あなたの中にPATH


2
「updatedb」-物事に対して過度に非特定的な名前を思い付くのはマイクロソフトだけではないことを知っておくと良いでしょう。(Win32ではDeleteObject、GDIオブジェクトの削除、CloseHandleカーネルハンドルのクローズなど。同様updatedblocateDBを更新します)
-user253751

「which」は、パス内のさまざまな場所で同じプログラムの複数のバージョンが起動している可能性がある場合にも特に役立ちます。したがって、コマンドを実行すると実際に実行されるバージョンがわかります。これは以前、予期しない動作を診断するのに役立ちました-たとえば、システムに手動でインストールされたバージョンのユーティリティを残して、パッケージマネージャーによってインストールされたバージョンを上書きしていることを認識するのに役立ちました。
カーサー

11

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

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


2
ソースの帰属を提供してください—回答の説明は、それらのユーティリティのマニュアルページから直接取得されます。
モニカiamnotmaynard

5

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

whichPATH環境変数によって解釈されるディレクトリ内のコマンドのフルパスを検索するコマンドです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.