はじめに
仕事でRHEL9を扱うことになり、環境変数周りの知識不足を痛感したためこの記事を書いています。
タイトルではRHEL9と銘打っていますが、他のディストリビューションでも基本的に同じだと思います。
もし誤っている内容などがあれば、コメントで訂正していただけると大変助かります。
環境変数の話に入る前に
Bashではログインシェルやインタラクティブシェルのようなシェルのタイプで読み込まれるファイルが変わります。
今からする話はシェルのタイプを理解している前提で説明します。
もし分からない場合は。こちらの記事の説明が大変分かりやすかったので、読んでいただければと思います。
環境変数に関わるファイルを読み込む順序
インタラクティブログインシェル・ノンインタラクティブログインシェルの場合
以下のような順序で環境変数の設定ファイルが読み込まれます。
読込順 | ファイル1 | ファイル2 | ファイル3 | 概要 |
---|---|---|---|---|
1 | /etc/profile | /etc/profile.d/*.sh | /etc/bashrc | 「/etc/profile」の中で「/etc/profile.d」配下のシェルスクリプトが先に呼ばれ、その後「/etc/bashrc」が呼び出されます。 |
2 | ~/.bash_profile | ~/.bashrc | /etc/bashrc | 「~/.bash_profile」の中で「~/.bashrc」が呼び出され、「~/.bashrc」の中で「/etc/bashrc」が呼び出されます。 |
(3) | ~/.bash_login | 「~/.bash_profile」が存在しない場合呼び出される。 | ||
(4) | ~/.profile | 「~/.bash_profile」と「~/.bash_login」が存在しない場合呼び出される。 |
インタラクティブノンログインシェルの場合
以下のような順序で環境変数の設定ファイルが読み込まれます。
読込順 | ファイル1 | ファイル2 | ファイル3 | 概要 |
---|---|---|---|---|
1 | ~/.bashrc | /etc/bashrc | /etc/profile.d/*.sh | 「~/.bashrc」の中で「/etc/bashrc」が呼び出され、「/etc/bashrc」の中でログインシェルでは出ないときに「/etc/profile.d」配下のシェルが呼び出されます。 |
ノンインタラクティブノンログインシェルの場合
ファイルを読み込むのではなく、環境変数$BASH_ENV
を読み込みます。
環境変数の設定方法
- ユーザー全体の場合:
/etc/profile.d/
配下に環境変数を設定するコマンド(export)を記載したシェルスクリプトを配置して設定します。 - ユーザー毎に設定したい場合:
~/.bashrc
に環境変数を設定するコマンド(export)を記載して設定します。
/etc/environmentについて
今までbashが環境変数に関するファイルを読み込む順序について説明してきましたが、実はシステム全体のPATHに影響を及ぼすファイルが存在します。
それがこの項のタイトルに載っている/etc/environment
です。
RHEL9では/etc/environment
には何も書かれていませんが、Ubuntuでは以下のように書かれています。
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
それではRHEL9においてはどのようにシステム全体に適用するPATHを設定しているかというと、/etc/profile
内に環境変数PATHに追加するスクリプトが書かれています。
気になる方は是非読んでみて下さい。