В системах на основе Linux вы можете установить динамические именованные значения в качестве переменных среды.
Эти значения хранятся в системе и используются приложениями командной строки.
Ранее мы уже рассмотрели переменные среды:
🐧 Как установить и перечислить переменные среды в Linux
Но я решил углубиться в этот вопросю
Проще говоря, переменная окружения – это переменная с именем и связанным значением.
Переменная – это символ, буква или слово, такое как «x» или «y», которое представляет значение.
Переменная окружения может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам и т. д.
Переменная окружения доступна глобально в программе и ее дочерних программах. Переменная оболочки доступна только в текущей оболочке.
В этом уроке мы объясним, как составлять список и устанавливать переменные окружения и оболочки.
Переменные среды
Переменные среды – это переменные, которые доступны для всей системы и наследуются всеми порожденными дочерними процессами и оболочками.
KEY=value1:value2:value3
KEY="value with spaces"
Переменные оболочки
Переменные оболочки – это переменные, которые содержатся исключительно в оболочке, в которой они были установлены или определены.
Каждая оболочка, такая как zsh и bash, имеет свой собственный набор внутренних переменных оболочки.
Они обычно используются для отслеживания эфемерных данных, например, текущего рабочего каталога.
Использование такое же, как с глобальными переменными среды.
Чтобы сделать переменную оболочки доступной в качестве переменной среды, используйте экспорт MYVAR:
$ export MYVAR=linoxide.com $ echo $MYVAR linoxide.com $ env | grep MYVAR MYVAR=linoxide.com
Общие переменные среды и оболочки
Некоторые переменные среды и оболочки очень полезны и на них ссылаются довольно часто.
Вот некоторые общие переменные среды, с которыми вы столкнетесь:
TERM |
Указывает тип терминала для эмуляции при запуске оболочки. Разные аппаратные терминалы могут эмулироваться для разных эксплуатационных требований. Обычно вам не нужно беспокоиться об этом.
|
USER |
Текущий вошедший в систему пользователь.
|
PWD |
Текущий рабочий каталог.
|
OLDPWD | Предыдущий рабочий каталог. Он сохраняется в оболочке, чтобы переключиться обратно в ваш предыдущий каталог, запустив cd -. |
LS_COLORS |
Определяет цветовые коды, которые используются для добавления цветного вывода в команду ls. Это используется для различения различных типов файлов и предоставления пользователю дополнительной информации.
|
Путь к почтовому ящику текущего пользователя.
|
|
PATH |
Список каталогов, которые система будет проверять при поиске команд. Когда пользователь вводит команду, система проверяет каталоги в указанном порядке на наличие исполняемого файла.
|
LANG |
Текущие настройки языка и локализации, включая кодировку символов.
|
HOME | Домашний каталог текущего пользователя. |
_ |
Самая последняя ранее выполненная команда.
|
BASHOPTS |
Список параметров, которые использовались при выполнении bash. Это может быть полезно для определения того, будет ли среда оболочки работать так, как вы этого хотите.
|
BASH_VERSION |
Версия bash выполняется в удобочитаемой форме.
|
BASH_VERSINFO |
Версия bash, в машиночитаемом выводе.
|
COLUMNS |
Количество столбцов в ширину, которые используются для вывода вывода на экран.
|
DIRSTACK |
Стек каталогов, доступных с помощью команд pushd и popd.
|
HISTFILESIZE |
Количество строк истории команд, сохраненных в файле.
|
HISTSIZE |
Количество строк истории команд, разрешенных в памяти.
|
HOSTNAME | Имя хоста компьютера на данный момент времени. |
IFS |
Внутренний разделитель полей для разделения ввода в командной строке. По умолчанию это пробел.
|
PS1 |
Определение основной командной строки. Это используется для определения того, как будет выглядеть ваша подсказка при запуске сеанса оболочки. PS2 используется для объявления дополнительных запросов, когда команда занимает несколько строк.
|
SHELLOPTS | Параметры оболочки, которые можно установить с помощью параметра set. |
UID | UID текущего пользователя. |
Перечисление переменных среды и шелла
Есть несколько доступных команд, которые позволяют вам перечислить переменные среды в Linux:
env – команда позволяет вам запускать другую программу в пользовательской среде без изменения текущей.
При использовании без аргумента он напечатает список текущих переменных среды.
printenv – команда выводит все или указанные переменные среды.
set – команда устанавливает или сбрасывает переменные оболочки.
Когда используется без аргумента, она выводит список всех переменных, включая переменные окружения и оболочки, а также функции оболочки.
В состоянии по умолчанию env и printenv должны работать одинаково:
$ printenv SSH_CONNECTION=10.0.2.2 37182 10.0.2.15 22 LESSCLOSE=/usr/bin/lesspipe %s %s LANG=C.UTF-8 XDG_SESSION_ID=5 USER=vagrant MYVAR=linoxide.com PWD=/home/vagrant HOME=/home/vagrant SSH_CLIENT=10.0.2.2 37182 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/vagrant TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LOGNAME=vagrant XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin LESSOPEN=| /usr/bin/lesspipe %s _=/usr/bin/printenv
Разница между командами env и printenv проявляется только в их более специфической функциональности.
Например, с помощью printenv вы можете запросить значения отдельных переменных:
$ printenv SHELL /bin/bash $ printenv HOME /home/vagrant $ printenv MYVAR linoxide.com
env MYVAR=itisgood.ru command_to_run command_options
Команды printenv и env выводят только переменные окружения.
Если вы хотите получить список всех переменных, включая переменные окружения и оболочки, а также функции оболочки, вы можете использовать команду set:
$ set BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION_VERSINFO=([0]="2" [1]="8") BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.4.20(1)-release' COLUMNS=140 DIRSTACK=() EUID=1000 GROUPS=() HISTCONTROL=ignoreboth HISTFILE=/home/vagrant/.bash_history HISTFILESIZE=2000 HISTSIZE=1000 HOME=/home/vagrant HOSTNAME=ubuntu-bionic HOSTTYPE=x86_64 IFS=$' \t\n' LANG=C.UTF-8 LESSCLOSE='/usr/bin/lesspipe %s %s' LESSOPEN='| /usr/bin/lesspipe %s' LINES=35 LOGNAME=vagrant .....
set | less
Задать переменные оболочки и среды
Команды, доступные для установки переменных среды в Linux:
- set – команда устанавливает или сбрасывает переменные оболочки. Когда используется без аргумента, он напечатает список всех переменных, включая переменные окружения и оболочки, а также функции оболочки.
- unset – команда удаляет переменные оболочки и окружения.
- export – Команда устанавливает переменные среды.
Чтобы лучше понять разницу между оболочкой и переменными среды, мы начнем с установки переменных оболочки, а затем перейдем к переменным среды.
Мы начнем с определения переменной оболочки в нашем текущем сеансе.
Вы можете проверить, что переменная установлена, используя echo $MYVAR
$ MYVAR=itisgood $ echo $MYVAR itisgood
Используйте команду printenv, чтобы проверить, является ли эта переменная переменной среды:
$ printenv MYVAR
Должно быть никакого вывода.
Это означает, что переменная MYVAR не является переменной окружения.
Команда export используется для установки переменных окружения.
Чтобы создать переменную среды, просто экспортируйте переменную оболочки как переменную среды:
$ export MYVAR
$ printenv MYVAR itsigood
$ export MYNEWVAR="My New Variable"
Если вы откроете новую оболочку или выйдете из системы, все переменные будут потеряны.
Мы также можем вернуть переменную окружения в переменную оболочки или даже полностью (неустановить) удалить ее:
Наша переменная MYVAR определяется как переменная среды.
$ export -n MYVAR
Это больше не переменная окружения, однако, это все еще переменная оболочки.
Если мы хотим полностью удалить переменную, либо оболочку, либо окружение, мы можем сделать это с помощью команды unset:
$ unset MYVAR
$ echo $MYVAR
Постоянные переменные среды
Мы уже упоминали, что многие программы используют переменные среды, чтобы определить особенности работы.
Мы не хотим устанавливать важные переменные каждый раз, когда начинаем новый сеанс оболочки,
Оболочка bash считывает различные файлы конфигурации в зависимости от того, как запущен сеанс.
Интерактивный сеанс оболочки – это сеанс оболочки, который подключен к терминалу.
Неинтерактивный сеанс оболочки – это сеанс, не присоединенный к сеансу терминала.
Одно из различий между различными сессиями заключается в том, вызывается ли оболочка как сеанс «входа в систему» или «не входа в систему».
В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
/etc/environment – используйте этот файл для настройки общесистемных переменных окружения.
/etc/profile – переменные, установленные в этом файле, загружаются при каждом входе в оболочку bash.
~/.bashrc – Конфигурационные файлы для конкретной оболочки пользователя. Например, если вы используете Bash, вы можете объявить переменные там.
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source:
$ source ~/.bashrc
Если вам нужно установить общесистемные переменные, вы можете подумать о добавлении их в /etc/profile, /etc/bash.bashrc или /etc/environment.