
新Linux入門|外部コマンドの仕組みとPATH変数の役割
Linuxでは、私たちが普段使っている ls や cat、date などのコマンドの多くは「外部コマンド」と呼ばれます。
これらはシェル(bash)の内部に組み込まれている機能ではなく、システム上に存在する実行ファイル なんです。
そして、これらの外部コマンドを探し出す手助けをしているのが、PATH変数。
PATHは「どのフォルダの中から実行ファイルを探すか」を教えてくれる、Linuxのとても重要な環境変数です。
この記事では、外部コマンドがどのように実行されるのか、そしてPATH変数がどんな役割を果たしているのかをわかりやすく解説します。

⚙️ 外部コマンドとは?
外部コマンド(External Command) は、シェルの外にあるプログラムファイルです。
つまり、シェル自身が持つ「組み込みコマンド(cd, alias など)」とは違い、
/usr/bin や /bin などに置かれた実行可能ファイルが呼び出されて動作します。
📘 外部コマンドの代表例
| コマンド | 概要 | 実行ファイルの場所(例) |
|---|---|---|
| ls | ディレクトリ内のファイル一覧を表示 | /usr/bin/ls |
| date | 現在の日付と時刻を表示 | /usr/bin/date |
| cp | ファイルをコピー | /usr/bin/cp |
| mv | ファイルを移動または名前変更 | /usr/bin/mv |
| cat | ファイル内容を出力 | /usr/bin/cat |
💬 外部コマンドは「単なるプログラムファイル」です。
実際には /usr/bin/date のようにフルパスを指定して実行できますが、
毎回そのように入力するのは面倒ですよね。
その不便さを解消するのが PATH変数 です。
🧭 PATH変数の役割
PATH変数 は、シェルがコマンドを探す場所を定義している環境変数です。
ユーザーが date と入力したとき、シェルは次のような流れで動きます。
- 入力された date が組み込みコマンドかどうかを確認。
- 組み込みでなければ、PATHに登録されたディレクトリを左から順に検索。
- 最初に見つけた実行ファイルを実行。
- どこにも見つからなければ「コマンドが見つかりません」とエラーを表示。
📘 PATHの確認方法
[suzuki@AlmaLinux ~]$ echo $PATH
/home/suzuki/.local/bin:/home/suzuki/bin:/usr/local/bin:
/usr/local/sbin:/usr/bin:/usr/sbin💬 この結果から、シェルは /usr/local/bin → /usr/local/sbin → /usr/bin … の順に検索していくことがわかります。
つまり、date コマンドは /usr/bin にあるため、フルパスを指定しなくても動作します。
🔍 実際に確認してみよう
① whichコマンドで場所を調べる
which コマンドは、指定したコマンドの実行ファイルがどこにあるかを表示します。
📘 書式
which コマンド名📘 使用例
[suzuki@AlmaLinux ~]$ which date
/usr/bin/date💬 これで date コマンドが /usr/bin/date にあることがわかります。
② 実際のファイルを確認する
ls -l コマンドで、実行ファイルが本当にその場所にあるかを調べます。
📘 例
[suzuki@AlmaLinux ~]$ ls -l /usr/bin/date
-rwxr-xr-x. 1 root root 62200 1月 28 2024 /usr/bin/date💬 実行権限(-rwxr-xr-x)が付いており、誰でも実行できることがわかります。
③ フルパス指定で実行する
もちろん、PATHに関係なくフルパスを指定して実行することもできます。
📘 例
[suzuki@AlmaLinux ~]$ /usr/bin/date
2024年 1月 28日 日曜日 14:10:06 JST💬 ただし、毎回 /usr/bin/date と打つのは大変なので、PATHに登録されたおかげで単に date だけで実行できるのです。
🧩 PATH変数の設定と変更
PATHは環境変数なので、追加・変更も可能です。
📘 PATHの追加
[suzuki@AlmaLinux ~]$ export PATH=$PATH:/home/suzuki/mybin💬 $PATH の後ろにコロン : でつなげて新しいパスを追加します。
これにより /home/suzuki/mybin の中にある実行ファイルも呼び出せるようになります。
📘 設定を永続化する場合
[suzuki@AlmaLinux ~]$ vi ~/.bashrc
export PATH=$PATH:/home/suzuki/mybin
[suzuki@AlmaLinux ~]$ source ~/.bashrc💬 これで次回ログインしてもPATH設定が維持されます。
⚠️ PATH設定のセキュリティ注意点
PATHの設定を誤ると、セキュリティ上のリスクが発生します。
特に、「カレントディレクトリ(.)」をPATHに追加するのは危険です。
| 注意点 | 理由 |
|---|---|
.(カレントディレクトリ)をPATHに入れない | カレントディレクトリに悪意ある同名スクリプトがあると、それが先に実行されてしまう可能性がある |
| 不要なディレクトリを含めない | 権限のないファイルを誤って実行するリスクがある |
| 編集前にバックアップを取る | .bashrc や /etc/environment のバックアップを忘れずに |
🧠 組み込みコマンドとの違い
外部コマンドと似た名前の組み込みコマンドが存在する場合、通常は組み込みコマンドが優先されます。
📘 確認コマンド
[suzuki@AlmaLinux ~]$ type echo
echo はシェル組み込みコマンドです
[suzuki@AlmaLinux ~]$ type date
date は /usr/bin/date です💬 このように、echo はbash内部の組み込みコマンドですが、date は外部コマンドです。
✅ まとめ
- 外部コマンドは、シェル外に存在する実行ファイル(例:/usr/bin/ls)
- PATH変数は、シェルが外部コマンドを探す「検索ルート」を定義する
- echo $PATH で確認、export PATH=... で追加可能
- 組み込みコマンドがある場合はそちらが優先される
- セキュリティ上、
.(カレントディレクトリ)はPATHに含めない
💬 PATHと外部コマンドの関係を理解すれば、Linuxの動作の仕組みがぐっと身近になります。
日常の操作が「なぜ動くのか」がわかると、トラブルシューティングもスムーズに行えます。
