Linuxの環境変数をexport・envで確認・設定する方法|PATH設定も解説


図解60p「Linuxサーバー構築入門マニュアル」無料
登録10秒/自動返信でDL/合わなければ解除3秒
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドA-E, ユーザ・グループ管理コマンド > Linuxの環境変数をexport・envで確認・設定する方法|PATH設定も解説
「exportで環境変数を設定したのに、別のターミナルを開いたら消えている」
「PATHを通したはずなのに command not found が出る」
Linuxサーバーの運用で、環境変数のトラブルは避けて通れません。設定方法は分かっていても、永続化の仕組みを正しく理解していないと、同じ問題を何度も繰り返すことになります。

この記事では、bash/sh環境での環境変数の確認・設定・永続化を、export コマンドenv コマンドを中心に解説します。PATH設定の正しい方法から、.bashrcと.bash_profileの使い分け、cronで変数が効かない問題の対処まで、実務で必要な知識をまとめました。

環境変数とは? サーバー管理でなぜ重要なのか

環境変数は、OSやアプリケーションの動作を制御する「名前=値」のペアです。たとえば PATH はコマンドの検索先ディレクトリ、LANG はシステムの言語設定を決めています。

サーバー管理の現場では、ミドルウェアのインストール先をPATHに追加したり、アプリケーションの設定値を環境変数で渡したりする場面が頻繁にあります。ここを曖昧にしていると、「自分のターミナルでは動くのに、cronでは動かない」「rootでは動くのに一般ユーザーでは動かない」といったトラブルに悩まされます。

シェル変数と環境変数の違い~exportが分かれ目

bashには「シェル変数」と「環境変数」の2種類の変数があります。この違いを理解することが、exportコマンドを使いこなす第一歩です。

シェル変数:現在のシェルだけで有効。子プロセス(スクリプトやコマンド)には引き継がれない
環境変数:子プロセスにも引き継がれる。export で昇格させる

# シェル変数の設定(exportなし) $ MYVAR="hello" $ echo $MYVAR hello # 子プロセス(bashを新たに起動)では見えない $ bash -c 'echo $MYVAR' (何も表示されない) # exportで環境変数に昇格させる $ export MYVAR="hello" $ bash -c 'echo $MYVAR' hello

このように、export を付けなければ変数は現在のシェルの中だけで閉じてしまいます。スクリプトや他のコマンドに値を渡す必要がある場合は、必ず export を使ってください。

現在の環境変数を確認する方法

1. envコマンドで一覧表示する

env コマンドは、現在設定されている環境変数をすべて表示します。

$ env HOSTNAME=web-server01 SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin HOME=/home/pakira LANG=ja_JP.UTF-8 (以下省略)

出力が多い場合は env | grep 変数名 でフィルタリングすると便利です。

2. printenvで特定の変数を確認する

printenv は引数なしで一覧表示、引数ありで特定の変数だけを表示できます。

# 特定の環境変数を確認 $ printenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin # 引数なしで一覧表示(envと同等) $ printenv

3. echo $変数名で値を直接確認する

特定の変数の値だけを素早く確認するなら、echo が最もシンプルです。

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin $ echo $LANG ja_JP.UTF-8

環境変数を設定する~export VARIABLE=value

1. 基本の設定方法

export 変数名=値 の形式で環境変数を設定します。=の前後にスペースを入れてはいけません。

# 正しい書き方 $ export JAVA_HOME=/usr/lib/jvm/java-17 # NGな書き方(スペースが入っている) $ export JAVA_HOME = /usr/lib/jvm/java-17 bash: export: `=': not a valid identifier

2. 既存の変数を後からexportする

先にシェル変数として設定してから、後で export することもできます。

$ EDITOR=vim $ export EDITOR

PATH変数の設定~コマンドの検索パスを追加する

環境変数の中で最も設定頻度が高いのが PATH です。新しいソフトウェアをインストールした後に「command not found」が出る場合、PATHにそのディレクトリが含まれていないことが原因です。

1. 現在のPATHを確認する

$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

各ディレクトリはコロン(:)で区切られています。コマンドを実行すると、左から順番に該当する実行ファイルを探していきます。

2. PATHにディレクトリを追加する

既存のPATHを消さないように、$PATH を含めて追記するのが鉄則です。

# 末尾に追加する(既存コマンドを優先する場合) $ export PATH=$PATH:/opt/myapp/bin # 先頭に追加する(追加したパスを優先する場合) $ export PATH=/opt/myapp/bin:$PATH

よくある事故:export PATH=/opt/myapp/bin のように $PATH を含めずに設定すると、lscat など基本コマンドすべてが使えなくなります。慌てずに新しいターミナルを開くか、/usr/bin/bash をフルパスで起動してください。

設定を永続化する~再ログイン後も有効にする方法

export で設定した環境変数は、現在のシェルセッションが終了すると消えます。永続化するには、シェルの設定ファイルに記述する必要があります。

1. ~/.bash_profileに書く(ログインシェル用)

SSH接続やコンソールログイン時に1回だけ読み込まれるファイルです。環境変数の設定に最も適しています。

# ~/.bash_profile に追記 $ vi ~/.bash_profile # 以下の行を追記して保存する export JAVA_HOME=/usr/lib/jvm/java-17 export PATH=$PATH:$JAVA_HOME/bin

2. ~/.bashrcに書く(対話シェル用)

新しいターミナルを開くたびに読み込まれるファイルです。エイリアスやプロンプト設定に使いますが、環境変数を書いても動作します。

# ~/.bashrc に追記 export HISTSIZE=10000 export EDITOR=vim

