ハンドブック:SPARC/ワーキング/環境変数

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:SPARC/Working/EnvVar and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎polski • ‎русский • ‎українська • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
SPARC ハンドブック
インストール
インストールについて
メディアの選択
ネットワーク設定
ディスクの準備
stage3のインストール
Gentooベースシステムのインストール
カーネルの設定
システムの設定
ツールのインストール
ブートローダの設定
締めくくり
Gentooの操作
Portageについて
USEフラグ
Portageの機能
Initスクリプトシステム
環境変数
Portageの操作
ファイルとディレクトリ
変数
ソフトウェアブランチの併用
追加ツール
カスタムPortageツリー
高度な機能
ネットワーク設定
はじめに
高度な設定
モジュール式ネットワーク
無線
機能の追加
動的な管理


環境変数

はじめに

環境変数とは、1つまたは複数のアプリケーションで使われる情報を格納する名前付きオブジェクトです。環境変数を使用することで1つまたは複数のアプリケーションの設定を簡単に変更できます。

重要な例

以下の表は Linux システムで使われる数多くの変数を列挙し、使用方法の説明を加えたものです。値の例は表の後にあります。

変数 説明
PATH この変数は、システムが実行可能ファイルを探索するディレクトリーのコロン区切りのリストを含みます。ある実行可能ファイルの名前 (lsrc-update、あるいは emerge など) が入力されても、この実行可能ファイルがリストに含まれるディレクトリー内にない場合には (/bin/ls のようにフルパスがコマンドとして入力されない限り) システムはそれを実行しません。
ROOTPATH この変数は PATH と同様の機能を持っていますが、こちらは root ユーザーがコマンドを入力した時にチェックされるディレクトリーのみが列挙されています。
LDPATH この変数は動的リンカがライブラリを探すときに検索するディレクトリーのコロン区切りのリストを含みます。
MANPATH この変数は man コマンドが man ページを検索するディレクトリーのコロン区切りのリストを含みます。
INFODIR この変数は info コマンドが info ページを検索するディレクトリーのコロン区切りのリストを含みます。
PAGER この変数は (lessmore のような) ファイル内容を表示するのに使用されるプログラムへのパスを含みます。
EDITOR この変数は (nanovi のような) ファイル内容を変更するのに使用されるプログラムへのパスを含みます。
KDEDIRS この変数は KDE 特有の素材を含むディレクトリーのコロン区切りのリストを含みます。
CONFIG_PROTECT この変数はアップデートの間 Portage によってプロテクトされるディレクトリーのスペース区切りのリストを含みます。
CONFIG_PROTECT_MASK この変数はアップデートの間 Portage によってプロテクトされるべきでないディレクトリーのスペース区切りのリストを含みます。

以下はこれらの変数すべての定義例です:

CODE ここで触れた変数の設定例
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"

変数を全体に設定する

env.d ディレクトリー

これらの変数の定義を集約するため、Gentoo では /etc/env.d/ ディレクトリーが導入されています。このディレクトリーの中には 00basic05gcc といった数多くのファイルがあり、そこにはファイル名が表すアプリケーションで必要とされる変数が含まれています。

たとえば gcc がインストールされると、ebuild によって以下の変数の定義を含む 05gcc という名前のファイルが作成されます:

FILE /etc/env.d/05gccデフォルトの gcc が有効化された環境変数
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 のように) 作成してそこに定義を入れるだけで済みます:

FILE /etc/env.d/99localグローバル変数をセットする
http_proxy="proxy.server.com:8080"

自分で管理しているすべての変数について同じファイルを使うことで、ユーザーは自身が定義した変数を素早く見ることができます。

env-update

/etc/env.d/ 内のいくつかのファイルは PATH 変数を定義しています。これは間違いではありません: env-update コマンドは実行されると環境変数を更新する前にいくつかの定義を結合します。これによって、パッケージ(やユーザー)が自身の環境変数の設定をすでに存在する値と干渉しないように追加するのが簡単になります。

env-update スクリプトは値を /etc/env.d/ にあるファイルのアルファベット順で結合します。ファイル名は2桁の10進数で始めないといけません。

CODE env-update で使用される更新順序
00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

変数の結合は常に起こるわけではなく、以下の変数でのみ行われます: ADA_INCLUDE_PATHADA_OBJECTS_PATHCLASSPATHKDEDIRSPATHLDPATHMANPATHINFODIRINFOPATHROOTPATHCONFIG_PROTECTCONFIG_PROTECT_MASKPRELINK_PATHPRELINK_PATH_MASKPKG_CONFIG_PATH、そして PYTHONPATH。それ以外のすべての変数では (/etc/env.d/ のファイルのアルファベット順で) 最後に定義された値が使われます。

変数名を COLON_SEPARATED または SPACE_SEPARATED 変数のどちらかに(これまた /etc/env.d/ 内のファイルで)追加することで、この結合される変数のリストにさらなる変数を追加することができます。

env-update を実行すると、スクリプトはすべての環境変数を作成してそれを /etc/profile.env (これは /etc/profile によって使用されます) に格納します。また LDPATH 変数から情報を展開して /etc/ld.so.conf を作成します。その後スクリプトは ldconfig を実行して、動的リンカが使用する /etc/ld.so.cache を再作成します。

env-update の効果を実行後すぐに有効にするには、以下のコマンドを実行して環境を更新してください。Gentoo を自分自身でインストールしたユーザーは、おそらくインストールの説明でこれを見たことを思い出すかもしれませんね:

root #env-update && source /etc/profile
Note
上のコマンドは現在の端末、新しいコンソールおよびそれらの子孫での変数のみを更新します。したがって、ユーザーが X11 で作業している場合、新しく開いた端末すべてで source /etc/profile と打ち込むかあるいは X を再起動して、すべての新しい端末が新しい変数を読み込むようにする必要があります。ログインマネージャーを使用している場合は root になって /etc/init.d/xdm サービスを再起動する必要があります。
Important
シェル変数を他の変数の定義に使用することはできません。つまり、FOO="$BAR" ($BAR はもう一つの変数) といったことは禁止されているということです。

変数を局所的に設定する

ユーザーごと

環境変数を全体に設定する必要はないこともあります。たとえば、あるユーザーは /home/my_user/bin と作業ディレクトリー(ユーザーが今いるディレクトリー)を PATH 変数に追加したいが、それをシステム上の他のすべてのユーザーの PATH にも含めたいわけではない場合。環境変数を局所的に定義するには ~/.bashrc または ~/.bash_profile を使用します:

FILE ~/.bashrcPATH をローカルでの使用のために拡張する
# 後ろにディレクトリーが続かないコロンは現在の作業ディレクトリーとして扱われます
PATH="${PATH}:/home/my_user/bin:"

ログアウト/ログインすると PATH 変数が更新されます。

セッションごと

時には、さらに厳格な定義が求められる場合もあります。たとえば、作成した一時ディレクトリーにあるバイナリーをそれらへのパスを使ったり ~/.bashrc を一時的な必要性のために編集したりすることなく使用できるようにしたい場合です。

この場合、現在のプロファイルでの PATH 変数を単に export コマンドを使って定義します。ユーザーがログアウトするまでの間は PATH 変数にその一時的な設定が使われます。

root #export PATH="${PATH}:/home/my_user/tmp/usr/bin"