新Linux入門|whichコマンドを使って実行ファイルの場所を調べよう

Linuxでは、ls や cat など、さまざまなコマンドを日常的に使いますよね。
でも、「このコマンドってどこにあるんだろう?」と思ったことはありませんか?

実は、これを簡単に調べる方法があります。
それが whichコマンド です。

 whichコマンドを使うと、指定したコマンドの実行ファイルがどのディレクトリに存在するか をすぐに確認できます。
コマンドの探索順序やPATH設定を理解する上でも、とても便利なツールなんです。

🔍 whichコマンドの概要

 whichコマンド は、指定されたコマンドがどのディレクトリにある実行ファイルとして動作しているのかを表示します。

 シェルはコマンドを実行するとき、環境変数PATH に登録されているディレクトリを左から順に検索します。
whichはその検索の仕組みを利用して、見つかった実行ファイルのパスを表示するコマンドです。

📘 コマンド書式

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

💬 例えば、ls コマンドの場所を調べたいときに使うと、
システム内のどのフォルダにその実行ファイルがあるかが分かります。

⚙️ whichコマンドの主なオプションと説明

whichコマンドには、便利なオプションがいくつかあります。
代表的なオプションを表にまとめました。

オプション説明
-aPATH内で見つかったすべての実行ファイルのパスを表示する。
--all-a と同じ意味。すべてのパスを表示する。
--skip-dotPATH内に「./」が含まれている場合、そのディレクトリを検索対象から除外する。

💬 デフォルトでは最初に見つかった1つのパスだけが表示されますが、-a(または --all)オプションを使うと、
同名のコマンドが複数の場所にある場合でも全て表示できます。

🧭 コマンドの使用例と出力結果

① lsコマンドの実行ファイルの場所を確認する

📘 例

[suzuki@AlmaLinux ~]$ which ls
alias ls='ls --color=auto'
	/usr/bin/ls

💬 ls はエイリアス(別名)設定されていて、実際の実行ファイルは /usr/bin/ls にあることが分かります。
このように、whichコマンドは「実際にどの実行ファイルが使われているのか」を明確にしてくれます。

② 複数の同名コマンドをすべて表示する(-aオプション)

📘 例

[suzuki@AlmaLinux ~]$ which -a ping
/usr/bin/ping
/usr/sbin/ping

💬 -a オプションを使うと、PATHに登録された複数のディレクトリに同じコマンドがある場合、
そのすべての場所を確認できます。
たとえば、ping は /usr/bin と /usr/sbin の両方に存在します。

③ カレントディレクトリを検索対象から外す(--skip-dotオプション)

📘

[suzuki@AlmaLinux ~]$ which --skip-dot ls
alias ls='ls --color=auto'
	/usr/bin/ls

💬 PATHに「.(カレントディレクトリ)」が含まれていても、
このオプションを使えば安全に検索できます。
セキュリティ面で安心できる使い方ですね。

④ --allオプション(-aと同義)

📘 例

[suzuki@AlmaLinux ~]$ which --all ping
/usr/bin/ping
/usr/sbin/ping

💬 --all は -a の別名です。どちらを使っても同じ結果になります。
シェルスクリプトでは可読性を重視して --all を使うこともあります。

🧠 PATH変数との関係

whichコマンドは、PATH変数 に登録されているディレクトリをもとに検索を行います。
PATHに設定された順にディレクトリを探していくため、
PATHの設定によって表示結果が変わることもあります。

📘 例:PATHの確認

[suzuki@AlmaLinux ~]$ echo $PATH
/home/suzuki/.local/bin:/home/suzuki/bin:/usr/local/bin:
/usr/local/sbin:/usr/bin:/usr/sbin

💬 この順番でディレクトリが検索されるため、ls コマンドが /usr/bin/ls にある場合、
一番最初に見つかったそのパスが表示されるわけです。

💬 この図を使うと、whichコマンドがPATHの順にディレクトリを検索して、
最初に見つけた実行ファイルの場所を返していることがひと目で理解できます。

🧰 どんな時にwhichを使う?

whichコマンドは、次のような場面でとても役立ちます。

使用場面説明
コマンドがどこにあるか調べたい時実行ファイルの場所を確認できる。
同名のコマンドが複数ある時どれが実際に使われているか確認できる。
PATH設定を確認したい時PATHの影響で正しいコマンドが呼ばれているか確認できる。
セキュリティ調査不正に上書きされたコマンドを見つけるのに役立つ。

💬 例えば、ls を自作スクリプトで上書きしてしまった場合でも、
which ls で正しい実行パスを確認すればすぐに原因が分かります。

✅ まとめ

  • whichコマンドは、指定したコマンドの実行ファイルがどこにあるかを表示するツール
  • PATH環境変数をもとに、左から順に検索して最初に見つけたファイルを表示する。
  • -a(または --all)オプションで、すべてのパスを表示できる。
  • --skip-dot オプションを使えば、カレントディレクトリを除外できて安全。
  • PATHの設定次第で検索結果は変化するため、PATHとwhichをセットで理解しておくのがポイント。

💬 Linuxでは、コマンドがどこから実行されているのかを把握することはとても大切です。
whichコマンドを使えば、その「裏側の仕組み」を簡単に確認できます!