【Linux】環境変数とは?$PATHの意味や使い方、通す方法を解説

この記事からわかること

  • Linux環境変数とは?
  • 環境変数とシェル変数違い
  • 意味使い方
  • $PATH通す方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境変数とは?

ポイント

Linuxでは規定の値を簡単に参照できるようにコマンドライン上で格納、参照できる変数というものが用意されています。値を変数に入れておくことで値を保持してくれるだけでなく、計算したり、表示させたりといったことができるようになります。

Linuxでは基本的に変数は実行しているシェル上でしか扱うことができません。なので別のシェルを起動させると変数は引き継がれず再定義しなければいけません。

その変数をシェル上で起動した別のシェルなどからでも扱えるようにしてあるのが環境変数です。しかしあくまでシェル上で起動したシェルなど、設定したシェルと関連のあるものに限るので注意してください。

ちなみにシェル上でしか扱えない変数のことをシェル変数と言います。

環境変数の定義の仕方

まずはLinuxでのシェル変数の定義方法を見てみます。今回は変数名localの中に数値の2を代入しています。

$ local=2

Linuxでの変数の定義では=の両端などに (空白)を挟むとエラーになってしまうので注意してください。

$ local= 1
zsh: command not found: 1

格納した変数を表示させるには定義した名前の先頭に$をつけて参照します。echoコマンドは引数の値を表示させるコマンドです。

$ echo $local
1

シェル変数ではなく環境変数として定義するにはexportを使用して定義します。参照方法はシェル変数と変わりません。

$ export num=2

環境変数の有効範囲

先述しましたがシェル変数と環境変数では扱える有効範囲が異なります。例として途中でシェルを切り替えてみます。

別シェルにした時の変数の挙動

$ local="これはローカルです"
$ export str="これは環境変数です"

// シェルを切り替え
$ bash
bash $ echo $local
// 何も表示されない
bash $ echo $str
これは環境変数です
// シェルを戻す
bash $ exit

このようにシェルを切り替えた際にシェル変数は参照することができませんが、環境変数に格納した値は問題なく表示させることができます。

中身を変更しても引き継がれない

$ export str="テスト"

bash $ bash
bash $ str="変更しました"
bash $ echo $str
変更しました
bash $ exit

$ echo $str
テスト

別のシェルを起動させて環境変数の中身を変更することも可能ですが、デフォルトのシェルに戻した際には変更は保持されず元の値が表示される点に注意してください。もし切り替えたシェル側で変更を引き継がせたい場合は再度環境変数として定義すればOKです。

よく使う定義済みの変数

変数の中には起動時に元々定義済み(値が格納済み)の変数が用意されています。先によく使うものを紹介しておきあmす。

変数名 保持している値/役割
HOME ホームディレクトリ
USER ユーザー名
UID ユーザーID
PATH コマンドサーチパス
PWD カレントディレクトリのパス
$ echo $HOME
/Users/username

$ echo $USER
username

$ echo $PWD
/Users/username/desktop

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...

これらは環境変数として定義されているのでそのシェルからでも参照することができます。

$PATHの意味と使い方

定義済みの変数の中でも重要なのが:を区切り文字にさまざまなパスが登録されている$PATHです。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...

この変数はコマンドサーチパスとも呼ばれ名称の通りコマンド実行時に登録されているパスを検索し、該当するコマンドを実行できるようにする役割を持っています。

組み込み済みのコマンドと追加されたコマンド

そもそもコマンドには組み込み済みのコマンド追加されたコマンドの2種類が存在します。両者を識別するには実行ファイルを検索できるwhichコマンドを使用します。

$ which echo
echo: shell built-in command

$ which npm  // npmを既に$PATHに通していた場合
/Users/username/.nodebrew/current/bin/npm

組み込み済みのコマンドはshell built-in commandと表示され、追加されたコマンドは実行されているファイルのパスが返ってきます。

例えばnpmコマンドの実行ファイルは/Users/username/.nodebrew/current/bin/npmにあるので以下のように実行するのが本来の形になります。

$ /Users/username/.nodebrew/current/bin/npm -v
結果 : 8.1.0  // バージョンを取得する npm -v を実行

$PATHのメリット

毎度記述が面倒な実行ファイルまでのパスを登録しておけるのが$PATHです。コマンドをnpmだけで実行できるように/Users/username/.nodebrew/current/bin/の部分を$PATHに登録していきます。

登録する際はユーザー名が変更になっても良いように$HOMEを使うことをおすすめします。また既存の$PATHの中身を完全に上書きしないように末尾に:$PATHとして現在の値も再格納することも忘れないようにしてください。

export PATH=$HOME/.nodebrew/current/bin/:$PATH

これでパスを通すことができたので次からはnpmだけで実行すると$PATH内を検索し、登録済みの/Users/username/.nodebrew/current/bin/の中にnpmが存在するので詳細なパスを意識することなく実行できるようになります。

$PATHの中身のデフォルトから設定する

しかしこのままではシェルを終了したタイミングで更新した$PATHの中身がリセットされてしまいます。「zsh」の場合は「.zshrc」「bash」の場合は「.bash_profile」環境変数を更新するコマンドを記述しておくことで起動時に自動実行されパスを登録してくれます。

方法は簡単で該当ファイルをviエディタで開き中に環境変数を定義するコマンドを記述して閉じるだけです。

// viでファイルを開く
$ vi ~/.zshrc

// 中にペースト
export PATH=$HOME/.nodebrew/current/bin:$PATH

// 保存して閉じる
:wq

// 現在開いているターミナルに反映
$ source ~/.zshrc

環境変数一覧

変数名 保持している値/役割
HOME ホームディレクトリ
HOSTNAME ホスト名
HISTSIZE コマンド履歴の最大数
HISTFIlE コマンド履歴を格納しているファイル
HISTFILESIZE コマンド履歴を格納しているファイルに保存する履歴数
LANG ロケール
LOGNAME ログインシェルのユーザー名
USER ユーザー名
UID ユーザーID
PATH コマンドサーチパス
PS1 プロンプトの表示形式
PS2 複数行のプロンプトの表示形式
PWD カレントディレクトリのパス
EDITOR デフォルトで起動するエディタを設定する環境変数
DISPLAY GUIアプリケーションを表示する先のXサーバを指定する環境変数

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index