[ << ]
[ < ]
[ ホーム ]
[ > ]
[ >> ]
5. 環境変数
目次:
5.a. 環境変数とは
環境変数とは何か
環境変数とは、さまざまなアプリケーションから使用される情報を保持した名前付きオブジェクトです。
という説明をされても、多くのユーザー(特にあまりLinuxに慣れていない人)にとっては、
意味不明だったり、使いどころがないように思われるかもしれません。でも、それは違います。
環境変数を使うことで、さまざまなアプリケーションの設定を簡単に変更することができるのです。
例(重要)
以下の表は、Linuxシステムで使用されるいろいろな環境変数とその説明です。
具体的な環境変数の値については表の後でお見せします。
| 変数名 |
説明 |
| PATH |
この変数には、システムが実行ファイルを検索する際に用いられるディレクトリがコロン区切りで格納されています。
入力した実行ファイル名(たとえばls、rc-update、emergeなど)がこの変数で設定された場所に見つからない場合、
そのファイルを実行することはできません(ただし、
たとえば/bin/lsのようにコマンドをフルパスで入力した場合はその限りではありません)。
|
| ROOTPATH |
機能としてはPATHとほぼ同じですが、この変数の場合、
rootユーザーがコマンドを入力するときのみ調べる必要があるディレクトリだけがリストされています。
|
| LDPATH |
この変数には、ダイナミックリンカがライブラリを検索する際に使用するディレクトリが、
コロン区切りで格納されています。
|
| MANPATH |
この変数には、manコマンドがマニュアルページを検索する際に使用するディレクトリが、
コロン区切りで格納されています。
|
| INFODIR |
この変数には、infoコマンドがinfoページを検索する際に使用するディレクトリが、
コロン区切りで格納されています。
|
| PAGER |
この変数には、ファイルの内容を表示するときに使うプログラム(たとえばlessやmore)のパスが格納されています。
|
| EDITOR |
この変数には、ファイルの内容を編集する際に使われるプログラム(たとえばnanoやvi)のパスが格納されています。
|
| KDEDIRS |
この変数には、KDEに特化したファイルを収めたディレクトリが、
コロン区切りで格納されています。
|
| CONFIG_PROTECT |
この変数には、Portageがパッケージのアップデートを行う際に保護する必要のあるディレクトリが、
スペース区切りで格納されています。
|
| CONFIG_PROTECT_MASK |
この変数には、Portageがパッケージのアップデートを行う際に保護してはいけないディレクトリが、
スペース区切りで格納されています。
|
以下、これまでに説明したすべての変数の定義例を示します。
コード表示 1.1: 定義例 |
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"
|
5.b. グローバルな環境変数を設定する
/etc/env.dディレクトリ
各環境変数を一ヶ所で定義できるようにするため、Gentooは/etc/env.dディレクトリを導入しました。
このディレクトリの中には、たとえば00basicや05gccなど、
いろいろなファイルが入っていると思います。それぞれのファイルには、
そのファイル名が表すアプリケーションに必要な環境変数が格納されています。
たとえばgccをインストールすると、
05gccという以下のような変数を定義したファイルが、
ebuildにより生成されます。
コード表示 2.1: /etc/env.d/05gcc |
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
|
他のディストリビューションの場合は、/etc/profileなどのファイルに書かれた環境変数を変更したり新たに環境変数を定義したり、といったことを求められます。
Gentooの場合、環境変数の維持や管理がユーザーにとって(そしてPortageにとっても)簡単に行えるようになっており、
環境変数が格納される可能性のあるいくつものファイルそれぞれに、
注意を払う必要がありません。
たとえばgccが更新された場合は、
ユーザーが指一本動かすことなく、/etc/env.d/05gccも同時に更新されます。
これはPortageにとって便利であるばかりでなく、ユーザーであるあなたにとっても便利です。
場合によっては、システム全体に特定の環境変数を設定する必要に迫られることがあるでしょう。
たとえばhttp_proxyを例に取りましょうか。
/etc/profileをぐちゃぐちゃにしてしまう代わりに、
以下のように独自の定義を用意したファイル(/etc/env.d/99local)を作成すれば良いだけなのです。
コード表示 2.2: /etc/env.d/99local |
http_proxy="proxy.server.com:8080"
|
このファイルを使って自分用の環境変数を設定するようにしておけば、
独自に設定した環境変数も一目瞭然です。
env-updateスクリプト
/etc/env.dには、PATH変数を定義した複数のファイルが存在します。
これは間違いではありません。env-updateを実行すると環境変数が更新される前にそれぞれの定義が順番に追加されます。
このためパッケージは(そしてユーザーも)既存の変数に影響を与えることなく、
自分自身の環境変数を簡単に追加できるのです。
env-updateスクリプトは/etc/env.d以下のファイルをアルファベット順に並べ、
その中で定義された変数をつなげていきます。ファイル名は、2つの数字で始まる必要があります。
コード表示 2.3: env-updateが変数を並べる順番 |
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
|
環境変数の連結はいつも起こるわけではなく、以下の環境変数のみで発生します。
KDEDIRS、PATH、LDPATH、
MANPATH、INFODIR、INFOPATH、ROOTPATH、
CONFIG_PROTECT、CONFIG_PROTECT_MASK、PRELINK_PATHそして
PRELINK_PATH_MASK
他の全ての環境変数は、最後に指定された値が(/etc/env.d内のファイルのアルファベット順で)
使用されます。
env-updateを実行すると、
このスクリプトは全環境変数を生成し/etc/profile.envに記録します(このファイルは/etc/profileから利用されます)。
また同時にLDPATHから情報を抽出し、その情報を用いて/etc/ld.so.confを生成します。
それからldconfigを呼び出し、
ダイナミックリンカが使用する/etc/ld.so.cacheを再生成します。
env-update実行後すぐにその効果を確認したい場合は、
以下のコマンドで環境を更新します。
自分でGentooをインストールした方は、
インストールガイドでも以下のコマンドが紹介されていたことを覚えているかもしれません。
コード表示 2.4: 環境を更新 |
# env-update && source /etc/profile
|
注意:
上記のコマンドは現在使用中のターミナル、新しい コンソールやそれらから起動されたプロセス上の環境変数のみを更新します。
ですので、もしX11上で作業する場合は、全ての新しく開くターミナル上で source /etc/profile を実行する必要があります。
もしくは X を再起動し、全ての新しいターミナルが新たな環境変数に基づくようにします。
もし、ログインマネージャーを使用している場合は、root になり、/etc/init.d/xdm restart を実行します。
ログインマネージャを使用していない場合は、、ログアウトし、X が新しい環境変数でプロセスを起動できるように、ログインし直す必要があります。
|
重要:
他の変数を定義しているときにシェル変数は使うことができません。
つまり、FOO="$BAR" (ここで $BAR は他の変数)というようにはできないということです。
|
5.c. ローカルな環境変数を設定する
ユーザー限定の設定
グローバルな形で環境変数を設定したくない場合もあります。
たとえば、/home/my_user/binと、
現在の作業ディレクトリ(現在あなたがいるディレクトリ)をPATH変数に設定したいけれども、
同じシステムにいる他のユーザーのPATHには追加させたくない、
という場合です。
このように環境変数をローカルに定義したい場合は、
~/.bashrcや~/.bash_profileを編集してください。
コード表示 3.1: ローカルな利用のために~/.bashrcのPATHを拡張 |
PATH="${PATH}:/home/my_user/bin:"
|
ログインするとPATHが更新されているはずです。
セッション限定の設定
時には、もっと限定された形で環境変数を使いたい場合もあります。
たとえばテンポラリディレクトリにバイナリを作成したのだけど、
フルパスを入力するのも面倒だし、
ちょっとの間そのバイナリを使うためだけのために~/.bashrcを編集したりしたくない、
というような場合です。
このような場合は、exportコマンドを使って現在のセッションのみ有効なPATH変数を設定することができます。
ログアウトしない限りPATH変数に設定した仮の定義が有効になります。
コード表示 3.2: セッション限定の環境変数を設定 |
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"
|
[ << ]
[ < ]
[ ホーム ]
[ > ]
[ >> ]
このドキュメントの内容は、他のものが明示されない限りは、
CC-BY-SA-2.5ライセンスです。
Gentoo Name and Logo Usage Guidelines (日本語訳)が適用されます。
|