Environment variables (Русский)

Переменные окружения — именованные переменные, содержащие текстовую информацию, которую могут использовать запускаемые программы. Такие переменные могут содержать общие настройки системы, параметры графической или командной оболочки, данные о предпочтениях пользователя и многое другое. Значением такой переменной может быть, например, место размещения исполняемых файлов в системе, имя предпочитаемого текстового редактора или настройки системной локали. Новые в Linux пользователи часто находят такой способ хранения настроек неудобным. Однако, переменные окружения позволяют простым и надежным способом передавать настройки сразу для множества приложений.

Состояние перевода: На этой странице представлен перевод статьи Environment variables. Дата последней синхронизации: 15 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Утилиты

Пакет coreutils содержит программы printenv и env. Чтобы отобразить список текущих переменных окружения, используйте printenv, которая отобразит имена и значения каждой переменной окружения:

$ printenv
Примечание: Некоторые переменные окружения относятся к конкретному пользователю в системе. Вы можете убедиться в этом, сравнив вывод команды printenv для обычного пользователя и для суперпользователя.

Программа env может быть использована для запуска команд с указанием нового значения переменной окружения. В следующем примере будет запущен xterm, для которого переменная окружения EDITOR имеет значение vim. Такой вызов не затронет переменную окружения EDITOR в текущем сеансе терминала.

$ env EDITOR=vim xterm

Встроенная в Bash команда set позволяет вам устанавливать значения переменных окружения в текущем сеансе терминала, а также отображать имена и значения переменных окружения текущего сеанса. Для получения дополнительной информации, смотрите документацию по команде set.

Чтобы увидеть переменные окружения конкретных процессов, откройте файл /proc/pid/environ, где pid — числовой идентификатор интересующего процесса. Записи в этом файле отделены друг от друга нулевым байтом (\x0), который обычно не виден в терминале. Вы можете использовать например sed для отображения переменных окружения процесса в более читабельном формате, заменив нулевые байты на переносы строки: sed 's:\x0:\n:g' /proc/$PID/environ

Установка переменных

Смотрите также раздел systemd/Пользователь#Переменные окружения.

На системном уровне

Большинство дистрибутивов Linux советуют изменять или добавлять переменные окружения в или других местах. Имейте в виду, что сразу множество файлов могут содержать переменные окружения и переопределять их, вроде . По сути, любой скрипт может быть использован для этого, однако, по принятым в UNIX соглашениям, следует использовать для этого только определенные файлы.

Следующие файлы следует использовать для установки переменных окружения на уровне системы: , и настройки, специфичные для командных оболочек. Каждый из этих файлов имеет свои ограничения, поэтому следует внимательно выбирать тот, который подходит для ваших целей.

  • используется модулем PAM-env. Он не привязан к командным оболочкам, поэтому скрипты или glob-выражения использовать здесь нельзя. Здесь можно указывать только пары . Подробнее смотрите pam_env(8) и .
  • устанавливает переменные только при логине в командные оболочки. Он может запускать любые скрипты в оболочках, совместимых с Bourne shell.
  • Файлы настроек, специфичные для конкретных командных оболочек — глобальные файлы для вашей командной оболочки, инициализирует переменные и запускает скрипты. Например, Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы Запуска/Завершения.

Ниже приведен пример скрипта, который позволяет добавлять каталог пользователя в PATH. Чтобы это сделать, просто поместите код в один из системных файлов инициализации окружения ( или ):

На уровне пользователя

Вам не всегда нужно будет устанавливать переменные окружения на уровне системы. Например, вы можете добавить ваш каталог в PATH, однако, не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:

  1. пользовательский аналог файла , который используется модулем PAM-env. Смотрите подробнее в pam_env(8) и .
  2. Файлы инициализации командной оболочки, например Bash (Русский)#Файлы настроек или Zsh (Русский)#Файлы Запуска/Завершения.

Например, чтобы добавить каталог в PATH, поместите следующее в :

export PATH="${PATH}:/home/пользователь/bin"

Чтобы увидеть изменения перезайдите в командную оболочку, либо используйте команду source: .

Примечание:
  • Демон dbus и пользовательский экземпляр systemd не наследуют никакие переменные окружения из мест вроде ~/.bashrc. Это означает, что, например, активируемые через dbus программы вроде Gnome Files не будут использовать их по умолчанию. Смотрите systemd (Русский)/User (Русский)#Переменные окружения.
  • Чтение ~/.pam_environment объявлено устаревшим, и эта возможность будет удалена в будущем.

Графические приложения

Чтобы установить переменные окружения для графических приложений, вы можете поместить ваши переменные в xinitrc или в xprofile если используется экранный менеджер, например:

Приложения, работающие в Wayland, могут использовать systemd user environment variables, так как Wayland не использует Xorg-специфичные файлы:

