パス検索コマンドの違い(which,whereis,type,hash)

まずはwhichとwhereisの違いをmanで見てみると、

  • which - shows the full path of (shell) commands.
  • whereis - locate the binary, source, and manual page files for a command

whichがコマンドのフルパスを表示するのに対して、whereisはbinary, source, and manual pageの三点のパスを表示する。
コマンドのパスを検索するという目的ではwhichを使うべき。

次にtypeを見てみると、

  • With no options, indicate how each name would be interpreted if used as a command name.

オプションなしで実行された場合、コマンド名として使われればどのように解釈されるかを表示する。
表示形式は、
コマンド名 is フルパス
フルパスのみを表示したければ、オプションに-Pを指定してPATH searchを行わせる。
あるいは-pでも、type -tの結果がfileであれば、コマンドとして解釈した時のファイル名を返してくれる。
※type -t name の結果がalias, keyword, function, builtinであれば何も返さない。

最後にhash

  • For each name, the full file name of the command is determined by searching the directories in $PATH and remembered.

$PATHを検索することで、コマンドのフルパスを探す。
何もオプションをつけなければ表示されないので、表示するにはオプション-tをつける必要があるが、表示形式は以下の通り。
コマンド名 フルパス
通常はhashの戻り値が0か1かでコマンドが見つかったかどうかを判定する。
hash コマンド; echo $?
※typeも同じ

まとめ
フルパスを表示したければ、次のコマンドを実行。
which
type -P
type -p
コマンドの存在確認をしたければ、次の戻り値を確認。
type
hash

このサイトによるとtypeがベストのよう。
http://qiita.com/kawaz/items/1b61ee2dd4d1acc7cc94

-Linux