|
1.
Переменные среды
Что это такое?
Переменная среды — это именованный объект, который содержит информацию,
используемую одним или несколькими приложениями. Многие пользователи
(особенно новички в Linux) находят этот подход несколько странным или
неуправляемым. Но это впечатление ошибочно: используя переменные
среды, можно очень легко изменить настройку разнообразных программ.
Важные примеры
В следующей таблице описывается ряд переменных, используемых в системе Linux.
Примеры их значений приведены далее.
| Переменная |
Описание |
| PATH |
В этой переменной содержится список каталогов, разделенных двоеточиями, в
которых система ищет исполняемые файлы. Если вы вводите имя исполняемого
файла например, ls, rc-update или emerge), который
не находится ни в одной из перечисленных здесь каталогов, этот файл не
запустится (если, конечно, вы не указали полный путь, например,
/bin/ls).
|
| ROOTPATH |
У этой переменной такое же значение, что и у PATH, но в ней
перечисляются только те каталоги, которые нужно просматривать при вводе
команды пользователем с правами root.
|
| LDPATH |
В этой переменной содержится список каталогов, разделенных двоеточиями, в
которых динамический компоновщик ищет библиотеки.
|
| MANPATH |
В этой переменной содержится список каталогов, разделенных двоеточиями, в
которых команда man ищет страницы справки.
|
| INFODIR |
В этой переменной содержится список каталогов, разделенных двоеточиями, в
которых команда info ищет info-страницы.
|
| PAGER |
В этой переменной содержится путь к программе, позволяющей постранично
просматривать содержимое файлов, например less или more.
|
| EDITOR |
В этой переменной содержится путь к программе, используемой для изменения
файлов, например vi или nano.
|
| KDEDIRS |
В этой переменной содержится список каталогов, разделенных двоеточиями, в
которых находятся ресурсы KDE.
|
| CLASSPATH |
В этой переменной содержится список каталогов, разделенных двоеточиями, в
которых находятся классы Java.
|
| CONFIG_PROTECT |
В этой переменной содержится список каталогов, защищаемых Portage при
обновлении, разделенных пробелами.
|
| CONFIG_PROTECT_MASK |
В этой переменной содержится список каталогов, исключаемых из защиты
Portage при обновлении, разделенных пробелами
|
Ниже представлен пример определения всех этих переменных:
Листинг 1.1: Пример определения |
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"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
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"
|
1.
Глобальное определение переменных
Каталог /etc/env.d
Для того, чтобы определить эти переменные централизованно, в Gentoo появился
каталог /etc/env.d. В нём находится ряд файлов, например,
00basic, 05gcc и так далее, в которых определяются
переменные, необходимые программам, указанным в названии файлов.
Например, при установке gcc ebuild создает файл 05gcc,
содержащий следующие определения переменных:
Листинг 1.1: /etc/env.d/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) и добавить нужные определения туда:
Листинг 1.1: /etc/env.d/99local |
http_proxy="proxy.server.com:8080"
|
Используя один и тот же файл для всех своих переменных, вы можете быстро
увидеть все определенные вами переменные вместе.
Сценарий env-update
Переменная PATH определяется в нескольких файлах в
/etc/env.d. Нет, нет это не ошибка: при запуске env-update
различные определения объединяются перед обновлением переменных среды, позволяя
пакетам (или пользователям) добавлять собственные значения переменных, не влияя
на уже существующие.
Сценарий env-update объединяет значения переменных из файлов,
находящихся в /etc/env.d, в алфавитном порядке. Имена файлов
должны начинаться с двух десятичных цифр.
Листинг 1.1: Порядок обновления, используемый env-update |
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
|
Объединение выполняется не всегда, а только для следующих переменных:
KDEDIRS, PATH, CLASSPATH, LDPATH,
MANPATH, INFODIR, INFOPATH, ROOTPATH,
CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH и
PRELINK_PATH_MASK. Для всех остальных переменных используется значение,
определенное в последнем из файлов (по алфавиту в каталоге
/etc/env.d).
При запуске сценария env-update создаются все переменные среды, и
помещаются в /etc/profile.env (используемый файлом
/etc/profile). Кроме того, на основе значения LDPATH
создается /etc/ld.so.conf. После этого запускается
ldconfig, чтобы вновь создать файла /etc/ld.so.cache,
используемый динамическим компоновщиком.
Если вы хотите, чтобы результаты работы env-update вступили в силу
немедлено, для обновления среды выполните следующую команду. Пользователи,
самостоятельно устанавливавшие Gentoo, возможно, помнят ее из указаний по
установке:
Листинг 1.1: Обновление среды |
# env-update && source /etc/profile
|
Примечание:
Эта команда обновляет переменные только в текущем терминале, в новых
консолях и их потомках. То есть, если вы работаете в X11, потребуется или
набирать source /etc/profile в каждом открываемом терминале, или
перезапустить X, чтобы все новые терминалы обращались к новым переменным.
Если вы используете диспетчер входа в систему, станьте пользователем
с правами root и наберите /etc/init.d/xdm restart. Если нет, вам
придется выйти и снова войти в систему, чтобы X порождала потомков,
использующих новые значения переменных.
|
1.
Локальное определение переменных
Пользовательские переменные
Далеко не всегда нужно определять переменные глобально. Например, вам может
понадобиться добавить /home/my_user/bin и текущий рабочий каталог
(где вы находитесь) к переменной PATH, но при этом не нужно, чтобы это
добавление появилось и в переменной PATH у всех остальных пользователей.
Если вы хотите определить переменную среды локально, используйте
~/.bashrc или ~/.bash_profile:
Листинг 1.1: Расширение PATH в ~/.bashrc для локальных нужд |
PATH="${PATH}:/home/my_user/bin:"
|
Обновление вашей переменной PATH произойдет, когда вы выйдете и снова
войдете в систему.
Сеансовые переменные
Иногда нужны еще более жесткие ограничения. Вам может потребоваться возможность
запуска исполняемых файлов из специально созданного временного каталога
без указания полного пути к ним, и без изменения файла ~/.bashrc
ради нескольких минут.
В этом случае можно просто определить переменную PATH для текущего
сеанса командой export. Переменной будет присвоено временное значение
до тех пор, пока вы не завершите сеанс.
Листинг 1.1: Определение сеансовой переменной среды |
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"
|
|
Обновлено 28 сентября 2005 |
Исходный документ обновлен 18 мая 2007 |
|
Donate to support our development efforts.
|
|
|