Переменные окружения Linux и как их задавать


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

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



Переменные окружения Linux и переменные оболочки


Рассмотрим значение понятий.

Переменные окружения используются для процесса пользовательского shell и всех порождаемые в нем дочерних процессах.

Переменные оболочки содержат данные, которые определяют состояние текущей сессии. Например, текущая директория.


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



Список переменных окружения можно посмотреть выполнив printenv или env

env



На скриншоте приведен пример вывода env:

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


Здесь можно видеть, что для пользователя root используется оболочка /bin/bash (про оболочку можно почитать подробнее в материале про добавление пользователя в Linux).

Также видно, что корневой каталог пользователя /root. Видно коды цветов, которые можно использовать в терминале.

Приведена небольшая часть вывода, весь он очень объемный и параметров множество.


Все эти параметры при необходимости можно перееопределить.



В отличии от env команда printenv позволяет выводить данные по определенной переменной — например:

printenv SHELL



Преимущество env в том, что появляется возможность передать переменную определенной команде


Например:

env SHELL="/bin/bash" ls -la /opt



Просмотреть переменные среды

set

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
…[skipped]…



Вывод можно перенаправить в less, чтобы в нем удобнее было ориентироваться

set | less



Чтобы не изменяя текущее окружение избавиться от лишней информации в выводе можно сделать так

(set -o posix; set)

В POSIX режиме не будут выводиться заданные bash функции



Самые часто используемые переменные окружения в Linux:


  • SHELL — оболочка, которая интерпретирует команды
  • USER — пользователь
  • PWD — текущий каталог
  • TERM — тип, терминала, который эмулируется


Команды в оболочке позволяют менять значение переменных. Так  pwd выводит в консоль текущую директорию

admin@desktop:~$ pwd

/home/admin



Это переменная оболочки PWD

admin@desktop:~$ set | grep PWD

OLDPWD=/tmp
PWD=/home/admin



Перейдем в /tmp и посмотрим как изменится значение

admin@desktop:~$ cd /tmp/

admin@desktop:/tmp$ set | grep PWD

OLDPWD=/home/admin
PWD=/tmp


Можно увидеть при смене каталога просто меняется значение переменной shell-а PWD, также изменяется и OLDPWD



Как установить переменную окружения или оболочки


Переменная оболочки добавляется следующим образом

SOMEVAR='Hi there'

set | grep SOMEVAR

SOMEVAR='Hi there'



В выводе env ее не будет, потому, что это переменная именно shell, а не окружения

env | grep SOMEVAR



Просмотреть содержимое можно через echo добавив знак $ перед именем

echo $SOMEVAR

Hi there



Чтобы переменную добавить в окружение ее нужно экспортировоать

export SOMEVAR='Hi there'

env | grep SOMEVAR

SOMEVAR=Hi there



После этого значение будет наследоваться дочерними процессами.


Удалить переменную окружения можно той же командой export с ключом -n

export -n SOMEVAR


Из оболочки значение удаляется unset

unset SOMEVAR



Автоматическая загрузка переменных при логине


Linux системы используют файлы ~/.bashrc, ~/.bash_profile, ~/.bash_login или ~/.profile для определение переменных.

Файлы считываются при логине, какой из них используется зависит от дистрибутива.



В Ubuntu/Debain это ~/.bashrc. В него добавляются как переменные окружения, так и переменные оболочки.



Пример ~/.bashrc:

bashrc в ubuntu


Самым первым считывается /etc/profile. В нем задано и может быть переопределено какие файлы и в каком порядке использовать дальше.



Для non-login сессии переменные задаются в /etc/bash.bashrc. Такая сессия свойственна для скриптов, запускаемых в фоне.


Для большинства задач достаточно отредактировать ~/.bashrc.

Файл .bashrc в Linux также используется для создания алиасов — коротких сочетаниях символов упрощающих работу. По алиасам доступны команды в том числе с параметрами.

Сказать спасибо