which / whereisの違い


112

違いは何だwhichとはwhereis


申し訳ありませんが、私の10.5.8 OS Xシステムでは、whereisとwhereisは常に同じ結果になります。私は同意するので、これ非常にOS X固有の質問かもしれませんが、異なる結果が予想されます。たぶんwhereisは、すべきことを遵守していません。少なくとも2つの例(以下を参照)は機能していません。whereislsとwhereis phpは、常に同じ結果を返します...誰もこれを確認できますか?Snow Leopardは同じように動作しますか?
ウルフ

ええ、それが私がこの質問をした理由です。
mk12

@Wolfはwhichwhereis異なる例(macOS Sierra上)の出力例です。apple.stackexchange.com/questions/259047/…
Matthew

@ mk12 type優れているように感じます。また、定義されたエイリアス、関数などについても知っています
phil294

回答:


121

について学びwhereiswhich使用するのはwhatisどうですか?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

基本的に、whereis「有用な」ファイルをwhich検索し、実行可能ファイルのみを検索します。

私はめったに使用しませんwhereis。一方which、特にスクリプトでは非常に便利です。which次の質問に対する答えは次のとおりです。このコマンドはどこから来たのですか?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2

34
whatisについて知りませんでした、ありがとう。
mk12

1
ところで、この質問はすべてのUNIXバリアント(Linux、BSD、Mac OS Xなど)に適用されるため、「osx」タグを削除します
DenilsonSáMaia

UNIXに変更
mk12

1
それだけではありません。私のシステムでは、whereisとwhichは異なる実行可能パスを返します。私は実際に走る1へのパスを取得することができwhereis、ないに1つwhich
ジョーダンライター

1
@JordanReiter:できません!which実際のパスを示します。が指すパスは、whichが指すパスへの単なるシンボリックリンクではないのwhereisですか?たぶんそれはシェルエイリアスです。bashで、実行してみてくださいtype your_cmd_here
デニルソンサマイア

23

whereis 指定されたコマンドの標準* nixロケーションを検索します。

whichユーザー固有のPATHを検索します(これには、検索する場所の一部が含まれる場合があり、他の場所はwhereis含まれない場合があります。PATHに追加した場合に検索しない場所も含まれる場合があります)


* nixとは何ですか?
mk12

2
Unix、Linuxなど(Mac OS Xなど)

8
ああ、ははは、私はいつも、スタックオーバーフローが何らかの理由でそれを見るたびにunixでUを検閲していると思っていました。
mk1209

いや。同様のオペレーティングシステムのファミリを参照するために、クリエイティブなワイルドカードを使用するかなり一般的な規則。;)

6

彼らのマニュアルページを引用する:

whereis

whereisは、指定されたファイルのソース/バイナリおよびマニュアルセクションを見つけます。

例えば ​​:

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

すなわち、「php」実行可能ファイル、および他のいくつかのもの(manページなど)。


そしてどれ

現在の環境で実行されるファイルのパス名を返します

例えば ​​:

$ which php
/usr/bin/php

すなわち、「php」実行可能ファイルのみ。


1

環境変数PATHで指定されたディレクトリで実行可能ファイル検索します。そして、判明した場合、この実行可能ファイルの絶対パス名が出力されます。

$ which ls
/ bin / ls
$ which ifconfig
$#ifconfigはルートのPATHにのみ存在するため、出力はありません。

whereisは、システムによって自動的に構築されたデータベースを使用して、実行可能ファイル、ソースファイル、およびマニュアルページを検索します。

$ whereis less
less:/ bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1/less.1.gz

しかし、whereislocateは同じデータベースを使用していないようです。ソフトウェアをインストールし、whereis使用してすぐに見つけて、このソフトウェアを検索したとき。その結果、whereisはこのソフトウェアに関連するいくつかのファイルを見つけることができましたが、locate見つけることができませんでした。彼らは本当に異なるデータベースを使用していますか?データベースはどのように機能しますか?-さて、退屈することを拒否するのはどうですか?:)


updatedbコマンドを実行しましたか?ロケートは、私が覚えている限り、これに依存しています
オリバーMグレチ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.