This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Handbook:AMD64/Working/EnvVar
Переменные окружения
Введение
Переменная окружения — это именованный объект, который содержит определения, используемые одним или несколькими приложениями. Используя переменные окружения, можно очень легко изменить настройки для одного или нескольких приложений.
Наиболее важные переменные
В следующей таблице перечислен ряд переменных, используемых в системе Linux и описание их использования. Примеры их значений приведены после таблицы.
Variable | Description |
---|---|
PATH | Эта переменная содержит разделенный двоеточиями список каталогов, в которых система ищет исполняемые файлы. Если введенное имя это исполняемый файл (например, ls, rc-update или emerge), но если исполняемый файл не находится в каталоге из списка, то система не будет выполнять его (одна можно указать полный введен в качестве команды, такую как /bin/ls). |
ROOTPATH | У этой переменной те же функцию, что и у PATH, но в ней содержатся только те каталоги, которые должны быть проверены, когда root-пользователь вводит команду. |
LDPATH | Эта переменная содержит разделенный двоеточиями список каталогов, в которых динамический линковщик ищет библиотеки. |
MANPATH | Эта переменная содержит разделенный двоеточиями список каталогов, в которых команда man ищет страницы man. |
INFODIR | Эта переменная содержит разделенный двоеточиями список каталогов, в которых команда info выполняет поиск страниц info. |
PAGER | Эта переменная содержит путь к программе, используемой для отображения содержимого файлов (таких как less или more). |
EDITOR | Эта переменная содержит путь к программе, используемой для изменения содержимого файлов (таких как nano или vi). |
KDEDIRS | Эта переменная содержит разделенный двоеточиями список каталогов, содержащих специфический материал для KDE. |
CONFIG_PROTECT | Эта переменная содержит разделенный пробелами список каталогов, которые должны быть защищены Portage при обновлении. |
CONFIG_PROTECT_MASK | Эта переменная содержит разделенный пробелами список каталогов, которые не должны быть защищены Portage при обновлении. |
Ниже приведен пример содержащий все эти переменные:
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin" ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" MANPATH="/usr/share/man:/usr/local/share/man" INFODIR="/usr/share/info:/usr/local/share/info" PAGER="/usr/bin/less" EDITOR="/usr/bin/vim" KDEDIRS="/usr" CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \ /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \ /usr/share/texmf/tex/platex/config/ /usr/share/config" CONFIG_PROTECT_MASK="/etc/gconf"
Определение переменных глобально
Каталог env.d
Для централизации определения переменных в Gentoo ввели каталог /etc/env.d/. Внутри каталога есть несколько файлов, такие как 00basic, 05gcc, и т.д., которые содержат переменные, необходимые программе из названия файла.
Например, когда установлен gcc, ebuild создает файл с названием 05gcc, который содержит определения следующих переменных:
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man" INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info" CC="gcc" CXX="g++" LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
Другие дистрибутивы просят пользователя изменять или добавлять такие определения переменных окружения в /etc/profile или в других местах. С другой стороны, в Gentoo очень просто для пользователя (и для Portage) обслуживать и управлять переменными окружения без необходимости обращать внимание на многочисленные файлы, которые содержат переменные окружения.
Например, когда обновляется gcc, также обновляется и файл /etc/env.d/05gcc без малейшего участия пользователя.
От этого выигрывает как Portage, так и пользователь. Иногда пользователям необходимо установит определенную переменную окружения для всей системы. Например, возьмем переменную http_proxy. Чтобы не возится с /etc/profile, пользователь может просто создать файл (скажем /etc/env.d/99local) и написать необходимое определение(я) в нем:
http_proxy="proxy.server.com:8080"
Используя один и тот же файл для всех пользовательских переменных можно получить компактный список переменных, которые были определены пользователем самостоятельно.
env-update
Несколько файлов в /etc/env.d/ определяют переменную PATH. Это не ошибка: когда выполняется команда env-update, она добавит другие определения перед обновлением переменного окружения, что позволяет просто добавлять для пакетов (или пользователей) свои собственные настройки переменного окружения без вмешательство в уже существующие значениями.
Скрипт env-update добавляет значения из файлов /etc/env.d/ в алфавитном порядке. Имена файлов должны начинаться с двух десятичных чисел.
00basic 99kde-env 99local +-------------+----------------+-------------+ PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
Объединение переменных происходит не всегда, а только для следующих переменных: ADA_INCLUDE_PATH, ADA_OBJECTS_PATH, CLASSPATH, KDEDIRS, PATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH, PRELINK_PATH_MASK, PKG_CONFIG_PATH и PYTHONPATH. Для всех остальных переменных используется последнее значение (в алфавитном порядке файлов в /etc/env.d/).
Можно добавить больше переменных к списку объединяемых переменных, добавив имя переменной в одну из переменных COLON_SEPARATED или SPACE_SEPARATED (также внутри файла /etc/env.d/).
При запуске env-update, скрипт создаст все переменное окружение и поместит его в /etc/profile.env (который используется /etc/profile). Кроме того, скрипт на основе значения LDPATH создаст /etc/ld.so.conf. После этого он запустит ldconfig, чтобы пересоздать файл /etc/ld.so.cache, используемый динамическим компоновщиком.
Чтобы увидеть эффект работы env-update сразу после его запуска, выполните следующую команду, чтобы обновить окружение. Пользователи, которые устанавливали Gentoo сами, вероятно, помнят, что это из инструкции по установке:
root #
env-update && source /etc/profile
Команда выше обновит переменные только для текущего терминала, в новых консолях и их потомках. Таким образом, если пользователь работает в X11, ему нужно либо вводить source /etc/profile в каждом новом открытом терминале, либо перезагрузить X, так все новые терминалы получили новые переменные. Если используется логин менеджер, то необходимо стать root и перезагрузить сервис /etc/init.d/xdm.
Нельзя использовать переменные шелл для определения других переменных. Это подразумевает, что такие вещи как
FOO="$BAR"
(где $BAR это другая переменная) запрещены.Определение переменных локально
Для пользователя
Не всегда нужно определять переменную окружения на глобальном уровне. Например, кому-то может понадобится добавить /home/my_user/bin и текущий рабочий каталог (каталог в котором находится пользователь) в переменную PATH, но не нужно чтобы все другие пользователи получили такой же PATH. Для определения переменной окружения локально, используйте ~/.bashrc или ~/.bash_profile:
# A colon followed by no directory is treated as the current working directory PATH="${PATH}:/home/my_user/bin:"
После выхода/входа, переменная PATH будет обновлена.
Для сессии
Иногда необходимы более жесткие ограничения. Например, необходимо использовать двоичные файлы из временного каталога без указания пути к ним или редактирования ~/.bashrc на короткий срок.
В этом случае просто определите переменную PATH для текущей сессии, воспользовавшись командой export. До тех пор пока пользователь не выйдет, переменная PATH будет использовать временные настройки.
root #
export PATH="${PATH}:/home/my_user/tmp/usr/bin"