流れ5の10語目 / 10

環境変数

Linux

手順書の最後の行は「社内の確認ツール checktool で設定を確かめる」です。checktool は /opt/checktool/bin に置いてあります。checktool と打つと「command not found(コマンドが見つからない)」と出ました

「PATH通ってる?」
「環境変数」って、何のことだろう…?

環境変数は、シェルやプログラムに渡される「名前=値」の設定です。

PATH はその一つで、コマンドの名前だけを打ったときに、プログラムを探しに行くディレクトリの一覧です。

このページで分かること読む 約4分・問題 3問
  • 環境変数は、シェルや、そこから動かすプログラムに渡される「名前=値」の設定
  • PATH は、コマンドの名前だけを打ったときに、プログラムを探しに行くディレクトリの一覧(: で区切る)
  • 「PATHが通っている」は、そのプログラムがあるディレクトリが PATH に入っていて、名前だけで動かせる状態
  • 中身は echo $PATH で見られる

身近な例えで理解する

はさみを探すとき、「まず机の引き出し、なければリビングの棚、それでもなければ工具箱」と、探す場所の順番が決まっています。その順番にない場所にしまったはさみは、「はさみどこ?」と探しても見つかりません。

  • 探す場所の順番PATH(ディレクトリの一覧)
  • 「はさみどこ?」コマンドの名前だけを打つ
  • 順番にない場所にしまったはさみPATH に入っていないディレクトリのプログラム
  • 「物置の2段目の箱」と場所ごと言う/opt/checktool/bin/checktool と場所ごと打つ

場所ごと言えば見つかりますし、探す場所の一覧に物置を足せば「はさみどこ?」でも見つかります。

ちょっと確認

Q1先輩のひとこと
先輩「PATH通ってる?」

先輩が確かめたいことは?

例えを外して、実際のしくみ

ここからは実際のしくみ
環境変数

「名前=値」の形の設定です。シェルから動かしたプログラムは、シェルの環境変数を受けつぎます。よく見るのは HOME(自分のホームディレクトリ→45 ディレクトリとパス)、LANG(表示の言語や文字の扱いなど、地域の設定)、PATH です

PATH のしくみ

/usr/local/bin:/usr/bin:/bin のように、ディレクトリを : で区切って並べたものです。/ を含まない名前でコマンドを打つと、シェルはこの順にディレクトリを探し、最初に見つかったものを動かします。どこにもなければ「command not found」になります

確かめ方

echo $PATH で PATH の中身を表示します。$ をつけると変数の中身を取り出せます。printenv で環境変数をまとめて見られます

変え方と効く範囲

export PATH="$PATH:/opt/checktool/bin" のように、今までの PATH の後ろに足します。ただし、そのシェルと、そこから動かすプログラムにだけ効き、ログインし直すと元に戻ります。前の PATH を消して上書きすると、ほかのコマンドが見つからなくなるので注意します

実行例(練習用に用意した Ubuntu 24.04 で、user2 というユーザーで実際に動かした結果):
user2@vm:~$ echo $HOME
/home/user2
user2@vm:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
user2@vm:~$ checktool
-bash: checktool: command not found
user2@vm:~$ export PATH="$PATH:/opt/checktool/bin"
user2@vm:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/checktool/bin

checktool は PATH のどのディレクトリにもないので、「command not found」になりました。export で足すと、PATH の最後に /opt/checktool/bin が加わります(この例では、そのディレクトリにまだ何も入れていません)。

このページのまとめ

環境変数
シェルやプログラムに渡す「名前=値」の設定です
PATH
コマンドを探しに行くディレクトリの一覧です(: 区切り)
PATHが通っている
そのディレクトリが PATH に入っていて、名前だけで動かせる状態です
echo $PATH
PATH の中身を表示するコマンドです

先輩のひとことの意味

先輩「PATH通ってる?」

checktool は /opt/checktool/bin にあります。「そのディレクトリが PATH に入っていて、checktool という名前だけで探せる状態になってる?」という意味です。echo $PATH で確かめ、入っていなければ場所ごと(/opt/checktool/bin/checktool)打つか、手順書や先輩に確かめてから PATH に足します。

練習問題で確かめる

Q24択

PATH の中身を表示するコマンドは?

Q34択

/opt/checktool/bin/checktool と打つと動くのに、checktool だけだと「command not found」になる。理由は?

参考資料

ご意見・「これで例えて!」を募集しています

ご意見・ご感想・質問・間違いのご指摘など、何でもお気軽にお寄せください。「この言葉も例えで説明してほしい」「こんな例えなら分かりやすい」という声をもとに、新しいページや例えを作ります。

  • 説明してほしいITの言葉
  • 例えてほしい場面(部活・アルバイト・家事など)
  • 分かりにくかったところ・間違いのご指摘

意見箱は準備中です。

解説・例え・練習問題はすべてオリジナルです。参考にしているのは公式ドキュメントのみです。ご意見・ご感想・間違いのご指摘など、何でもお寄せください。確認してすぐに直します。

LinuCはLPI-Japanの登録商標です。当サイトはLPI-Japanおよび他の企業・団体とは関係ありません。

運営:core