Environment variables (Русский)
Переменные окружения — именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, данные о предпочтениях пользователя и многое другое. Значением такой переменной может быть, например, место размещения исполняемых файлов в системе, имя предпочитаемого текстового редактора или настройки системной локали. Новые в Linux пользователи часто находят такой способ хранения настроек неудобным. Однако, переменные окружения позволяют простым и надежным способом передавать настройки сразу для множества приложений.
Contents
Утилиты
Пакет coreutils содержит программы printenv и env. Чтобы отобразить список текущих переменных окружения, используйте printenv, которая отобразит имена и значения каждой переменной окружения:
$ printenv
Программа env может быть использована для запуска команд с указанием нового значения переменной окружения. В следующем примере будет запущен xterm, для которого переменная окружения EDITOR имеет значение vim. Такой вызов не затронет переменную окружения EDITOR в текущем сеансе терминала.
$ env EDITOR=vim xterm
Встроенная в Bash команда set позволяет вам устанавливать значения переменных окружения в текущем сеансе терминала, а также отображать имена и значения переменных окружения текущего сеанса. Для получения дополнительной информации, смотрите документацию по команде set.
Чтобы увидеть переменные окружения конкретных процессов, откройте файл /proc/pid/environ, где pid — числовой идентификатор интересующего процесса. Записи в этом файле разделены специальными символами \x0, которые не отображаются на экране. Вы можете использовать следующую функцию, которая позволяет отобразить переменные окружения процесса, заменяя эти символы на переносы строки:
# envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }
Например, для вывода переменных окружения процесса с pid=1, наберите:
# envof 1 TERM=linux
Примеры
В этом разделе описываются типовые переменные окружения, используемые в Linux.
-
DEсодержит имя окружения рабочего стола (Desktop Environment). xdg-open использует это значение для выбора наиболее удобного приложения для открытия файлов, которое предоставляет окружение. Для использования этой возможности может потребоваться установить некоторые пакеты. Для GNOME необходимо установить libgnomeAUR; в Xfce — exo. Типичные значения переменной окружения:gnome,kde,xfce,lxdeиmate.
- Переменная окружения
DEдолжна быть экспортирована перед запуском оконного менеджера, например:
~/.xinitrc
export DE="xfce" exec openbox
- Это позволит xdg-open использовать более удобный exo-open, так как он будет полагать, что запущен в Xfce. Используйте exo-preferred-applications для настройки.
-
DESKTOP_SESSION. В среде рабочего стола LXDE, когда уDESKTOP_SESSIONустановлено значениеLXDE, xdg-open будет использовать файловые предпочтения из pcmanfm.
-
PATHсодержит список каталогов, в которых система ищет исполняемые файлы. Когда обычная команда, например,ls,rc-updateилиemerge, интерпретируется командной оболочкой (такой какbashилиzsh), оболочка ищет исполняемый файл с указанным именем в этом списке, и, если находит, запускает файл, передав ему указанные аргументы командной строки. Чтобы запускать исполняемые файлы, пути к которым не находятся вPATH, необходимо указывать полный путь к файлу, например/bin/ls.
-
HOMEсодержит путь к домашнему каталогу текущего пользователя. Эта переменная может использоваться приложениями для определения расположения файлов настроек пользователя, который их запускает.
-
PWDсодержит путь к рабочему каталогу.
-
OLDPWDсодержит путь к предыдущему рабочему каталогу, то есть, значениеPWDперед последним вызовом cd.
-
SHELLсодержит имя текущей командной оболочки, например,bash.
-
TERMсодержит имя запущенной программы-терминала, напримерxterm.
-
PAGERуказывает команду для запуска программы постраничного просмотра содержимого текстовых файлов, например,/bin/less.
-
EDITORсодержит команду для запуска программы для редактирования текстовых файлов, например/usr/bin/nano. Также можно задать специальную команду, которая будет выбирать редактор в зависимости от окружения, например, gedit в X или nano в терминале, как в этом примере:
export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'gedit'; else echo 'nano'; fi)"
-
VISUALпозволяет указать имя продвинутого текстового редактора для более сложных задач, например, редактирования почты. Это могут бытьvi, vim, emacs и т. д.
-
MAILсодержит путь к каталогу, где сохраняется входящая почта. Обычно имеет значение/var/spool/mail/$LOGNAME.
-
BROWSERсодержит команду для запуска веб-браузера. Может быть полезно устанавливать это значение в зависимости от наличия графического окружения:
if [ -n "$DISPLAY" ]; then
export BROWSER=firefox
else
export BROWSER=links
fi
-
ftp_proxyиhttp_proxyсодержат адреса прокси-серверов для протоколовFTPиHTTPсоответственно, например:
ftp_proxy="ftp://192.168.0.1:21" http_proxy="http://192.168.0.1:80"
-
MANPATHсодержит список каталогов, которые использует man для поиска man-страниц. Стандартным значением является/usr/share/man:/usr/local/share/man.
-
INFODIR, аналогичноMANPATH, содержит список каталогов, в которых команда info производит поиск info-страниц. Стандартным значением является/usr/share/info:/usr/local/share/info.
-
TZможет использоваться для установки временной зоны. Доступные временные зоны можно найти в/usr/share/zoneinfo/, напримерTZ="/usr/share/zoneinfo/Pacific/Fiji".
Установка переменных
Смотрите также раздел Systemd/User#Environment variables.
На системном уровне
Большинство дистрибутивов Linux советуют изменять или добавлять переменные окружения в /etc/profile или других местах. Имейте в виду, что сразу множество файлов могут содержать переменные окружения и переопределять их. По сути, любой скрипт может быть использован для этого, однако, по принятым в UNIX соглашениям, следует использовать для этого только определенные файлы.
Следующие файлы следует использовать для установки переменных окружения на уровне системы: /etc/profile, /etc/bash.bashrc и /etc/environment. Каждый из этих файлов имеет свои ограничения, поэтому следует внимательно выбирать тот, который подходит для ваших целей.
-
/etc/profileустанавливает переменные только для командных оболочек. Он может запускать любые скрипты в оболочках, совместимых с Bourne shell. -
/etc/bash.bashrcустанавливает переменные только для интерактивных оболочек. Он также запускает bash-скрипты. -
/etc/environmentиспользуется модулем PAM-env. Здесь можно указывать только парыимя=значение.
Ниже приведен пример скрипта, который позволяет добавлять каталог ~/bin пользователя в PATH. Чтобы это сделать, просто поместите код в один из системных файлов инициализации окружения (/etc/profile или /etc/bash.bashrc):
# If user ID is greater than or equal to 1000 & if ~/bin exists and is a directory & if ~/bin is not already in your $PATH
# then export ~/bin to your $PATH.
if [[ $UID -ge 1000 && -d $HOME/bin && -z $(echo $PATH | grep -o $HOME/bin) ]]
then
export PATH=$HOME/bin:${PATH}
fi
На уровне пользователя
Вам не всегда нужно будет устанавливать переменные окружения на уровне системы. Например, вы можете добавить ваш каталог /home/пользователь/bin в PATH, однако, не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:
- Файлы инициализации командной оболочки, например Bash#Configuration files или Zsh#Configuration files[broken link: invalid section].
-
~/.profileиспользуется также многими оболочками, смотрите Wikipedia:Unix_shell#Configuration files for shells. -
~/.pam_environmentпользовательский аналог файла/etc/environment, который используется модулем PAM-env. Смотрите подробнее вpam_env(8).
Например, чтобы добавить каталог в PATH, поместите следующее в ~/.bash_profile:
export PATH="${PATH}:/home/пользователь/bin"
Чтобы увидеть изменения перезайдите в командную оболочку, либо используйте команду source: $ source ~/.bash_profile.
Графические приложения
Чтобы установить переменные окружения для графических приложений, вы можете поместить ваши переменные в xinitrc, например:
~/.xinitrc
export PATH="${PATH}:~/scripts"
export GUIVAR=value
На уровне сеанса
Иногда разумно установить переменную окружения только для текущего сеанса. Для этого вы можете создать в своем каталоге скрипт с нужными переменными, который можно будет запустить в любое время с помощью команды source, либо вводить команды для установки переменных окружения самостоятельно, используя команду export, например:
$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"