Чтобы установить переменные окружения только для определённого приложения вместо целого сеанса, измените .desktop файл этого приложение. Смотрите Desktop entries (Русский)#Изменение переменных среды.

На уровне сеанса

Иногда разумно установить переменную окружения только для текущего сеанса. Для этого вы можете создать в своем каталоге скрипт с нужными переменными, который можно будет запустить в любое время с помощью команды source, либо вводить команды для установки переменных окружения самостоятельно, используя команду export, например:

$ export PATH="${PATH}:/home/my_user/tmp/usr/bin"

Примеры

В этом разделе описываются типовые переменные окружения, используемые в Linux.

  • означает имя окружения рабочего стола (Desktop Environment). xdg-open использует это значение для выбора наиболее удобного приложения для открытия файлов, которое предоставляет окружение. Для использования этой возможности может потребоваться установить некоторые пакеты. Для GNOME необходимо установить ; в Xfce — exo. Типичные значения переменной окружения: , , , и .
Переменная окружения должна быть экспортирована перед запуском оконного менеджера, например:
~/.xinitrc
export DE="xfce"
exec openbox
Это позволит xdg-open использовать более удобный exo-open, так как он будет полагать, что запущен в Xfce. Используйте exo-preferred-applications для настройки.
  • . В среде рабочего стола LXDE, когда у установлено значение , xdg-open будет использовать файловые предпочтения из pcmanfm.
  • PATH содержит список каталогов, разделённых двоеточиями, в которых система ищет исполняемые файлы. Когда обычная команда, например, , или , интерпретируется командной оболочкой (такой как bash или ), оболочка ищет исполняемый файл с указанным именем в этом списке, и, если находит, запускает файл, передав ему указанные аргументы командной строки. Чтобы запускать исполняемые файлы, пути к которым не находятся в PATH, необходимо указывать относительный или абсолютный путь к файлу, например или .
  • содержит путь к домашнему каталогу текущего пользователя. Эта переменная может использоваться приложениями для определения расположения файлов настроек пользователя, который их запускает.
  • содержит путь к рабочему каталогу.
  • содержит путь к предыдущему рабочему каталогу, то есть, значение перед последним вызовом cd.
  • TERM содержит тип запущенного терминала, например . Это используется некоторыми программами, которые хотят знать возможности текущего терминала.
  • MAIL содержит путь к каталогу, где сохраняется входящая почта. Обычно имеет значение .
  • и содержат адреса прокси-серверов для протоколов и соответственно:
ftp_proxy="ftp://192.168.0.1:21"
http_proxy="http://192.168.0.1:80"
  • содержит список каталогов, которые использует man для поиска man-страниц.
  • INFODIR, аналогично , содержит список каталогов, в которых команда info производит поиск info-страниц, например .
  • может использоваться для установки временной зоны. Доступные временные зоны можно найти в , например . When pointing the variable to a zoneinfo file, it should start with a colon per the GNU manual.

Программы по умолчанию

  • содержит путь к предпочитаемой командной оболочке текущего пользователя. Имейте в виду, что это не обязательно совпадает с текущей работающей оболочкой, хотя обычно Bash прописывает эту переменную при своём запуске.
  • указывает команду для запуска программы постраничного просмотра содержимого текстовых файлов, например, .
  • EDITOR содержит команду для запуска программы для редактирования текстовых файлов, например /usr/bin/nano. Также можно задать специальную команду, которая будет выбирать редактор в зависимости от окружения, например, gedit в X или nano в терминале, как в этом примере:
export EDITOR="$(if [[ -n $DISPLAY ]]; then echo 'gedit'; else echo 'nano'; fi)"
  • позволяет указать имя продвинутого текстового редактора для более сложных задач, например, редактирования почты. Это могут быть , vim, emacs и т. д.
  • BROWSER содержит команду для запуска веб-браузера. Может быть полезно устанавливать это значение в зависимости от наличия графического окружения:
if [ -n "$DISPLAY" ]; then
    export BROWSER=firefox
else 
    export BROWSER=links

fi

Использование pam_env

PAM-модуль pam_env(8) загружает переменные для прописывания в окружение из следующиех файлов: , и .

  • должен содержать только простые пары вида на отдельных строках, наприммер:
  • и имеют одинаковый формат: и являются специальными переменными, значение которых берётся из . Следующий пример показывает, как использовать переменную внутри другой переменной:
    Примечание: Переменные ${HOME} и ${SHELL} не связаны с переменными окружения HOME и SHELL, они не прописываются по умолчанию.
    Формат также позволяет расширить уже определённые переменные значениями из других переменных с помощью , например: Пары тоже допускаются, но расширение переменных здесь не поддерживается. Подробнее смотрите .

Смотрите также

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.