こんにちは、インフラエンジニアのryuです。
今回は、Linuxで環境変数を確認する方法について解説します。環境変数を一覧表示するときは、主にenvコマンドやprintenvコマンドを使います。
Linuxを学び始めると、手順書にPATHを確認してくださいや環境変数が設定されているか確認してくださいと書かれていることがあります。
しかし、そもそも環境変数が何なのか、envとprintenvは何が違うのか、迷ってしまいませんか。
私はエンジニアとして10年以上、Linuxサーバーの構築や障害対応を行ってきました。環境変数は、アプリケーションが起動しないときや、コマンドが見つからないときの調査でよく確認します。
この記事では、環境変数の基本から、特定の値を確認する方法、設定や削除、反映されないときの原因まで、初心者向けに順番に解説します。
Linuxの環境変数とは?¶
環境変数とは、OSやコマンド、アプリケーションが動作するときに参照する設定値です。
変数名と値がセットになっており、LANG=ja_JP.UTF-8やHOME=/home/ryuのような形式で管理されます。
たとえば、Linuxには次のような環境変数があります。
| 環境変数 | 主な役割 | 値の例 |
|---|---|---|
PATH |
コマンドを探すディレクトリ | /usr/local/bin:/usr/bin:/bin |
HOME |
ログインユーザーのホームディレクトリ | /home/ryu |
USER |
現在のユーザー名 | ryu |
SHELL |
ログインシェル | /bin/bash |
LANG |
言語や文字コード | ja_JP.UTF-8 |
PWD |
現在いるディレクトリ | /var/www/html |
環境変数の設定が間違っていると、文字化けしたり、実行したいコマンドが見つからなかったりします。
環境変数とシェル変数の違い¶
環境変数とよく似たものに、シェル変数があります。どちらも変数名=値という形式ですが、子プロセスへ引き継がれるかどうかが違います。
MY_NAME="ryu"
この状態では、MY_NAMEは現在のシェルだけで使うシェル変数です。子プロセスにも渡したい場合は、exportを付けます。
export MY_NAME="ryu"
つまり、exportされた変数が環境変数として子プロセスへ引き継がれると考えるとわかりやすいです。
【関連記事】Linuxのexportコマンドで環境変数を設定する方法
Linuxで環境変数を確認する方法¶
Linuxで環境変数を確認する代表的な方法は、env、printenv、echoの3つです。
似た結果が表示されますが、それぞれ得意な使い方が異なります。
| コマンド | 主な用途 | 特定の変数を直接指定 | 特徴 |
|---|---|---|---|
env |
環境変数の一覧表示、環境を変更してコマンド実行 | 基本的には不可 | 一時的な環境でコマンドを実行できる |
printenv |
環境変数の一覧・個別表示 | 可能 | 確認専用として使いやすい |
echo |
シェルが展開した値を表示 | 可能 | シェル変数も表示できる |
envとprintenvコマンド¶
Linuxで環境変数を確認する方法は以下のコマンドを入力します。
env
もしくは
printenv
どちらも引数を付けずに実行すると、現在のプロセスに渡されている環境変数が一覧表示されます。
コマンドの実行結果¶
コマンドを入力すると、以下のように環境変数が表示されます。

envコマンドとprintenvコマンドどちらを入力しても同じように表示されます。これらのコマンドを使用することで、環境変数が一覧として表示されます。
表示結果は、利用しているOS、ログインユーザー、シェル、起動方法によって異なります。そのため、教材の画面と完全に同じ内容にならなくても問題ありません。
環境変数は1行に1つずつ、変数名=値の形式で表示されます。結果が多い場合は、printenv | lessと実行すると上下にスクロールできます。
では、特定の環境変数のみを表示させる場合はどうしたらいいのでしょうか?次に詳しく解説します!
特定の環境変数を表示させる方法¶
特定の環境変数を確認する方法には、printenv、echo、grepを使う方法があります。
変数名がわかっているならprintenv、名前の一部しかわからないならgrepが便利です。
printenvで環境変数を指定する¶
まずは、printenvで環境変数を指定する方法です。printenvコマンドは、環境変数を指定することができます。
printenv [環境変数]
例えば、以下のように入力します。
printenv LANG
コマンドを実行すると、環境変数LANGに設定された値を見ることができます。

