
В системах Linux и Unix переменные окружения представляют собой набор динамических именованных значений, хранящихся в системе и используемых приложениями, запускаемыми в оболочках или подоболочках. Проще говоря, переменная окружения — это переменная с именем и связанным с ней значением.
Переменные окружения позволяют настраивать работу системы и поведение приложений. Например, переменная окружения может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам, а также о региональных настройках системы и раскладке клавиатуры.
В этом руководстве мы объясним, как читать и устанавливать переменные среды и оболочки.
Переменные среды и переменные оболочки
Переменные имеют следующий формат:
KEY=value KEY="Some other value" KEY=value1:value2
- Имена переменных чувствительны к регистру. По соглашению, имена переменных окружения должны быть написаны ЗАГЛАВНЫМИ буквами.
- При присвоении переменной нескольких значений они должны быть разделены символом двоеточия
:. - Вокруг символа равенства
=нет пробела.
Переменные можно разделить на две основные категории: переменные среды и переменные оболочки.
Переменные среды — это переменные, которые доступны во всей системе и наследуются всеми порожденными дочерними процессами и оболочками.
Переменные оболочки — это переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, например, zsh и bash , имеет свой собственный набор внутренних переменных оболочки.
Существует несколько команд, позволяющих просматривать и задавать переменные среды в Linux:
-
env– эта команда позволяет запустить другую программу в заданной среде, не изменяя текущую. При использовании без аргумента выводится список текущих переменных среды. -
printenv– команда печатает все указанные переменные среды. -
set– эта команда устанавливает или сбрасывает переменные оболочки. При использовании без аргумента выводится список всех переменных, включая переменные окружения и оболочки, а также функции оболочки. -
unset– команда удаляет переменные оболочки и среды. -
export– Команда устанавливает переменные среды.
Список переменных среды
Наиболее часто используемая команда для отображения переменных окружения — printenv . Если имя переменной передано в качестве аргумента, отображается только её значение. Если аргумент не указан, printenv выводит список всех переменных окружения, по одной переменной на строку.
Например, чтобы отобразить значение переменной среды HOME , выполните:
printenv HOME
На выходе будет выведен путь к текущему вошедшему в систему пользователю:
/home/linuxize
Вы также можете передать команде printenv более одного аргумента:
printenv LANG PWD
en_US /home/linuxize
Если запустить команду printenv или env без аргументов, будет выведен список всех переменных среды:
printenv
Вывод будет выглядеть примерно так:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35;... LESSCLOSE=/usr/bin/lesspipe %s %s LANG=en_US S_COLORS=auto XDG_SESSION_ID=5 USER=linuxize PWD=/home/linuxize HOME=/home/linuxize SSH_CLIENT=192.168.121.1 34422 22 XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop SSH_TTY=/dev/pts/0 MAIL=/var/mail/linuxize TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LANGUAGE=en_US: LOGNAME=linuxize 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
Ниже приведены некоторые наиболее распространенные переменные среды:
-
USER— Текущий вошедший в систему пользователь. -
HOME— домашний каталог текущего пользователя. -
EDITOR— редактор файлов по умолчанию. Этот редактор будет использоваться при вводеeditв терминале. -
SHELL— Путь к оболочке текущего пользователя, например bash или zsh. -
LOGNAME— имя текущего пользователя. -
PATH— список каталогов, в которых будет выполняться поиск при выполнении команд. При запуске команды система будет выполнять поиск в этих каталогах в указанном порядке и использовать первый найденный исполняемый файл. -
LANG— Текущие настройки локали. -
TERM— Текущая эмуляция терминала. -
MAIL— Место хранения почты текущего пользователя.
Команды 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=()
Команда выведет на экран большой список всех переменных, поэтому вы, вероятно, захотите передать вывод команде less .
set | less
Вы также можете использовать команду echo для вывода значения переменной оболочки. Например, чтобы вывести значение переменной BASH_VERSION , выполните:
echo $BASH_VERSION
4.4.19(1)-release
Настройка переменных среды
Чтобы лучше проиллюстрировать разницу между переменными оболочки и среды, начнем с настройки переменных оболочки, а затем перейдем к переменным среды.
Чтобы создать новую переменную оболочки с именем MY_VAR и значением Linuxize просто введите:
MY_VAR='Linuxize'
Проверить, установлена ли переменная, можно с помощью echo $MY_VAR или фильтрации вывода команды set с помощью grep set | grep MY_VAR :
echo $MY_VAR
Linuxize
Используйте команду printenv , чтобы проверить, является ли эта переменная переменной среды:
printenv MY_VAR
Вывод будет пустым, что говорит нам о том, что переменная не является переменной среды.
Вы также можете попробовать вывести переменную в новой оболочке и получите пустой вывод.
bash -c 'echo $MY_VAR'
Команда export используется для установки переменных среды.
Чтобы создать переменную среды, просто экспортируйте переменную оболочки как переменную среды:
export MY_VAR
Вы можете проверить это, выполнив:
printenv MY_VAR
Linuxize
Если на этот раз вы попытаетесь напечатать переменную в новой оболочке, то имя переменной будет напечатано на вашем терминале:
bash -c 'echo $MY_VAR'
Linuxize
Вы также можете задать переменные среды в одной строке:
export MY_NEW_VAR="My New Var"
Переменные окружения, созданные таким образом, доступны только в текущем сеансе. При открытии новой оболочки или выходе из системы все переменные будут потеряны.
Постоянные переменные среды
Чтобы сделать переменные окружения постоянными, необходимо определить их в конфигурационных файлах bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные окружения считываются из следующих файлов:
-
/etc/environment— используйте этот файл для настройки общесистемных переменных окружения. Переменные в этом файле задаются в следующем формате:FOO=barVAR_TEST="Test Var" -
/etc/profile— переменные, заданные в этом файле, загружаются при каждом входе в оболочку входа bash. При объявлении переменных окружения в этом файле необходимо использовать командуexport:export JAVA_HOME="/path/to/java/home"export PATH=$PATH:$JAVA_HOME/bin -
Файлы конфигурации оболочки, специфичные для каждого пользователя. Например, если вы используете Bash, вы можете объявить переменные в файле
~/.bashrc:export PATH="$HOME/bin:$PATH"
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте команду source :
source ~/.bashrc
Заключение
В этом руководстве мы показали вам, как устанавливать и перечислять переменные среды и оболочки.
Если у вас возникнут какие-либо вопросы, не стесняйтесь оставлять комментарии.
Связанные руководства