environ

ENVIRON(7)               Руководство программиста Linux               ENVIRON(7)



ИМЯ
       environ - пользовательское окружение

ОБЗОР
       extern char **environ;

ОПИСАНИЕ
       Переменная environ указывает на массив указателей на строки, который
       называют «окружением» (environment). Последний указатель в этом массиве
       имеет значение NULL (данная переменная должна быть объявлена в программе
       пользователя, а кроме того она объявлена в заголовочном файле <unistd.h>,
       если определён макрос тестирования свойств _GNU_SOURCE). Указанный массив
       строк, становится доступным процессу после вызова exec(3), которая
       запускает процесс. Если дочерний процесс создаётся с помощью fork(2), то
       он наследует копию окружения своего родителя.

       По договорённости, строки в environ имеют вид «имя=значение». Вот
       некоторые примеры:

       USER   Имя пользователя, зарегистрированного в системе (используется
              некоторыми программами, написанными для BSD).

       LOGNAME
              Имя пользователя, зарегистрированного в системе (используется
              некоторыми программами, написанными для System-V).

       HOME   Домашний каталог пользователя, устанавливается программой login(1)
              согласно значению из файла паролей passwd(5).

       LANG   Имя локали используется для категорий локали, если не заменено
              значением LC_ALL или более специфичными переменными окружения,
              такими как LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY,
              LC_NUMERIC и LC_TIME (подробней смотрите описание переменных
              окружения LC_* в locale(7)).

       PATH   Последовательность каталогов, которые sh(1) и многие другие
              программы будут применять в качестве префикса при поиске файла,
              если он задан неполным именем Каталоги разделяются «:» (похожим
              образом переменная CDPATH используется некоторыми командными
              оболочками для поиска каталога, в который нужно перейти, MANPATH
              используется командой man(1) для поиска справочных страниц и т.
              д.).

       PWD    Текущий рабочий каталог. Устанавливается некоторыми командными
              оболочками.

       SHELL  Имя регистрационной командной оболочки пользователя.

       TERM   Тип терминала, для которого будет подготавливаться вывод.

       PAGER  Предпочитаемая пользователем утилита просмотра текстовых файлов.

       EDITOR/VISUAL
              Предпочитаемая пользователем утилита редактирования текстовых
              файлов.

       Имена можно помещать в окружение оболочки с помощью команды export в
       sh(1) или командой setenv, если используется csh(1).

       Начальное окружение оболочки создаётся различными путями, например из
       файла /etc/environment, который обрабатывается pam_env(8) при входе
       любого пользователя (в системах с pam(8)). Также, различные сценарии
       инициализации оболочки, такие как системный сценарий /etc/profile и
       локальный пользовательский сценарий инициализации могут содержать
       команды, могут добавлять переменные в окружение оболочки; подробности
       смотрите в справочной странице на предпочитаемую оболочку.

       Оболочки, подобные Bourne, поддерживают синтаксис

           ИМЯ=значение команда

       для создания определения переменной окружения только в процессе, который
       выполняет команду. Перед командой можно указывать несколько определений
       переменных, разделяя их пробельным символом.

       При вызове exec(3) в окружение также могут быть помещены и аргументы.
       Программа, написанная на языке C, может изменять своё окружение с помощью
       функций getenv(3), putenv(3), setenv(3) и unsetenv(3).

       Заметим, что наличие или значения определённых переменных окружения может
       отказывать влияние на поведение многих программ и библиотечных процедур.
       Вот случайная подборка:

       Переменные  LANG, LANGUAGE, NLSPATH, LOCPATH, LC_ALL, LC_MESSAGES и т. д.
       влияют на работу с локалью; смотрите catopen(3), gettext(3) и locale(7).

       Переменная TMPDIR влияет на путь файлов, создаваемых tmpnam(3) и
       некоторыми другими процедурами, а также на временный каталог, который
       используется sort(1) и некоторыми другими программами.

       Переменные LD_LIBRARY_PATH, LD_PRELOAD и другие LD_* влияют на поведение
       динамического загрузчика/компоновщика.

       Переменная POSIXLY_CORRECT влияет на определённые программы и
       библиотечные вызовы таким образом, что они включают режим соответствия
       POSIX.

       На поведение malloc(3) оказывают влияние переменные MALLOC_*.

       В переменной HOSTALIASES задаётся имя файла, содержащего псевдонимы имени
       узла, которые будут использованы в функции gethostbyname(3).

       В переменных TZ и TZDIR указывается информация о часовом поясе; они
       используются в функциях tzset(3), ctime(3), localtime(3), mktime(3),
       strftime(3). Смотрите также tzselect(8).

       В переменной TERMCAP указывается информация по работе с терминалом (можно
       указать имя файла, содержащего такую информацию).

       Через переменные COLUMNS и LINES приложение может узнать о размере окна
       (возможно указать ненастоящий размер).

       В переменной PRINTER или LPDEST можно указать предпочтительный для печати
       принтер. Смотрите lpr(1).

ДЕФЕКТЫ
       Честно говоря, использование переменных окружения таит в себе проблемы с
       безопасностью. Многие системные команды могут неправильно работать, если
       пользователь укажет неправильные значения для переменной IFS или
       LD_LIBRARY_PATH.

       Также есть риск засорения пространства имен. Такие программы как make и
       autoconf позволяют заменять имена используемых по умолчанию утилит через
       переменные окружения. Например, переменная CC используется для выбора
       нужного C-компилятора (и, похожим образом, можно использовать переменные
       MAKE, AR, AS, FC, LD, LEX, RM, YACC и т.д.). Однако, есть случаи, когда в
       переменных окружения задают параметры программ, а не их имена (например,
       MORE, LESS и GZIP). Использование таких имён для переменных окружения
       является ошибочным и не должно применяться в новых программах. Авторы
       gzip должны бы переименовать переменную в GZIP_OPT.

СМОТРИТЕ ТАКЖЕ
       bash(1), csh(1), env(1), login(1), printenv(1), sh(1), tcsh(1),
       execve(2), clearenv(3), exec(3), getenv(3), pam_env(3), putenv(3),
       setenv(3), unsetenv(3), locale(7), ld.so(8)



Linux                              2016-03-15                         ENVIRON(7)