Handbook:X86/Working/EnvVar

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:X86/Working/EnvVar and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎français • ‎polski • ‎русский • ‎українська • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
X86 Handbook
Установка
Об установке
Выбор подходящего источника для установки
Настройка сети
Подготовка дисков
Установка stage3
Установка базовой системы
Настройка ядра
Настройка системы
Установка системных утилит
Настройка загрузчика
Завершение
Работа с Gentoo
Введение в Portage
USE-флаги
Возможности Portage
Система init-скриптов
Переменные окружения
Работа с Portage
Файлы и каталоги
Переменные
Смешение ветвей программного обеспечения
Дополнительные утилиты
Дополнительные репозитории пакетов
Расширенные возможности
Настройка сети
Начальная настройка
Расширенная настройка
Модульное построение сети
Беспроводная сеть
Добавляем функциональность
Динамическое управление


Переменные окружения

Введение

Переменная окружения — это именованный объект, который содержит определения, используемые одним или несколькими приложениями. Используя переменные окружения, можно очень легко изменить настройки для одного или нескольких приложений.

Наиболее важные переменные

В следующей таблице перечислен ряд переменных, используемых в системе 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, который содержит определения следующих переменных:

Файл /etc/env.d/05gccПеременные, которые идут по умолчанию для gcc
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) и написать необходимое определение(я) в нем:

Файл /etc/env.d/99localНастройка глобальной переменной
http_proxy="proxy.server.com:8080"

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

env-update

Несколько файлов в /etc/env.d/ определяют переменную PATH. Это не ошибка: когда выполняется команда env-update, она добавит другие определения перед обновлением переменного окружения, что позволяет просто добавлять для пакетов (или пользователей) свои собственные настройки переменного окружения без вмешательство в уже существующие значениями.

Скрипт env-update добавляет значения из файлов /etc/env.d/ в алфавитном порядке. Имена файлов должны начинаться с двух десятичных чисел.

Код Порядок обновления, используемый env-update
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:

Файл ~/.bashrcДополнительный PATH для локального использования
# 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"