Linuxでのlocate
とwhich
の違いは何ですか?
なぜlocate mentor
はすべてのメンターをリストしますが、which mentor
「メンターなし...」と表示されます-これはどういう意味ですか?
locate
とwhich
の違いは何ですか?locate
は、以前に構築されたデータベースを使用してファイルを見つけます。
locate
は、updatedb
(8)によって準備された1つ以上のデータベースを読み取り、少なくとも1つのパターンに一致するファイル名を1行に1つずつ標準出力に書き込みます。
updatedb
は、locate
(1)が使用するデータベースを作成または更新します。データベースがすでに存在する場合、変更されていないディレクトリの再読み取りを回避するために、そのデータが再利用されます。
updatedb
は通常、cron
(8)によって毎日実行され、デフォルトのデータベース(/var/lib/mlocate/mlocate.db
)
which
は、PATH
環境変数のディレクトリで検索して、実行可能ファイルを探します。
which
は1つ以上の引数を取ります。引数ごとに、stdout
に、この引数がシェルプロンプトで入力されたときに実行されていた実行可能ファイルの完全パスが出力されます。これは、環境変数PATH
にリストされているディレクトリで実行可能ファイルまたはスクリプトを検索することによって行われます。
bash
(1)と同じアルゴリズムを使用します。
locate mentor
はメンターをリストしますが、which mentor
は「メンターなし...」と言いますどういう意味ですか?
mentor
データベースにあるlocate
という名前のファイルがいくつかあります。
mentor
にPATH
という名前の実行可能ファイルまたはスクリプトがありません。
which
はコマンドを見つけることです(which
は現在の環境で実行されるファイル/リンクのパス名を返します)
locate
は名前でファイルを検索します(locate
はupdatedb
で準備された1つ以上のデータベースを読み取り、パターンの少なくとも1つに一致するファイル名を標準出力に1行に1つずつ書き込みます)
locate
はデフォルトでグロブパターンを取得し(正規表現パターンも使用できます)、データベースを検索します/var/lib/mlocate/mlocate.db
パターンに一致するファイル名。
which
は、PATH
環境変数によって解釈されるディレクトリ内のコマンドの完全パスを検索するコマンドです。