- bullseye-backports 4.18.1-1~bpo11+1
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 влияет на путь файлов, создаваемых tempnam(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).
ЗАМЕЧАНИЯ¶
Операции prctl(2) PR_SET_MM_ENV_START и PR_SET_MM_ENV_END можно использовать для управления расположением окружения процесса.
ДЕФЕКТЫ¶
Честно говоря, использование переменных окружения таит в себе проблемы с безопасностью. Многие системные команды могут неправильно работать, если пользователь укажет неправильные значения для переменной 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), putenv(3), setenv(3), unsetenv(3), locale(7), ld.so(8), pam_env(8)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
13 августа 2020 г. | Linux |