🐧 Как установить и перечислить переменные среды в Linux

by itisgood

В системах на основе Linux вы можете установить динамические именованные значения в качестве переменных среды.

Эти значения хранятся в системе и используются приложениями командной строки.

Ранее мы уже рассмотрели переменные среды:

🐧 Как установить и перечислить переменные среды в Linux

Но я решил углубиться в этот вопросю

Проще говоря, переменная окружения – это переменная с именем и связанным значением.

Переменная – это символ, буква или слово, такое как «x» или «y», которое представляет значение.

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

Переменная окружения доступна глобально в программе и ее дочерних программах. Переменная оболочки доступна только в текущей оболочке.

В этом уроке мы объясним, как составлять список и устанавливать переменные окружения и оболочки.

Переменные среды

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

Переменные среды реализованы в виде строк, представляющих пару ключ-значение.
Если передано несколько значений, они обычно разделяются двоеточием (:).
Каждая пара будет выглядеть примерно так:
KEY=value1:value2:value3
Имена переменных чувствительны к регистру и обычно используются в верхнем регистре (MY VAR1, VAR2 …)
Если значение содержит пробел, используются кавычки:
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. Это используется для различения различных типов файлов и предоставления пользователю дополнительной информации.
MAIL
Путь к почтовому ящику текущего пользователя.
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 позволяет вам изменить среду, в которой работают программы, передав набор переменных в команду:
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
.....
Команда отобразит большой список всех переменных, поэтому вы, вероятно, захотите направить вывод в команду less.
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.

 

You may also like

Leave a Comment