# Environment variables (Русский)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

## Утилиты

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

    $ 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`.

Примечание: Из соображений безопасности, не рекомендуется включать текущий каталог (`.`) в список `PATH`, так как это может спровоцировать случайный запуск вредоносного исполняемого файла.

- `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/Пользователь#Переменные окружения.

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

Большинство дистрибутивов 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`, однако, не хотите, чтобы это затрагивало других пользователей системы. Переменные окружения пользователя можно устанавливать во многих других файлах:

1. Файлы инициализации командной оболочки, например Bash#Файлы настроек или Zsh#Startup/Shutdown files.
2. `~/.profile` используется также многими оболочками, смотрите Wikipedia:Unix_shell#Configuration files for shells.
3. `~/.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"

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

- Документация Gentoo Linux
- Default applications
- xdg-open (Русский)

Category:

- System administration (Русский)