宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
「Linuxの環境変数を確認したいが、printenvとenvとexportの違いがよく分からない」
「シェルスクリプトで変数を設定したのに、子プロセスで参照できない」
環境変数はLinuxコマンド操作やシェルスクリプトの根幹をなす仕組みです。理解が浅いまま使うと、設定したはずの変数が効かない、パスが通らないというトラブルの原因になります。

この記事では、Linuxの環境変数を確認・設定するためのprintenvenvexportコマンドの使い分けを解説します。
ローカル変数と環境変数の違い、.bashrcへの永続的な設定方法、シェルスクリプト内での活用法まで、現場で必要な知識をまとめました。
【この記事でわかること】
・printenv・env・exportコマンドの違いと使い分けを実務視点で解説
・exportコマンドで環境変数を設定し、子プロセスへ引き継ぐ方法
・~/.bashrc や /etc/profile.d/ を使って環境変数を永続化する手順
・PATHやPS1などよく使われる環境変数の意味と変更方法

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

環境変数とローカル変数の違い

Linuxのシェルには「環境変数」と「ローカル変数(シェル変数)」の2種類があります。この違いを理解することが、変数操作でつまずかない最初のポイントです。

ローカル変数(シェル変数):現在のシェルプロセスの中だけで有効。子プロセス(サブシェル・実行スクリプト)には引き継がれない
環境変数:現在のシェルプロセスと、そこから起動する全ての子プロセスに引き継がれる

# ローカル変数(exportなし)の例 $ MY_VAR="hello" $ echo $MY_VAR hello # サブシェルでは参照できない $ bash -c 'echo $MY_VAR' (空白 → 引き継がれていない) # exportで環境変数にする $ export MY_VAR="hello" $ bash -c 'echo $MY_VAR' hello ← 子プロセスに引き継がれた

基本的な使い方

1. 環境変数の一覧を表示する(printenv)

printenvは環境変数のみを表示します。ローカル変数は表示されません。

# 全ての環境変数を一覧表示する $ printenv HOME=/home/tanaka SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin LANG=ja_JP.UTF-8 USER=tanaka LOGNAME=tanaka ... # 特定の環境変数の値だけ表示する $ printenv PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin $ printenv HOME /home/tanaka

2. 環境変数の一覧を表示する(env)

envも環境変数の一覧を表示します。printenvと似ていますが、envは「一時的に環境変数を変更してコマンドを実行する」という用途にも使われます。

# 全ての環境変数を一覧表示する(printenv と同じ) $ env HOME=/home/tanaka SHELL=/bin/bash PATH=/usr/local/bin:/usr/bin:/bin ... # 一時的に環境変数を変更してコマンドを実行する # この場合の環境変数は実行したコマンドにだけ有効 $ env LANG=en_US.UTF-8 date Tue Apr 7 10:30:00 UTC 2026

3. 特定の変数値を表示する(echo $VAR)

変数名の前に $ を付けると、その変数の値に展開されます。

# $変数名で値を表示する $ echo $HOME /home/tanaka $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin $ echo $LANG ja_JP.UTF-8 # 変数が存在しない場合は空白が表示される $ echo $UNDEFINED_VAR (空白)

4. 環境変数を設定する(export)

exportコマンドで変数を環境変数として設定します。設定と同時に値を指定することも、既存のローカル変数をエクスポートすることも可能です。

# 変数を設定しながらエクスポートする(最も一般的) $ export MY_APP_HOME="/opt/myapp" # 既に設定済みのローカル変数をエクスポートする $ TEMP_DIR="/tmp/work" $ export TEMP_DIR # export した変数は printenv で確認できる $ printenv MY_APP_HOME /opt/myapp

5. 現在のシェルで定義された全ての変数を確認する(declare -x / set)

setコマンドはローカル変数・環境変数・関数を含む全ての変数を表示します。declare -xはエクスポートされた変数(環境変数)のみを表示します。

# エクスポート済み変数のみ表示する(環境変数と同じ内容) $ declare -x declare -x HOME="/home/tanaka" declare -x LANG="ja_JP.UTF-8" declare -x PATH="/usr/local/bin:/usr/bin:/bin" ... # 全ての変数(ローカル変数含む)を表示する(量が多い) $ set | head -20

主要な環境変数の一覧と意味

変数名 意味
PATH コマンドを検索するディレクトリの一覧(:区切り) /usr/local/bin:/usr/bin:/bin
HOME ログインユーザーのホームディレクトリ /home/tanaka
USER ログイン中のユーザー名 tanaka
SHELL 使用中のシェルのパス /bin/bash
LANG ロケール(言語・文字コード設定) ja_JP.UTF-8
HOSTNAME ホスト名 web01
TERM 端末の種類(カーソル移動等に使用) xterm-256color
PS1 プロンプトの表示形式 [\\u@\\h \\W]\\$
HISTSIZE コマンド履歴の保持件数 1000
TMPDIR 一時ファイルの格納ディレクトリ /tmp

