which ウィッチ

英語表記which

日本語表記コマンドパス探索

正式名称which

危険度安全

What does it mean?

PATH上から実行ファイルの場所を探して表示します。手軽ですが、移植性やシェル解決全体の確認ではcommand -vやtypeのほうが適することがあります。

Command Quest

which を今日の道具にする

PATH上から実行ファイルの場所を探して表示します。手軽です...

$ which [オプション] 名前 ...
関連用語13
次のコマンド0
FAQ2
参照3

概要

PATH上から実行ファイルの場所を探して表示します。手軽ですが、移植性やシェル解決全体の確認ではcommand -vやtypeのほうが適することがあります。

基本構文

which [オプション] 名前 ...

詳細解説

whichは、指定したコマンド名に対して、PATHに従って見つかる実行ファイルの場所を表示するための確認用コマンドです。インストール済みプログラムの場所を手早く知りたい時に便利です。

ただし、whichはPOSIX標準ではありません。実装差があり、環境によっては未導入、別挙動、shell script実装など差が出ます。また、aliasや関数、シェル組み込みまで含めた現在のシェル解決順を正確に知りたい場合には不向きです。

実務では、外部コマンドの実体パスをざっと確認する用途にとどめ、移植性重視のスクリプトではcommand -v、Bash対話確認ではtypeを優先するのが安全です。

このコマンドを使う場面

外部コマンドの実体パスを手早く知りたい時、複数のPATH候補があるか確認したい時に使います。

まず安全に試す方法

1. which ls
2. which -a python3
3. command -v ls
4. type ls

3分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. lsやcdを対象にwhich、command -v、typeの出力差を比べます。

オプション

  • -a
    見つかった候補をすべて表示します。実装によって利用可否が異なります。
    which -a python3

実行結果サンプル

  • which ls
    /usr/bin/ls

戻り値コード

  • 0 少なくとも1件見つかりました。
  • 1 見つかりませんでした。
  • >1 実装依存のエラーが起きました。

使用例

  • which ls
  • which -a python3
  • which grep

よくあるエラー

  • whichでは見つからないのにコマンドは実行できる
    原因: 現在のシェルでaliasや関数として定義されている可能性があります。
    対処: typeやcommand -vで確認します。
  • 環境によってwhich -aが使えない
    原因: whichは標準仕様ではなく、実装差があります。
    対処: 移植性が必要ならcommand -vを基本にします。

導入・互換性情報

whichはPOSIX標準ではありません。実装差があり、利用可否、オプション、aliasや関数の扱いが環境で異なります。移植性重視ならcommand -vを優先します。

  • Debian GNU/Linux / 13 / Bash 5.2.37

注意点 / セキュリティリスク

危険度は低いですが、whichの結果だけでaliasや関数が無いと判断すると誤認につながります。診断用途ではtypeやcommand -vと使い分けてください。

FAQ

  • Q. whichはスクリプトで使ってもよいですか。
    A. 単純用途なら動くこともありますが、移植性や正確さを重視するならcommand -vのほうが無難です。
  • Q. whichとtypeはどう違いますか。
    A. whichは外部コマンドの場所確認寄りで、typeは現在のシェル解決全体の確認に向きます。

関連用語

  • PATH
  • shebang
  • interpreter
  • Python
  • Perl
  • Ruby
  • Go
  • Rust
  • Java
  • Node.js
  • pip
  • virtual environment
  • venv

参照リンク

関連記事