Общие принципы
Все процессы в Unix содержат "окружение" (environment). Это список переменных, которые содержат имена и значения, они являются строками и могут содержать большинство символов. Все процессы в Unix имеют родительский процесс - просесс созданный этим процессом называется дочерним. Дочерние процессы наследуют окружение от родительского процесса. Они могут делать некоторые изменения в окружении перед принятием окружения уже их дочерними процессами.
Одна важная переменная окружения - PATH (ПУТЬ), список каталогов, разделенных двоеточием (':'). Эти каталоги просматриваются, чтобы найти команды. Если вы пробуете вызвать команду 'foo', все каталоги из переменной PATH (в указаном порядке) будут просмотрены для выполнения файла 'foo' (с установленными правами на выполнение). Если файл найден, он исполняется.
В этом документе я использую термин 'команда', к которому отношу программы, которые, как предполагается, имеют короткое имя, используя механизм путей.
В Linux для запуска процесса операционная система просматривает каталоги,
записанные в переменной PATH: вы можете использовать механизм путей там,
где пробуете выполнить команду. Если операционная система получает имя
файла, котрый не содержит '/' то просматриваются каталоги из переменной
окружения 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 останется окружением всех процессов, если он не касаются окружения явно. Большинство процессов изменяют окружение.
Init запускает группу процессов. Файл /etc/inittab сообщает то, какие
процессы система запускает. Эти процессы работают в окружении, прямо
унаследованом от init - например программа 'getty' пишет 'login:' на
консоль. Если вы запускаете соединение PPP, вы должны помнить, что вы
работаете в окружении init. Инициализация системы - это часто сценарий,
который запускается отсюда. В Debian 1.3 скрипт инициализации
/etc/init.d/rc вызывает, в свою очередь, другие сценарии инициализации.
Система содержит много запускаемых серверов (демоны), которые могут
использовать или не использовать окружение, установленное по умолчанию.
Большинство серверов запускается из сценария инициализации, и, таким образом,
имеют окружение от init.
Когда пользователь заходит в систему, на среду действуют назначения,
которые записаны в программу при компиляции, в системный скрипт
инициализации и в пользовательский скрипт инициализации. Это довольно
усложнено, и текущая ситуация не полностью удовлетворительна. Процесс
различается, если пользователь заходит из консоли, XDM или из сети.