このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linux基礎:コマンドとパス

コマンドとパス
Linux システムでコマンドを実行するとき、そのコマンドがどのように解釈され、どこから実行ファイルが呼び出されるのかを理解することはとても重要です。コマンドには シェルに組み込まれたコマンド(組み込みコマンド) と、システム上にある実行ファイルとして存在する 外部コマンド の2種類があります。
例えば cd や export はシェルに内蔵された組み込みコマンドですが、ls や date は外部コマンドです。シェルはコマンドが入力されると、まず組み込みコマンドかどうかを確認し、そうでなければ PATH 環境変数 に定義されたディレクトリを順番に探索して実行ファイルを探します。この PATH の仕組みを コマンドサーチパス と呼びます。
ここでは、組み込みコマンドと外部コマンドの違い、PATH の仕組み、そして実際のコマンド探索の流れを具体例を交えながら詳しく解説します。

1.コマンドの種類
1.1. 組み込みコマンド
組み込みコマンドはシェルに最初から含まれており、外部プログラムを呼び出さずにその場で実行できます。
代表的な bash の組み込みコマンドは以下のとおりです。
| コマンド | 説明 |
|---|---|
| alias | エイリアスを作成・表示する。 |
| bg | ジョブをバックグラウンドで実行する。 |
| cd | ディレクトリを移動する。 |
| echo | 引数を表示する。 |
| exit | シェルを終了する。 |
| export | 環境変数を設定する。 |
| fg | ジョブをフォアグラウンドで実行する。 |
| history | コマンド履歴を表示する。 |
| jobs | 実行中のジョブを一覧表示する。 |
| kill | プロセスにシグナルを送る。 |
| pwd | 現在の作業ディレクトリを表示する。 |
| unalias | エイリアスを削除する。 |
1.2. 外部コマンド
外部コマンドは、システム上の /bin や /usr/bin などに保存されている実行可能ファイルです。ls や cp など日常的に使う多くのコマンドはこちらに分類されます。
使用例:外部コマンドの場所を確認
[user@rocky9 ~]$ which ls
alias ls='ls --color=auto'
/usr/bin/lsこの例では ls コマンドが /usr/bin/ls に存在することがわかります。
2.PATH とコマンド探索
2.1. PATH 変数の役割
コマンドを入力すると、シェルは以下の順序で処理を行います。
- 組み込みコマンドかどうかを確認
- 外部コマンドであれば、環境変数 PATH に格納されたディレクトリを順番に探索
PATH の内容を確認するには以下のコマンドを使います。
[user@rocky9 ~]$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin この場合、シェルは /home/user/.local/bin → /home/user/bin → /usr/local/bin → /usr/local/sbin → /usr/bin → /usr/sbin の順にコマンドを探します。
2.2. 実行ファイルの確認
例:date コマンドの確認
[user@rocky9 ~]$ ls -l /usr/bin/date
-rwxr-xr-x. 1 root root 106344 5月 2 17:31 /usr/bin/date実行可能ファイルが存在していることがわかります。
2.3. 絶対パスでの実行
PATH に含まれていなくても、絶対パスを指定すれば実行可能です。※dateコマンドはPATHに含まれています。
[user@rocky9 ~]$ /usr/bin/date
2025年 9月 5日 金曜日 01:11:59 JST3.PATH の違いによる挙動
3.1. 一般ユーザーと root ユーザー
システムによって PATH の内容はユーザー権限で異なります。
一般ユーザーの PATH
[user@rocky9 ~]$ echo $PATH
/home/user/.local/bin:/home/user/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin Rocky LinuxのGUIでは、一般ユーザにも/usr/sbin という、システム管理用のディレクトリが含まれています。
root ユーザーの PATH
[user@rocky9 ~]$ su -
パスワード:
[root@rocky9 ~]# echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin 一般的に、root ユーザーには /usr/sbin や /sbin など、システム管理用のディレクトリが含まれています。※上の例では/sbin は含まれていません。
3.2. 実行されるシェルスクリプトのパス
ホームディレクトリに「bin」ディレクトリを作成し、シェルスクリプトを(today.sh)を作成します。シェルスクリプトについては、次のコンテンツで詳しく解説します。
[user@rocky9 ~]$ mkdir bin
[user@rocky9 ~]$ nano bin/today.shtoday.shの内容
today.sh に以下の内容を入力します。
#!/bin/bash
date実行権限を付与して、カレントディレクトリを確認します。
[user@rocky9 ~]$ chmod 755 bin/today.sh
[user@rocky9 ~]$ pwd
/home/usertoday.shを実行します。
[user@rocky9 ~]$ today.sh
2025年 9月 5日 金曜日 16:03:15 JSTtoday.shは、/home/user/binの中にあり、カレントディレクトリが、/home/userなのでbin/today.shとしないと、実行できないはずなのに、実行できています。
それは、user の環境変数PATH内に「/home/user/bin」があり、環境変数 PATH に格納されたディレクトリを順番に探索して、today.sh を見つけることができたからです。
それでは、root ユーザーに切り替えて次のように today.sh を呼び出してみます。
[user@rocky9 ~]$ su -
パスワード:
[root@rocky9 ~]# today.sh
bash: today.sh: コマンドが見つかりませんでした...today.sh を見つけることができません。
それは、rootユーザーの環境変数PATHに「/home/user/bin」がなく、このスクリプトを見つけることができなかったからです。
このように、環境変数PATHの内容によって、実行できるコマンドと実行できないコマンド、さらに実行できるシェルスクリプトと実行できないシェルスクリプトがでてきます。
4.確認用の主なコマンド
| コマンド | 書式 | 主なオプション | 説明 |
|---|---|---|---|
| which | which コマンド名 | なし | コマンドの実行ファイルの場所を表示 |
| type | type コマンド名 | なし | 組み込みか外部コマンドかを判定 |
| echo | echo $PATH | なし | 現在の PATH を表示 |
| ls | ls [パス] | -l | ファイルの詳細を表示 |
例:組み込みコマンドの確認
[root@rocky9 ~]# type cd
cd はシェル組み込み関数ですまとめ
- コマンドには 組み込みコマンド と 外部コマンド がある。
- 外部コマンドは PATH 変数に定義されたディレクトリから検索される。
- PATH の内容はユーザー権限によって異なり、一般ユーザーには管理用コマンドのディレクトリが含まれないことがある。
※GUIのRocky Linuxには含まれている。 whichやtypeを利用すると、コマンドの所在や種類を確認できる。
この仕組みを理解することで、コマンドやシェルスクリプトが「見つからない」といったトラブルを解決できるだけでなく、自分の環境に合わせて PATH をカスタマイズすることも可能になります。
