Общие принципы

Все процессы в Unix имеют "окружение". Это список переменных, который содержит имена и значения, представленные в виде строк, которые могут содержать большинство символов. У всех Unix процессов есть родительский процесс - процесс который создал данный в качестве дочернего. Дочерние процессы наследуют окружение у родительских. Они могут модифицировать окружение, прежде чем передать своим дочерним процессам.

Одна из важнейших переменных окружения - это PATH, список директорий, разделенный двоеточиями (':'). Эти директории просматриваются при поиске команд. Если вы попробуете вызвать команду 'foo', все директории в PATH (в порядке их указания) будут просмотрены в поиске исполнимого файла 'foo' (с установленным атрибутом выполнения). Если файл найден, он будет запущен на выполнение.

В данном howto, я использую термин 'команда', чтобы обозначить исполняемую программу, которая запускается на исполнение с помощью короткого имени, используя механизм path.

В Линукс, даже низкоуровневые вызовы операционной системы для запуска процессов (семейство вызовов exec) просматривают директории указанные в переменной 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 это простейший путь запросить текущие переменные окружения. Её можно также использовать для их модификации.

Более подробную информацию о механизме работы окружения, можно найти в страницах руководства 'environ', 'execl', 'setenv', и info файле 'env', а также в документации на различные командные интерпретаторы.

Когда Линукс загружается, первый запускаемый процесс - это init. Это специальный процесс, т.к. он не имеет родительского процесса. В тоже время он является прародителем всех процессов. Окружение Init является окружением всех процессов, если они его не изменят. Большинство изменяют.

Init запускает группу процессов. Файл /etc/inittab описывает запускаемые процессы. Эти процессы работают с окружением, которое напрямую унаследовано от init - обычно это процессы вроде 'getty', программы, которая пишет 'login:' на консоль. Если вы устанавливаете PPP соединения на этом этапе, вы должны помнить, что работаете в окружении init. Отсюда обычно запускается скрипт системной инициализации. В Debian 1.3 скрипт инициализации это /etc/init.d/rc, который в свою очередь запускает другие скрипты инициализации.

Система обычно содержит множество постоянно запущенных процессов (демонов), которые могут использовать или не использовать окружение по умолчанию. Большинство серверов запускаются из инициализационных скриптов и поэтому имеют окружение init.

Когда пользователь входит в систему, на окружение влияют: установки , в-компилированные в программы, системные и пользовательские скрипты инициализации. При этом ситуация с окружение получается довольно сложной. Она совершенно различна в зависимости от метода входа в систему ( с текстовой консоли,при помощи XDM или через сеть).