Linux環境変数の設定・確認・永続化を解説!exportとbashrcの使い方

Linux環境変数の設定・確認・永続化を解説!exportとbashrcの使い方

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:4,303

Linuxの環境変数を確認・設定・永続化する方法を初心者向けにわかりやすく解説します。一時的な設定方法から、.bashrcや/etc/profileなどファイルごとの違い、システム全体とユーザー別の違いまで、実務で必須の知識を網羅。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルサーバーやコンテナ環境を操作している中で、「スクリプトからデータベースの接続先が見つからない」「パスを通したはずなのにコマンドが実行できない」といったトラブルに直面したことはないでしょうか。これらのトラブルの一因として、環境変数の設定不備やスコープ(適用範囲)の理解不足が挙げられます。

この記事では、Linuxの環境変数に関する基本的な仕組みから、現在の値を確認する方法、一時的な設定方法、そして再起動後も値を保持するための永続化の方法まで、実務で必要な手順を網羅して解説します。

この記事を読むことで、環境変数の役割を正確に理解し、目的に応じてユーザー別やシステム全体に適切な設定を行えるようになります。

確認した環境

本記事の解説およびコマンドは、以下の環境で動作を確認しています。

Linuxの環境変数とは?仕組みと役割を基礎から解説

環境変数とは、Linuxオペレーティングシステム(OS)上で実行されるプロセスに対して、動作に必要な設定情報や外部パラメータを渡すための仕組みです。例えば、ユーザーのホームディレクトリを示す HOME や、実行ファイルを探すパスを格納する PATH などが代表的な環境変数です。

環境変数はプロセスの環境に含まれ、親プロセスから子プロセスへ継承されます。これにより、各アプリケーションはシステム固有のパスやユーザー設定を動的に把握し、柔軟に動作することが可能になります。なお、環境変数はOS全体で自動的に共有されるものではなく、あくまでプロセスの親子関係を通じて引き継がれる仕組みです。

環境変数とシェル変数の違い

Linuxで変数を扱う際によく混同されるのが「環境変数」と「シェル変数」です。

  • 環境変数: export コマンドで環境にエクスポートされた変数です。現在のシェルプロセスだけでなく、そこから起動される子プロセスや外部コマンドからも参照できます。
  • シェル変数: export されていない変数で、定義した現在のシェル(プロセス)内でのみ有効です。子プロセスの環境には引き継がれません。

シェル変数は一時的な作業やスクリプト内のローカルな値の保持に向いており、他のプログラムやコマンドに引き渡す必要がある設定値には環境変数を使用します。

現在設定されている環境変数を確認する方法

現在システムやシェルにどのような環境変数が設定されているかを確認するには、主に printenv コマンドや echo コマンドを使用します。

printenvコマンドの使い方

すべての環境変数と現在割り当てられている値の一覧を表示するには、オプションなしで printenv コマンドを実行します。

Terminal window
printenv

実行すると、以下のようにキーと値のペアが大量に出力されます。

Terminal window
USER=ubuntu
HOME=/home/ubuntu
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

特定の環境変数だけを確認したい場合は、引数に変数名を指定します。

Terminal window
printenv USER

出力例:

Terminal window
ubuntu

echo $変数名で特定の値を見る

シェル変数の値も含めて確認したい場合や、手軽に特定の環境変数の値だけを出力したい場合は、echo コマンドとドル記号($)を組み合わせます。

Terminal window
echo $PATH

出力例:

Terminal window
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

もし指定した環境変数が存在しない場合、echo $変数名 は何も出力せず改行のみを返します。

一時的に環境変数を設定する方法

シェルセッションの実行中のみ、あるいは特定のコマンドの実行時のみに環境変数を適用したい場合は、一時的な設定方法を用います。

exportコマンドを使った設定手順

現在のシェルセッションに対して一時的に環境変数を設定するには、export コマンドを使用します。

Terminal window
export APP_ENV=development

設定後、正しく反映されているかを printenv で確認します。

Terminal window
printenv APP_ENV

出力例:

Terminal window
development

この方法で設定した環境変数は、設定を行ったシェルと、そのシェルから起動される子プロセスで有効です。シェルを終了すると、その設定は失われます。

設定した環境変数が消えるタイミング

export コマンドで設定した環境変数は、以下のタイミングで消去(無効化)されます。

一時的な設定は、アプリケーションの動作テストや、特定のスクリプトを一時的なパラメータで実行したい場合に適しています。

環境変数を永続化(恒久的)に設定する方法

サーバーの再起動後や、新しく開いたシェルでも環境変数を設定できるようにするには、適切な設定ファイルに記述します。永続化には「ユーザー個別」に適用する方法と「システム全体」に適用する方法があります。

ユーザー個別で永続化する場合(.bashrcや.bash_profile)

特定のユーザーだけで環境変数を恒久的に利用したい場合は、ホームディレクトリ配下にある設定ファイルに追記します。Bashを使用している場合、主に以下のファイルが使用されます。

