はじめに

こんにちは!今回はwhichコマンドについて学んでいきましょう。

whichは、実行可能なコマンドがどこに保存されているのかを調べるコマンドです。「このコマンド、どこにあるんだろう?」って時に超便利です。

whichコマンドとは

whichコマンドは、指定したコマンドが実際にどこに保存されているか、そのフルパスを表示する外部コマンドです。PATH環境変数で設定されているディレクトリから、最初にマッチしたコマンドの場所を表示します。

コマンドが実際に存在するか確認したり、複数のバージョンがある場合にどちらを使ってるか調べたりするのに便利ですね。

基本構文

1
which [オプション] コマンド名

複数のコマンドを同時に指定することもできます。

主なオプション

オプション 説明
-a PATH内で見つかったすべてのコマンドを表示
-s 見つからない場合も終了コードを返さない

使用例

例1: 基本的な使い方(lsコマンドの場所)

1
which ls

実行結果:

1
/bin/ls

lsコマンドが/bin/ディレクトリに保存されていることがわかります。

例2: grepコマンドの場所

1
which grep

実行結果:

1
/bin/grep

例3: 複数のコマンドを同時に調べる

1
which ls cd pwd

実行結果:

1
2
3
/bin/ls
/bin/cd
/bin/pwd

複数のコマンドを指定すると、それぞれの場所が表示されます。

例4: 存在しないコマンドを調べる

1
which nonexistent

実行結果:

1
(何も表示されない、終了コード1)

存在しないコマンドだと何も表示されません。

例5: -aオプションで全バージョンを表示

1
which -a python

実行結果:

1
2
/usr/bin/python3
/usr/bin/python

複数のバージョンがある場合、すべて表示されます。これ便利!

例6: 自分で作ったスクリプトを調べる

1
which myscript

実行結果:

1
/home/user/scripts/myscript

PATHに含まれているディレクトリに置いたスクリプトも調べられます。

例7: whichコマンド自体の場所

1
which which

実行結果:

1
/usr/bin/which

コマンドの場所を調べるコマンド自体の場所も調べられます。面白い!

例8: typeコマンドとの違い

1
2
3
4
5
# whichで確認
which cd

# typeで確認
type cd

実行結果:

1
2
(whichは何も表示されない)
cd is a shell builtin

cdは組み込みコマンドなので、whichでは見つかりません。

Tips・注意点

typeコマンドとの違い

  • which: 外部コマンドのみ検索(PATH内のみ)
  • type: 組み込みコマンドも検索できる

組み込みコマンド(cdechoなど)を調べたい場合はtypeを使う必要があります。

PATH環境変数

1
echo $PATH

whichが検索するディレクトリはPATH環境変数で指定されています。この順序でコマンドが検索されます。

コマンドが見つからない場合

1
which python

このコマンドが何も表示されない場合、PATHに該当するディレクトリが含まれていない可能性があります。

スクリプトの実行可能権限

1
2
3
chmod +x ~/scripts/myscript
export PATH="$PATH:$HOME/scripts"
which myscript

自分で作ったスクリプトをwhichで見つけるには、実行可能権限があり、PATHに含まれている必要があります。

実践的な使い方

Pythonのどのバージョンが使われているか確認

1
2
which python3
which -a python

複数のPythonがインストールされている環境で、どのバージョンが実行されるか確認できます。

エイリアスとコマンドの実在確認

1
2
3
4
which ls
# エイリアスを設定
alias ls='ls --color=auto'
which ls

エイリアスを設定した場合、whichではなくtypeで確認すると便利です。

インストールされたコマンドを一括確認

1
2
3
4
for cmd in grep sed awk find; do
  echo -n "$cmd: "
  which $cmd || echo "not found"
done

複数のコマンドがインストールされているか確認できます。

PATHの確認

1
echo $PATH | tr ':' '\n'

whichで見つからないコマンドがある場合、PATHを確認してみましょう。

まとめ

whichコマンドのポイント:

  • コマンドのフルパスを表示する外部コマンド
  • PATH環境変数内から検索
  • 複数のコマンドを同時に指定可能
  • -aオプションで全バージョンを表示
  • 組み込みコマンドは見つからない(その場合はtypeを使用)
  • スクリプトやPATHのトラブルシューティングに便利

whichコマンドは、コマンドライン環境を理解する上で欠かせない小さなツール。困った時に使い分けてください!