全てのUnixプロセスは"環境(environment)"を含んでいます。これは名前と値を から成る変数のリストで、これらの文字に多くのキャラクタを入れることが できます。全てのUnixプロセスは親プロセスを持っています -- 親プロセスが 作るプロセスは子プロセスです。子プロセスは親プロセスから環境を引き継ぎま す。子プロセスに順番に環境を渡す前に、その環境に修正を加えることができます。
重要な環境変数のひとつはPATHです。これはコロン(:)によって分けられた ディレクトリのリストです。これらのディレクトリはfindコマンドで検索 されるものでもあります。例えばコマンドfooを実行しようとすると、PATH にあるディレクトリ全てを実行ファイルfooの検索対象とします ファイルが見つかるとそこで実行されます。
このHOWTOでは「コマンド」を実行プログラムを指すものとして使います。 パス機能を使って短い名前(short names)で呼び出されることを意味しています。
Linuxでは、プロセス(呼び出しのexec関連)を開始するための低水準なオペレー
ティングシステムコールでさえもPATH変数にあるディレクトリを検索します。
コマンドを実行しようとする時はいつでもパス機能を使うことができます。
もしexecオペレーティングシステムコールが/(スラッシュ)を含まない
ファイル名を得ようとするさいにはPATH環境変数を評価します。
環境にPATH変数がない時でさえ、少なくとも/bin
と/usr/bin
ディレクトリでコマンドを探します。
shではexportコマンドを環境の設定に使います。 またcshではsetenvが使われます。例えば:
sh:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
csh:
setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:.
Cプログラムはsetenv()
ライブラリコールを環境の変更に使います。Perlは
配列 %ENV
に環境を持っていて、PATH
を$ENV{PATH}="/bin"
としてセットできます。
envコマンドは現在の環境変数を調べる基本的な方法です。同様に環境変数の 修正にも使うことができます。
基本的な環境メカニズムの情報については、 manページのenviron, execl, setenv、infoファイルenv そしてシェルのドキュメントに書かれています。
Linuxが起動すると、はじめに開始する通常プロセスはinitプロセスです。 これは親プロセスを持っていない点で特殊なプロセスであるということができます。 そしてinitプロセスは他の全てのプロセスの先祖(ancestor:大もと)です。 init環境は、実質的にinitに触れなくても、全プロセスの環境として残されます。 ほとんどのプロセスはタッチします。
initはプロセスのグループを開始します。/etc/inittab
ファイルは
どのプロセスをシステムスタートするか指定します。これらのプロセスは
initから直接継承される環境で動作します -- 典型的にはgettyといったプロセス
です(コンソールにlogin:を表示するプログラム)。もしここでPPP接続を開始する
ときは、init環境で動作していることを忘れてはなりません。システム初期化は
ここで開始されるスクリプトです。Debian 1.3の初期化スクリプトは
/etc/init.d/rc
で、順番に初期化スクリプトが呼び出されます。
システムは多くのサーバ(デーモン)を走らせています。これらはデフォルトの 環境で使うものもあればそうでないものもあります。ほとんどのサーバは 初期化スクリプトからこれらを開始し、そのためinit環境であると考えることが できます。
ユーザーがシステムにログインすると、環境はプログラム/システム広範の 初期化スクリプト/ユーザー初期化スクリプトに組み込まれる設定によって 反映されます。これはよい組み込まれかたですが現在の状態が完全に満足の いくものではありません。ユーザーがテキストコンソールからログインする 時とXDM、ネットワークからログインする時とではまったく違うものとなります。