このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:コマンドのフルパスを表示する:whichコマンド
Linuxシステムでコマンドを実行する際、実際にそのコマンドがどこに存在しているのかを知りたいことがあります。特に、同じ名前のコマンドが複数のディレクトリに存在する場合や、コマンドが正しくインストールされているか確認したい場合などです。
このようなときに役立つのが which
コマンドです。which
コマンドを使用することで、指定したコマンドのフルパス(絶対パス)を表示することができます。ここでは、which
コマンドの使い方とその仕組みについて詳しく解説します。
シェルがコマンドを探す仕組み
Linuxのコマンドは、ディレクトリツリーのどこかにファイルとして存在しています。たとえば、cat
コマンドは /usr/bin
ディレクトリにある /usr/bin/cat
という実行ファイルです。
例:cat
コマンドの場所を確認
user01@ubuntu:~$ ls -lF /usr/bin/cat
-rwxr-xr-x 1 root root 39384 4月 5 2024 /bin/cat*
しかし、通常はコマンドを実行する際に /usr/bin/cat
とフルパスを入力する必要はなく、単に cat
と入力するだけで実行できます。これは、シェルがコマンドを探す際に、$PATH
環境変数に設定された場所から自動的にコマンドを検索してくれるためです。
$PATH
の確認
シェルがコマンドを探す場所や順序は、$PATH
環境変数で確認できます。
user01@ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
- この表示は、コマンドを探すディレクトリをコロン(
:
)で区切ったものです。 - サーチパス(または単にパス)と呼ばれます。
コマンドを探す流れ
たとえば、cat
コマンドを実行しようとすると、シェルは以下の順序でディレクトリを検索します。
/usr/local/sbin/cat
→ 見つからない/usr/local/bin/cat
→ 見つからない/usr/sbin/cat
→ 見つからない/usr/bin/cat
→ 見つかった!
実行例
コマンドが見つかると以下のようにコマンドが実行されます。
user01@ubuntu:~$ cat
hello
hello # Ctrl + D を入力
cat
コマンドが/usr/bin/cat
で見つかったため、コマンドが実行されています。Ctrl + D
を入力すると、cat
コマンドが終了します。
which
コマンドの使い方
シェルが実際にどのファイルを実行しているのかを確認したい場合、which
コマンドを使用します。
【書式】which [オプション] <コマンド名>
例:cat
コマンドのフルパスを表示
user01@ubuntu:~$ which cat
/usr/bin/cat
which
コマンドは、指定されたコマンド名を $PATH
で設定されたサーチパスから探し、最初に見つかった実行ファイルのフルパスを表示します。
複数の同名コマンドがある場合
同じ名前のコマンドが複数のディレクトリに存在する場合、which
コマンドはデフォルトでは最初に見つかったパスのみを表示します。しかし、-a
オプションを使用すると、サーチパス内のすべての同名コマンドのパスを表示できます。
例:cat
コマンドのすべてのパスを表示
user01@ubuntu:~$ which -a cat
/usr/bin/cat
/bin/cat
この結果から、cat
コマンドが /usr/bin/cat
と /bin/cat
の2か所に存在することがわかります。
まとめ
- シェルは
$PATH
環境変数に設定されたディレクトリを順に検索してコマンドを探します。 $PATH
はコロン(:
)で区切られたディレクトリのリストであり、これをサーチパスと呼びます。which
コマンドを使用すると、指定したコマンドの実行ファイルがどこにあるかを確認できます。- 基本書式:
which コマンド名
- すべてのパスを表示:
which -a コマンド名
- コマンドの実行ファイルの場所を確認することで、正しいコマンドが実行されているか、または複数のバージョンが存在する場合にどのバージョンが使用されているかを把握できます。
which
コマンドを活用して、システムのコマンド管理やトラブルシューティングに役立ててください。