which は、打ったコマンドが実際にどのファイルを実行するのかを調べるコマンドです。PATH の探す順番、`command not found` の切り分け方、自分で入れたコマンドが見つからないときの直し方を、ブラウザ上のターミナルで打ちながら確認できます。
最終更新: 2026-09-06
which コマンド名...
PATH の中を探して、最初に見つかったファイルの場所を出します。
$ which ls
/usr/bin/ls
ls と打ったとき、実際に動いているのは /usr/bin/ls というファイルだと分かります。
複数まとめて調べることもできます。
$ which ls grep git
/usr/bin/ls
/usr/bin/grep
/usr/bin/git
シェルは、コマンド名を打たれると PATH に並んだディレクトリを左から順に探します。
$ echo $PATH
/usr/bin:/bin:/usr/local/bin
同じ名前のファイルが複数あっても、先に見つかったほうが使われます。
$ which python3
/usr/bin/python3
このターミナルには /usr/local/bin にも python3 があります。
$ ls /usr/local/bin
python3
それでも /usr/bin/python3 が答えになるのは、PATH で /usr/bin のほうが先だからです。
新しく入れたはずのバージョンが使われないときは、たいていこれが原因です。
見つからなければ、何も出ません。
$ which nosuchcmd
シェル自身が持っている命令も、何も出ません。
$ which cd
cd はファイルとして存在せず、シェルの中の機能だからです。
「which で出ない = 使えない」ではない、ということです。
~/bin/backup というスクリプトを置いた状況で考えます。
$ which backup
見つかりません。 理由は2つあり、順に潰します。 まず、実行の権限が無いと候補になりません。
$ chmod +x /home/user/bin/backup
$ which backup
それでも見つかりません。
~/bin が PATH に入っていないからです。
$ export PATH=$PATH:/home/user/bin
$ echo $PATH
/usr/bin:/bin:/usr/local/bin:/home/user/bin
$ which backup
/home/user/bin/backup
実行の権限と置き場所が PATH にあること、この両方がそろって初めて見つかります。
export で足した PATH はその端末のあいだだけ有効なので、いつも使いたいなら .zshrc や .bashrc に書きます。
which は、「思っているものが動いているか」を確かめるときに打つコマンドです。
| 場面 | 打ち方 |
|---|---|
| どのバージョンが使われているか調べる | which python3 |
| 入れたはずのツールが使えるか確かめる | which docker |
| command not found の原因を切り分ける | which <名前> と echo $PATH |
| インストール先を確かめる | which git |
シェルの組み込みは出ません。
cd や export はファイルではないので、which は答えられません。
PATH の順番が結果を決めます。
同じ名前が複数あるときは、PATH の先に書いたディレクトリが勝ちます。
入れ替えたはずのバージョンが反映されないときは、echo $PATH で並び順を見てください。
エイリアスは別の話です。
ll のようなエイリアスは PATH のファイルではないので、which では追えません。
エイリアスの中身を知りたいときは alias を打ちます。
webterm.appこのサイト
ターミナル応用
特定場面で役立つコマンドを学ぶ
learn.webterm.app別のサイト
