環境変数は、シェルやアプリケーションの挙動を制御する設定値で、システム / シェル / ユーザーごとのコンテキストで使われます。 名称だけで終わらせると「動いたり動かなかったり」で迷走しがちです。
この記事では、基本概念から具体的な設定方法、よくあるトラブル対応まで丁寧に解説します。
📌 Linux学習を体系的に整理したい方へ
シェル・コマンド・設定項目を使い分けて学べる総合ロードマップはこちら。
▶ Linux学習ロードマップ完全版|初心者から現場レベルまでの勉強手順とコマンド体系まとめ
目次
- 環境変数とは何か?
- 環境変数のスコープ(ユーザー/システム)
- 環境変数の一覧確認方法
- 一時設定(現在のセッションのみ)
- 恒久設定(ログイン後も有効)
- bash/zsh/systemdでの違い
- よくあるトラブルと原因
- FAQ
環境変数とは何か?
環境変数は、シェルやアプリケーションが参照する“設定値”です。 プログラムはこれらの値を元に挙動を変えます。例:
PATH:コマンド検索パスHOME:ユーザーのホームディレクトリLANG:言語/ロケール
環境変数は一度設定すれば、同じユーザー/セッションではそのまま参照されます。

環境変数のスコープ(どこまで有効か)
- セッション内:今開いているシェルだけ
- ユーザー全体:ログインし直した全てのシェル
- システム全体:全ユーザー・全シェル
例:bash セッションで設定しただけの場合だけ有効です。
環境変数の一覧確認方法
# 現在の環境変数一覧
printenv
# または
env
一時的に環境変数を設定(セッション限定)
# 例:PATHにカスタムディレクトリを追加
export PATH="$HOME/bin:$PATH"
この設定は現在のセッションのみ有効です。
永続的に環境変数を設定する方法
~/.bashrc / ~/.bash_profile
# ~/.bashrc の例
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"
設定後は再ログイン、または source ~/.bashrc で即時反映します。
/etc/environment(システム全体)
# /etc/environment の例
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
全ユーザーに影響する設定です。sudo権限が必要。

bash / zsh / systemd での違い
bash と zsh の違い
- bash:
~/.bashrcが主要 - zsh:
~/.zshrcが主要
どのシェルを使っているかで設定ファイルが変わるので要注意です。
systemd の環境変数
systemd サービスには独自に環境変数が設定でき、Environment= や EnvironmentFile= を使います。
[Service]
Environment="APP_ENV=production"
EnvironmentFile=/etc/sysconfig/myapp


よくあるトラブルと対処
設定が反映されない
原因:設定ファイルが読み込まれていない / シェルの違い / export し忘れ
対処:
source ~/.bashrcで再読み込み- 正しいファイル(zshなら
~/.zshrc)に追記 - systemd なら
systemctl daemon-reload
PATH が長すぎたり順序が逆になっている
原因:PATH の追記順が逆、不要項目が多い
対処:追記順を見直し、不要ディレクトリを整理
システムとユーザーで設定が競合する
原因:/etc/environment と ~/.bashrc の両方で定義
対処:優先順位に応じて片方に集約する
FAQ
Q1. export と env の違いは?
export は変数を「子プロセスにも引き継がせる」設定、env は一時的に環境変数を変更してコマンドを実行するものです。
Q2. シェルを変えたら設定が反映されない
使っているシェルに応じた設定ファイルを修正する必要があります(bash → ~/.bashrc、zsh → ~/.zshrc など)。
Q3. systemd サービスの環境変数を変更したい
service のユニットファイルで Environment= または EnvironmentFile= を設定し、systemctl daemon-reload を実行します。
Q4. 永続化したのに反映されない
設定後に再ログイン or shell の再読み込み(source ~/.bashrc)を忘れている可能性があります。
環境変数は Linux の土台部分なので、**設定箇所 + 反映タイミング + シェル種別** の3点を常に意識して扱いましょう。

