Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステムを操作していると、「コマンドが見つからない」「文字化けして表示される」といった問題に遭遇することがあります。これらの多くは、環境変数の設定が原因かもしれません。環境変数は、システムやアプリケーションの動作に影響を与える重要な設定値です。
この記事では、Linuxにおける環境変数の基本的な概念から、特に利用頻度の高いPATH
とLANG
といった環境変数の扱い方について、具体的なコマンド例を交えながら解説します。
PATH
環境変数の設定とコマンドの探索順序LANG
環境変数によるシステムの言語設定環境変数は、Linuxシステムがプログラムを実行する際に参照する動的な値の集合です。例えば、コマンドを実行する際にどこからそのコマンドを探せばよいか、表示する言語を何にするか、といった情報が環境変数に格納されています。
環境変数には、シェル変数とエクスポートされた環境変数の2種類があります。
export
コマンドを使って設定された変数で、現在のシェルだけでなく、そこから起動された子プロセス(別のコマンドやスクリプト、アプリケーションなど)にも値が引き継がれます。多くのアプリケーションやコマンドが参照するのは、この環境変数です。アプリケーションやコマンドの動作に影響を与えたい場合は、export
コマンドを使って環境変数として設定する必要があります。
現在設定されている環境変数は、env
コマンドやprintenv
コマンド、またはecho
コマンドを使って確認できます。
env
またはprintenv
コマンドで全て表示するenv
# または
printenv
これらのコマンドを実行すると、現在ログインしているユーザーの環境変数が一覧表示されます。
echo
コマンドで特定の環境変数を表示する特定の環境変数の値だけを確認したい場合は、echo
コマンドに$
を付けて環境変数名を指定します。
echo $PATH
echo $LANG
このコマンドは、指定した環境変数の現在の値を表示します。
PATH
PATH
環境変数は、ユーザーがコマンドを実行した際に、システムがそのコマンドの実行ファイルを探しに行くディレクトリのリストを定義しています。
例:PATH
にディレクトリを追加する
一時的に新しいコマンドを特定のディレクトリに置いた場合など、PATH
にそのディレクトリを追加することで、フルパスを指定せずにコマンドを実行できるようになります。
export PATH=$PATH:/usr/local/custom_bin
echo $PATH
export
: 変数を“環境変数”としてエクスポート(子プロセスにも引き継ぐ)するコマンドです。$PATH
: 現在のPATH
環境変数の値です。:/usr/local/custom_bin
: 新たに追加するディレクトリパスです。複数のパスはコロン :
で区切ります。この設定は、現在のシェルセッションでのみ有効です。シェルを閉じたり、新しいターミナルを開いたりすると元に戻ります。
この状況で困ったらコレ:「command not found」と表示される
よくあるのは、自分でインストールしたアプリケーションのコマンドや、特定のツールが「command not found」と表示されるケースです。これは、そのコマンドの実行ファイルがあるディレクトリがPATH
に含まれていないことが原因です。
which コマンド名
やwhereis コマンド名
で実行ファイルの場所を探します。PATH
にそのディレクトリを追加する: 前述のexport PATH=$PATH:/path/to/command
を実行します。LANG
LANG
環境変数は、システムが表示する言語、文字エンコーディング、地域設定などを定義します。これにより、コマンドの出力メッセージやアプリケーションの表示が指定した言語になります。
例:言語設定を日本語に変更する
export LANG=ja_JP.UTF-8
echo $LANG
ja_JP.UTF-8
: 日本語(日本)、UTF-8エンコーディングを示します。この設定も一時的なものです。永続的に変更する場合は、後述の設定ファイルに記述します。
この状況で困ったらコレ:ターミナルで文字化けが発生する
日本語環境で作業しているにもかかわらず、ターミナルの出力が文字化けする場合、LANG
環境変数が適切に設定されていない可能性があります。
LANG=ja_JP.UTF-8
を設定するか、またはより広範なロケール設定を行うことで解決することが多いです。
HOME
… ユーザーのホームディレクトリのパスUSER
… 現在のユーザー名SHELL
… 利用中のシェルのパス(例: /bin/bash
)PWD
… 現在の作業ディレクトリ(Print Working Directory)のパス環境変数を永続的に設定するには、ユーザーのホームディレクトリにある特定のシェル設定ファイルに記述します。一度設定すれば、システムを再起動したり、新しいシェルセッションを開始したりしても設定が維持されます。
~/.bashrc
: Bashシェルが対話的なシェル(ターミナルを開いた時)で毎回読み込まれるファイルです。ユーザー固有のエイリアスや関数の定義、そして環境変数の設定によく使われます。~/.profile
: ログイン時や新しいログインシェルが起動する際に読み込まれるファイルです。ユーザー環境全体に影響するような環境変数の設定に適しています。~/.bash_profile
: Bashがログインシェルとして起動した際に読み込まれます。~/.profile
と同様の目的で使われることが多いです。多くの場合、~/.bashrc
に設定を追加すれば問題ありませんが、利用しているLinuxディストリビューションやシェルによっては、~/.bash_profile
や~/.profile
に記述する必要がある場合もあります。
設定ファイルの例(~/.bashrc
にPATH
とLANG
を追加)
# ~/.bashrc の末尾に追記
export PATH=$PATH:/usr/local/custom_bin
export LANG=ja_JP.UTF-8
設定ファイルを編集したら、変更を適用するために以下のいずれかの方法を実行します。
source ~/.bashrc
を実行する(現在のシェルに設定を読み込ませる)特定のコマンドだけに環境変数を一時的に適用したい場合、以下のようにコマンドの前に変数を指定できます。
LANG=en_US.UTF-8 ls
このように書くと、ls
コマンドの実行時だけLANG
がen_US.UTF-8
となり、そのls
コマンドが終了した後は元のシェルのLANG
環境変数には影響しません。これは、特定のコマンドの挙動を一時的に変更したい場合に非常に便利です。
LANG
を設定しても文字化けが解決しない場合や、現在のロケール設定を確認したい場合は、locale
コマンドを使います。
locale
このコマンドは、現在のロケールに関する詳細な情報を表示します。もし、特定のロケールがシステムにインストールされていない場合は、locale-gen
(Debian/Ubuntu系)やlocalectl
(Systemd環境)で生成・設定が必要な場合があります。
ロケールの設定例 (Systemd環境)
sudo localectl set-locale LANG=ja_JP.UTF-8
システム上で現在実行されている特定のプロセスの環境変数を確認したい場合、ps
コマンドと/proc/<PID>/environ
ファイルを利用する方法があります。
# プロセスID (PID) 12345 の環境変数を表示
ps eww 12345
# または
sudo cat /proc/12345/environ | tr '\0' '\n'
これは、特定のプロセスがどのような環境下で動作しているかをデバッグする際に役立ちます。
Linuxの環境変数は、システムとアプリケーションの動作を柔軟に制御するための重要な要素です。特にPATH
とLANG
は、日々のLinux操作において頻繁に遭遇する設定であり、これらの基本的な扱い方を理解しておくことで、多くのトラブルを未然に防ぎ、スムーズな作業が可能になります。
この記事が、Linux環境変数について理解を深める一助となれば幸いです。ご覧いただきありがとうございました。次回は、ショートカット・エイリアスの作成について解説します。