echoコマンドで環境変数を指定する¶
次に、echoコマンドで環境変数を指定する方法です。echoコマンドは文字列を表示させるコマンドです。
以下のように入力すると、環境変数の値を見ることができます。
echo $[環境変数]
実際のコマンドでは、角括弧を付けずに環境変数名を指定します。LANGを確認する場合は、次のように実行します。
echo "$LANG"
printenvコマンドと違い、環境変数の前に$を付けるのがポイントです。実際にコマンドを入力してみましょう。
echo $LANG
コマンドを入力すると、先ほどと同じように環境変数の値が表示されました。

echoコマンドの使い方に関しては、こちらの記事で詳しく解説しています。
【関連記事】Linuxのechoコマンドで文字列や変数を表示する方法
ただし、echo $VARで表示されるのは、シェルが$VARを展開した結果です。環境変数だけでなく、exportしていないシェル変数も表示できます。
また、値に空白やワイルドカード文字が含まれる可能性を考えると、実務ではecho "$VAR"のようにダブルクォーテーションで囲む方が安全です。
grepコマンドで検索して環境変数を表示させる¶
最後に、grepコマンドで検索する方法です。grepは文字列を検索するコマンドで、envやprintenvと組み合わせて使います。
printenv | grep [環境変数]
もしくは
env | grep [環境変数]
具体的には、以下のように使用します。
printenv | grep LANG
実行すると以下のように表示されます。
printenvで一覧表示した中から”LANG”に当てはまるものを検索して表示します。grepを使うことで、環境変数名がわからなくても、検索して見つけ出すことができます。
たとえば、PROXYを含む環境変数を探す場合は、次のように実行します。
printenv | grep PROXY
大文字と小文字を区別せずに検索したい場合は、-iオプションを付けます。
printenv | grep -i proxy
環境変数名だけを検索したい場合は、行頭から変数名と=が続く形にすると、値の中に含まれる文字列を誤って拾いにくくなります。
printenv | grep '^LANG='
grepコマンドの詳しい使い方は、こちらの記事で解説しています。
【関連記事】Linuxのgrepコマンドで文字列を検索する方法
envコマンドとprintenvコマンドの違い¶
環境変数を一覧表示するだけなら、envとprintenvの結果はほぼ同じです。しかし、コマンド本来の役割には違いがあります。
printenvは、環境変数の値を表示することが主な目的です。一方のenvは、環境変数を一時的に追加・変更・削除した状態で、別のコマンドを実行できます。
envで一時的に環境変数を変更して実行する¶
たとえば、LANGを一時的にCへ変更してdateコマンドを実行する場合は、次のように指定します。
env LANG=C date
この変更は、実行したdateコマンドにだけ適用されます。現在のシェルに設定されているLANG自体は変更されません。
アプリケーションの動作を一時的に切り替えてテストするときにも便利です。
env APP_ENV=development python app.py
envで特定の環境変数を除外する¶
env -uを使うと、指定した環境変数を削除した状態でコマンドを実行できます。
env -u HTTP_PROXY curl https://example.com
プロキシ設定が原因かどうかを切り分ける場合などに使えます。ただし、実際の通信先や社内ルールを確認してから実行してください。
環境変数を設定・変更・削除する方法¶
確認方法を理解したら、設定方法も一緒に覚えておきましょう。
現在のシェルだけで変数を設定する¶
現在のシェルで変数を設定する場合は、次のように実行します。=の前後に空白を入れない点が重要です。
APP_NAME="InfraAcademy"
値を確認してみます。
echo "$APP_NAME"
この時点ではシェル変数なので、printenv APP_NAMEでは表示されません。
exportして環境変数にする¶
子プロセスへ引き継ぐ場合は、exportを使います。
export APP_NAME="InfraAcademy"
printenv APP_NAME
環境変数を削除する¶
現在のシェルから変数を削除する場合は、unsetを使います。
unset APP_NAME
削除後に確認しても、値は表示されません。
printenv APP_NAME
printenvは存在しない変数を指定すると何も表示しません。シェルスクリプトでは、直前の終了ステータスも確認できます。
printenv APP_NAME
echo $?
通常、変数が存在すれば0、存在しなければ0以外が返ります。
環境変数を再ログイン後も残す方法¶
コマンドラインでexportした環境変数は、基本的に現在のシェルを終了すると消えます。
再ログイン後も使いたい場合は、利用しているシェルや起動方法に合わせて設定ファイルへ記述します。
bashで設定する場合¶
bashの対話シェルで利用する値は、~/.bashrcに記述することがよくあります。
export APP_ENV="production"
設定をすぐに読み直す場合は、次のコマンドを実行します。
source ~/.bashrc
ログイン方法によっては、~/.bash_profileや~/.profileが使われます。初心者のうちは、システム全体ではなく自分の設定ファイルで試す方が安全です。
環境変数が反映されないときの確認ポイント¶
環境変数を設定したのに、アプリケーションから見えないことがあります。このような場合は、設定値だけでなく、どのプロセスから起動したかを確認します。
exportしているか確認する¶
シェル変数を設定しただけでは、そこから起動した子プロセスへ渡りません。
APP_ENV="production"
printenv APP_ENV
何も表示されない場合は、exportします。
export APP_ENV
設定したシェルと実行したシェルが同じか確認する¶
別のターミナルを開いた場合や、別ユーザーへ切り替えた場合は、元のシェルで設定した値を引き継がないことがあります。
sudoでコマンドを実行すると、セキュリティ上の理由から一部の環境変数が削除される場合もあります。安易にすべて引き継ぐのではなく、必要な変数を明示して設定する方が安全です。
設定ファイルが読み込まれているか確認する¶
~/.bashrcへ記述しても、実行環境によっては読み込まれていないことがあります。
まずは、現在使用しているシェルを確認します。
printenv SHELL
次に、設定ファイルの記述ミスや、exportの付け忘れを確認します。変更後にsourceを実行していない場合は、現在のシェルへまだ反映されていません。
実行ユーザーが違わないか確認する¶
Webサーバーやsystemdサービスは、自分がログインしているユーザーとは別のユーザーで動作していることがあります。
ターミナルで見える値が、Apache、Docker、systemdサービスからも見えるとは限りません。サービス固有の設定方法を確認します。
エンジニアとして障害調査をしていると、設定値そのものより、誰が、どのシェルから、どのプロセスを起動したかが原因になっているケースが多くあります。
環境変数を確認するときの注意点¶
環境変数には、APIキー、アクセストークン、データベースのパスワードなどが保存されることがあります。
envやprintenvの結果を、そのままチャットや問い合わせフォームへ貼り付けないようにしてください。
画面共有やログ保存をするときも、秘密情報が含まれていないか確認します。必要な変数だけを指定して表示する方が安全です。
printenv APP_ENV
printenv LANG
また、秘密情報をシェルの履歴に残したくない場合は、コマンドラインへ直接値を入力する方法にも注意が必要です。運用環境では、シークレット管理サービスや適切な権限の設定を利用します。
Linuxの学習を始めたい方はこちらから¶
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!
入門から中級まで初心者でもわかりやすく学習を進めることができます。
InfraAcademyでは、Linuxコマンドを読むだけではなく、実際にターミナルを操作しながら学習できます。
↓InfraAcademyの講座の一部です。
上記以外にも、DNSサーバーの構築方法や、Dockerの設定方法などさまざまな講座があります。
インフラエンジニアに必要な知識を、初心者向けの講座から順番に学習できます。
Linuxで環境変数を確認する方法まとめ¶
今回は、Linuxで環境変数を確認する方法について解説しました。
一覧を表示するならenvかprintenv、特定の環境変数を確認するならprintenv 変数名、シェル上で展開された値を見るならecho "$変数名"を使用します。
名前の一部しかわからないときは、printenv | grep キーワードと組み合わせると便利です。
ただし、環境変数はプロセスごとに引き継がれます。値が反映されない場合は、exportの有無、実行ユーザー、起動したシェル、設定ファイルを順番に確認してください。
最初はコマンドの違いがわかりにくいかもしれません。しかし、実際に変数を設定し、printenvで確認し、unsetで削除するところまで試すと理解しやすくなります。
環境変数は、Linuxの運用やアプリケーション構築で何度も使う知識です。ぜひ自分の環境でコマンドを実行してみてください。