応用・実務Tips

1. PATH に新しいディレクトリを追加する

インストールしたツールのコマンドが見つからない(command not found)場合は、そのディレクトリを PATH に追加します。

# 現在の PATH を確認する $ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin # PATH に /opt/myapp/bin を追加する(既存のPATHを保持しながら先頭に追加) $ export PATH="/opt/myapp/bin:$PATH" # 追加後の PATH を確認する $ echo $PATH /opt/myapp/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin # 追加したディレクトリのコマンドが実行できるか確認する $ which myapp /opt/myapp/bin/myapp

注意:export PATH="/opt/myapp/bin" のように既存の PATH を上書きすると、基本コマンド(ls, cat等)が実行できなくなります。必ず $PATH を使って既存のパスを引き継いでください。

2. 環境変数の設定を永続化する(.bashrc / .bash_profile)

exportで設定した環境変数は、シェルを閉じると消えます。ログイン後も有効にするには設定ファイルに追記します。

# ~/.bashrc に追記する(インタラクティブシェル向け) $ echo 'export MY_APP_HOME="/opt/myapp"' >> ~/.bashrc $ echo 'export PATH="$MY_APP_HOME/bin:$PATH"' >> ~/.bashrc # 変更を今すぐ有効にする(ログインし直さなくてよい) $ source ~/.bashrc # または . コマンドでも同じ $ . ~/.bashrc # 確認する $ printenv MY_APP_HOME /opt/myapp

3. 全ユーザーに環境変数を設定する(/etc/profile.d/)

システム全体(全ユーザー)に適用する環境変数は、/etc/profile.d/ディレクトリに .sh ファイルを作成します。

# /etc/profile.d/ に設定ファイルを作成する $ sudo vi /etc/profile.d/myapp.sh # ファイルの内容 export MY_APP_HOME="/opt/myapp" export PATH="$MY_APP_HOME/bin:$PATH" # 確認(新しいターミナルで実行) $ printenv MY_APP_HOME /opt/myapp

4. 環境変数を削除する(unset)

unsetコマンドで環境変数(またはローカル変数)を削除できます。

# 環境変数を削除する $ unset MY_APP_HOME # 削除後は空白が返る $ printenv MY_APP_HOME (何も表示されない) $ echo $MY_APP_HOME (空白)

トラブルシュート・エラー対処

1. export したのに子プロセスで参照できない

スクリプトを実行する方法によっては、エクスポートした変数が引き継がれないことがあります。

# . (ドット) またはsourceで実行すると現在のシェルで実行される(変数共有される) $ . ./myscript.sh $ source ./myscript.sh # bash コマンドや ./myscript.sh で実行すると子プロセスで実行される # この場合は export しないと引き継がれない $ ./myscript.sh # スクリプト内で設定した変数を現在のシェルで使いたいなら source で実行する

2. .bashrc に追記したが反映されない

.bashrc は新しいインタラクティブシェル起動時に読み込まれます。追記後は source ~/.bashrc を実行して即時反映させてください。

# .bashrc の変更を現在のシェルに即時反映する $ source ~/.bashrc # 設定が反映されたか確認する $ printenv MY_VAR /opt/myapp

なお、.bash_profileはログイン時にのみ読み込まれます。SSH接続時に環境変数を有効にしたい場合は .bash_profile に追記するか、.bash_profile から .bashrc を読み込むように設定してください。

3. 「command not found」が出る(PATHの問題)

command not found エラーは多くの場合、コマンドのパスが PATH に含まれていないことが原因です。

# コマンドが存在するかフルパスで確認する $ ls /usr/local/bin/mycommand /usr/local/bin/mycommand # コマンドのパスを確認する $ which mycommand /usr/local/bin/mycommand # 現在の PATH を確認する $ echo $PATH /usr/bin:/bin ← /usr/local/bin が含まれていない # /usr/local/bin を PATH に追加する $ export PATH="/usr/local/bin:$PATH" $ which mycommand /usr/local/bin/mycommand

本記事のまとめ(printenv / env / export 早見表)

やりたいこと コマンド
環境変数の一覧を表示する printenv または env
特定の環境変数の値を表示する printenv 変数名 または echo $変数名
環境変数を設定する(子プロセスに引き継ぐ) export 変数名=値
ローカル変数を確認する(全変数) set
エクスポート済み変数のみ確認する declare -x
PATH にディレクトリを追加する export PATH="/新しいパス:$PATH"
環境変数を削除する unset 変数名
環境変数を永続化する(ユーザー) ~/.bashrc に export 文を追記
環境変数を永続化する(全ユーザー) /etc/profile.d/ に .sh ファイルを作成
.bashrc の変更を即時反映する source ~/.bashrc

Linuxの環境変数の設定で詰まっていませんか?

環境変数の設定に限らず、Linuxサーバー構築では「設定した通りに動かない」「エラーの意味がわからない」という壁に何度もぶつかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。