Ubuntuの標準的なユーザー環境では、~/.profile から ~/.bashrc を読み込む構成になっています。これは、ログイン時にも非ログインシェルと共通の設定を適用するためです。そのため、SSHログイン後のBashでも ~/.bashrc に設定した環境変数が利用できるケースが一般的です。ただし、ユーザーの設定やログイン方法によって読み込まれるファイルは異なります。

手順1: エディタで設定ファイルを開く

Terminal window
nano ~/.bashrc

手順2: ファイルの末尾にexport文を追加する

Terminal window
export DATABASE_HOST=localhost
export DATABASE_PORT=5432

手順3: ファイルを保存して閉じる nanoエディタの場合は Ctrl + O で保存し、Enter を押し、Ctrl + X で終了します。

手順4: 設定を即座に反映させる ファイルを編集しただけでは現在のシェルセッションに反映されないため、source コマンドで再読み込みを行います。

Terminal window
source ~/.bashrc

システム全体で永続化する場合(/etc/profileや/etc/environment)

OSを利用するすべてのユーザーに対して共通で環境変数を適用したい場合は、システム全体の設定ファイルを編集します。これには sudo 権限が必要です。

  • /etc/profile: Bashなどのログインシェルで読み込まれる、システム全体のシェル設定ファイルです。
  • /etc/environment: PAM(Pluggable Authentication Modules)の pam_env モジュールによってログイン時に読み込まれる環境変数定義ファイルです。シェルスクリプトではないため、キーと値のペアをシンプルに記述します。

システム全体のログイン環境に環境変数を設定する場合は、/etc/environment を利用できます。ただし、PAMによるログイン環境などで利用される仕組みであり、systemdサービスなどすべてのプロセスに自動的に適用されるわけではありません。

手順1: /etcetc [エトセトラ / イーティーシー]et ceteraの略。「〜など」を意味する/environmentを編集する

Terminal window
sudo nano /etc/environment

手順2: 変数名と値を代入形式で追加する

APP_MODE="production"
API_TIMEOUT="30"

※ /etc/environment 内では export コマンドは使用せず、KEY=value の形式で記述します。また、シェルスクリプトではないため、PATH=$PATH:/opt/bin のように既存の変数を参照する記述はできません。$PATH が展開されず文字列としてそのまま設定され、コマンドが実行できなくなる原因になります。

手順3: 設定を反映させる /etc/environment はシェルスクリプトではなく、PAMによってログイン時に読み込まれるファイルです。そのため、変更を反映するにはいったんログアウトして再ログインします。

現在のシェルセッションで即座に適用したい場合は、手動で export コマンドを実行してください。

Terminal window
export APP_MODE="production"
export API_TIMEOUT="30"

環境変数を設定・反映した後の注意点

環境変数を設定した後は、以下の点に注意して正しく動作するか確認してください。

  1. 構文のミスに注意する
    変数名と値の間にあるイコール( = )の前後にはスペースを入れないでください。KEY = value とするとエラーになります。
  2. プロセスの継承スコープを確認する
    バックグラウンドで動くサービス(systemdなど)は、ユーザーがログインしているシェルとは異なる環境で起動されるため、~/.bashrc や /etc/environment に設定した環境変数がそのまま利用できないことがあります。サービス用の環境変数は、Unitファイルの Environment= や EnvironmentFile= を利用して明示的に設定できます。
  3. パスの重複や上書きに注意する
    PATH 変数に新しいディレクトリを追加する際は、既存のパスを消してしまわないよう $PATH を含めて定義します。末尾に追加する場合は export PATH=$PATH:/opt/bin、新しいパスを優先させたい場合は export PATH=/opt/bin:$PATH のように先頭に追加します。
  4. コンテナ環境の環境変数は別管理
    DockerDocker [ドッカー]コンテナ型仮想化プラットフォームなどのコンテナ環境では、ホスト側で export した環境変数がコンテナ内に自動的に引き継がれるわけではありません。コンテナの環境変数は、docker run -e オプションやDocker Composeの environment 設定など、コンテナ起動時に別途指定します。

まとめ

本記事では、Linuxの環境変数に関する基礎知識から確認・設定・永続化までの手順を解説しました。

  • 環境変数とシェル変数の違い: 子プロセスに引き継がれるのが環境変数、現在のシェル内のみがシェル変数。
  • 確認方法: printenv または echo $変数名 を利用して現在の値を確認する。
  • 一時的な設定: export コマンドを使用するが、セッション終了や再起動で値は消える。
  • 永続化の方法: ユーザー別なら ~/.bashrc、システム全体のログイン環境なら /etc/environment に記述して設定を保持する。

適切な環境変数の管理を行うことで、アプリケーションの動作安定性と保守性を高めることができます。ぜひ日々の運用や開発にお役立てください。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る →

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top