9:環境変数とPATH

目次

はじめに

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が消えてしまいます。

その結果、lscat などの基本コマンドが実行できなくなる場合があります。

注意:PATHを編集するときは必ず既存の $PATH を残しましょう。


5. 設定を永続化する

exportalias は現在のターミナルでのみ有効です。

ターミナルを閉じると設定は消えます。

永続化するには ~/.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 $HOMEecho $USER を実行できる
  • echo $PATH の内容を確認できる
  • ☐ シェル変数を作成して表示できる
  • ☐ PATHの役割を説明できる
  • command not found の原因を説明できる

目次