3. /etc/profile.d/ に置く(全ユーザー共通)

システム全体で共通の環境変数を設定するには、/etc/profile.d/ ディレクトリにシェルスクリプトを配置します。

# /etc/profile.d/ に設定ファイルを作成する(root権限が必要) # vi /etc/profile.d/myapp.sh export MYAPP_HOME=/opt/myapp export PATH=$PATH:$MYAPP_HOME/bin

.bashrcと.bash_profileの違い~ログインシェルと非ログインシェル

この違いを正しく理解していないと、「設定したのに反映されない」という問題に何度もぶつかります。

ファイル 読み込まれるタイミング 主な用途
~/.bash_profile ログイン時(SSH接続・コンソールログイン)に1回 環境変数(PATH等)
~/.bashrc 対話的な非ログインシェル起動時(新しいターミナルを開く等) エイリアス・プロンプト設定
/etc/profile 全ユーザー共通・ログイン時 システム全体の環境変数
/etc/profile.d/*.sh /etc/profile から読み込まれる パッケージ個別の環境設定
多くのディストリビューションでは、~/.bash_profile の中に source ~/.bashrc と書かれています。そのため、ログイン時には両方のファイルが読み込まれます。迷ったら ~/.bashrc に書いておけば、ログインシェルでも非ログインシェルでも読み込まれるため安全です。

環境変数を削除する~unsetコマンド

不要になった環境変数は unset コマンドで削除できます。変数名の先頭に $ は付けません。

# 環境変数を削除する $ unset JAVA_HOME # 確認(何も表示されなければ削除成功) $ echo $JAVA_HOME

実務でよく使う環境変数と設定例

サーバー運用で頻繁に触る環境変数を紹介します。

LANG / LC_ALL:ロケール(言語・文字コード)設定。文字化けの原因調査で必ずチェックする
PATH:コマンドの検索パス。ミドルウェア導入時に追加が必要
HISTSIZE:コマンド履歴の保存件数。デフォルトは1000だが、サーバーでは増やしておくと調査時に役立つ
EDITOR:デフォルトのテキストエディタ。crontab -evisudo で使われる
TZ:タイムゾーン設定。ログの時刻に影響するため要確認

# ロケールを日本語UTF-8に設定 $ export LANG=ja_JP.UTF-8 # コマンド履歴を10000件に増やす $ export HISTSIZE=10000 $ export HISTFILESIZE=10000 # デフォルトエディタをvimに設定 $ export EDITOR=vim

「command not found」PATHが通っていない時の対処法

インストール済みのコマンドなのに「command not found」が出る場合、ほぼ確実にPATHの問題です。以下の手順で原因を特定してください。

1. コマンドの実体がどこにあるか確認する

# whichで検索(PATHに含まれるディレクトリだけを探す) $ which java /usr/bin/which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin) # findで直接探す $ find / -name "java" -type f 2>/dev/null /usr/lib/jvm/java-17/bin/java

2. PATHに追加する

$ export PATH=$PATH:/usr/lib/jvm/java-17/bin $ which java /usr/lib/jvm/java-17/bin/java

3. 永続化を忘れない

動作確認が取れたら、~/.bash_profile または /etc/profile.d/ に同じ記述を追加して永続化してください。これを忘れると、次のログイン時にまた「command not found」に逆戻りです。

ログアウトすると環境変数が消える時の対処法

export で設定した環境変数がログアウト後に消えるのは、正常な動作です。永続化するには、設定ファイルへの記述が必要です。

個人の設定:~/.bash_profile または ~/.bashrcexport 変数名=値 を追記する
全ユーザー共通:/etc/profile.d/変数名.sh にスクリプトとして配置する

設定ファイルを編集した後は、source ~/.bash_profile で即座に反映できます。

cronで環境変数が効かない時の対処法

cronはログインシェルを経由しないため、~/.bash_profile~/.bashrc は読み込まれません。そのため、PATHやLANGなどの環境変数がcronジョブ内では設定されていない状態になります。

対処法1:crontab内で直接定義する

# crontab -e で以下のように記述する PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin LANG=ja_JP.UTF-8 0 3 * * * /opt/myapp/bin/backup.sh

対処法2:スクリプト内でフルパスを使う

# スクリプト内でコマンドをフルパス指定にする #!/bin/bash /usr/bin/find /var/log -name "*.log" -mtime +30 -delete

本記事のまとめ(環境変数の操作早見表)

やりたいこと コマンド
環境変数の一覧を表示する env
特定の環境変数を確認する printenv PATH
環境変数を設定する export VARIABLE=value
PATHにディレクトリを追加する export PATH=$PATH:/new/path
環境変数を削除する unset VARIABLE
設定を永続化する(個人) vi ~/.bash_profile に export 行を追記
設定を永続化する(全ユーザー) vi /etc/profile.d/xxx.sh に export 行を記述
設定ファイルを即座に反映する source ~/.bash_profile

環境変数の設定ミスでサーバートラブルを起こしたくないですか?

exportやPATHの仕組みは、一度正しく理解すれば二度と同じトラブルに悩まされなくなります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

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



無料プレゼント
図解60p「Linuxサーバー構築入門マニュアル」
独学で詰まる前に、“型(手順書)”で最初の環境構築をサクッと終わらせましょう。
登録10秒/自動返信でDL/合わなければ解除3秒
無料で受け取る ※メールアドレスだけでもOK(必須項目は最小限)

宮崎 智広

この記事を書いた人

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

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

図解60pのLinux無料マニュアル
登録10秒/自動返信でDL
無料で受け取る