Переменные окружения Linux вместе с переменными оболочки — то, что определяет настройки в рамках пользовательской сессии.
Они загружаются автоматически, но могут быть переопределены. Окружение создается каждый раз при логине в систему.
Переменные окружения Linux и переменные оболочки
Рассмотрим значение понятий.
Переменные окружения используются для процесса пользовательского shell и всех порождаемые в нем дочерних процессах.
Переменные оболочки содержат данные, которые определяют состояние текущей сессии. Например, текущая директория.
В каждой сессии используются и переменные окружения, и переменные оболочки.
Список переменных окружения можно посмотреть выполнив printenv или env
env
На скриншоте приведен пример вывода env:
Здесь можно видеть, что для пользователя 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:
Самым первым считывается /etc/profile. В нем задано и может быть переопределено какие файлы и в каком порядке использовать дальше.
Для non-login сессии переменные задаются в /etc/bash.bashrc. Такая сессия свойственна для скриптов, запускаемых в фоне.
Для большинства задач достаточно отредактировать ~/.bashrc.
Файл .bashrc в Linux также используется для создания алиасов — коротких сочетаниях символов упрощающих работу. По алиасам доступны команды в том числе с параметрами.