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

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

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

 

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

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

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

 

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

 

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

env

…[skipped]…
LC_MEASUREMENT=ru_RU.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=ru_RU.UTF-8
LC_MONETARY=ru_RU.UTF-8
LANG=en_US.UTF-8
…[skipped]…

 

Разница в том, что 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 функции

Самые часто используемые переменные:
  • 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. В него добавляются как переменные окружения, так и переменные оболочки.

 

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

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

 

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