はじめに
ls と入力するだけでコマンドが実行できるのはなぜでしょうか。
逆に、インストールしたはずのコマンドで command not found が表示されるのはなぜでしょうか。
その仕組みを支えているのが 環境変数 と PATH です。
この回では、環境変数の基本、PATHの役割、設定の永続化方法について学びます。
1. 変数とは
変数とは、値を一時的に保存しておくための箱です。
シェルで使用する変数を シェル変数 と呼びます。
変数を作る
$ MYNAME=taro
変数の値を取り出すときは $ を付けます。
$ echo $MYNAME
期待される出力(例):
taro
注意:変数代入時は
=の前後にスペースを入れません。
誤った例:
$ MYNAME = taro
正しい例:
$ MYNAME=taro
2. 環境変数
シェル変数は現在のシェルでしか利用できません。
一方で環境変数は、そこから起動するプログラムにも引き継がれます。
環境変数にする
$ export MYNAME
または作成と同時に指定できます。
$ export MYNAME=taro
環境変数一覧を表示する
$ env
期待される出力(例):
HOME=/home/username
USER=username
LANG=ja_JP.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
よく使う環境変数
| 環境変数 | 意味 |
|---|---|
HOME | ホームディレクトリ |
USER | ユーザー名 |
PATH | コマンド検索先一覧 |
LANG | 言語設定 |
3. PATHとは
PATHは、コマンドを探す場所の一覧です。
中身を確認してみましょう。
$ echo $PATH
期待される出力(例):
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
コロン(:)区切りでディレクトリが並んでいます。
シェルはコマンドを実行するとき、この一覧を左から順に検索します。
例えば ls は次の場所に存在します。
$ which ls
期待される出力(例):
/usr/bin/ls
/usr/bin がPATHに含まれているため、ls と入力するだけで実行できます。

command not found の原因
次のようなエラーは、コマンドがPATH上に見つからないことを意味します。
$ sample-command
command not found
原因として次のようなケースがあります。
- コマンド名の入力ミス
- インストールされていない
- PATHに含まれていない場所にある
4. PATHへディレクトリを追加する
自作プログラムなどを名前だけで実行したい場合はPATHへ追加します。
$ export PATH="$PATH:/home/username/bin"
既存のPATHの後ろへ追加されます。
重要なポイント
必ず先頭に $PATH を含めます。
正しい例:
$ export PATH="$PATH:/home/username/bin"
誤った例:
$ export PATH=/home/username/bin
誤った設定を行うと、既存のPATHが消えてしまいます。
その結果、ls や cat などの基本コマンドが実行できなくなる場合があります。
注意:PATHを編集するときは必ず既存の
$PATHを残しましょう。
5. 設定を永続化する
export や alias は現在のターミナルでのみ有効です。
ターミナルを閉じると設定は消えます。
永続化するには ~/.bashrc を使用します。
.bashrc に記述する例
alias ll='ls -alF'
export PATH="$PATH:$HOME/bin"
これらは新しいターミナルを開くたびに自動実行されます。
設定を反映する
$ source ~/.bashrc
現在のターミナルへ即時反映できます。
バックアップを取る
$ cp ~/.bashrc ~/.bashrc.bak
問題が発生した場合は復元できます。
$ cp ~/.bashrc.bak ~/.bashrc
演習
課題:環境変数とPATHを確認する
環境変数を表示します。
$ echo $HOME
$ echo $USER
期待される出力(例):
/home/username
username
PATHを確認する
$ echo $PATH
コロン区切りでディレクトリが並んでいることを確認してください。
シェル変数を作る
$ MYNAME=taro
$ echo $MYNAME
期待される出力(例):
taro
envとgrepを組み合わせる
$ env | grep HOME
期待される出力(例):
HOME=/home/username
演習の確認ポイント
- ☐
echo $HOMEとecho $USERを実行できる - ☐
echo $PATHの内容を確認できる - ☐ シェル変数を作成して表示できる
- ☐ PATHの役割を説明できる
- ☐
command not foundの原因を説明できる