Введение
В системах на основе Linux и Unix переменные среды представляют собой набор динамических номинальных значений, хранящихся в системе и используемых приложениями, запускаемыми в оболочках или подоболочках. Проще говоря, переменная среды — это переменная со связанным именем и значением.
Переменные среды позволяют настраивать поведение системы и поведение приложений в системе. Например, в переменной среды может храниться информация о текстовом редакторе или браузере по умолчанию, расположении исполняемых файлов или языковых настройках системы и раскладке клавиатуры.
В этом руководстве мы объясним, как читать и устанавливать переменные среды и оболочки.
Переменные среды и переменные оболочки
Переменные имеют следующий формат:
KEY=valore
KEY="Questo è un valore"
KEY=valore1:valore2
- Имена переменных чувствительны к регистру. По соглашению переменные окружения должны иметь имена в ВЕРХНЕМ РЕГИСТРЕ.
- При присвоении переменной нескольких значений они должны быть разделены двоеточием
:
- Вокруг символа равенства
=
нет пробела.
Переменные можно разделить на две основные категории: переменные среды и переменные оболочки.
Переменные среды — это переменные, доступные на системном уровне, и они наследуются всеми сгенерированными дочерними процессами и оболочками.
Переменные оболочки — это переменные, которые применяются только к текущему экземпляру оболочки. Каждая оболочка, такая как zsh
и bash
, имеет собственный набор внутренних переменных оболочки.
Есть несколько команд, которые позволяют вам просматривать и устанавливать переменные среды в Linux:
env
— команда позволяет запускать другую программу в пользовательской среде без изменения текущей. Если используется без аргумента, он напечатает список текущих переменных среды.printenv
— команда печатает все или указанные переменные среды.set
— команда устанавливает или очищает переменные оболочки. При использовании без аргумента он напечатает список всех переменных, включая переменные среды и оболочки, а также функции оболочки.unset
— команда удаляет переменные оболочки и среды.export
— команда устанавливает переменные среды.
Список переменных среды
Наиболее часто используемая команда для просмотра переменных среды — printenv
. Если имя переменной передается команде в качестве аргумента, отображается только значение этой переменной. Если аргументы не указаны, printenv
печатает список всех переменных среды, по одной переменной в строке.
Например, чтобы увидеть значение переменной среды HOME
, вам нужно будет запустить:
printenv HOME
На выходе будет напечатан путь текущего пользователя, вошедшего в систему:
/home/noviello
Вы также можете передать более одного аргумента команде printenv
:
printenv LANG PWD
C.UTF-8
/home/noviello
Если вы запустите команду printenv
или env
без аргументов, отобразится список всех переменных среды:
printenv
Вывод будет выглядеть следующим образом:
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;.....
HOSTTYPE=x86_64
LESSCLOSE=/usr/bin/lesspipe %s %s
LANG=C.UTF-8
WSL_DISTRO_NAME=Ubuntu-18.04
USER=noviello
PWD=/home/noviello
HOME=/home/noviello
NAME=DESKTOP-8IISBA0
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
SHELL=/bin/bash
TERM=xterm-256color
SHLVL=1
LOGNAME=noviello
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:........
Вот некоторые из наиболее распространенных переменных среды:
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.20(1)-release
Установка переменных окружения
Чтобы лучше проиллюстрировать разницу между переменными оболочки и среды, мы начнем с установки переменных оболочки, а затем перейдем к переменным среды.
Чтобы создать новую переменную оболочки с именем MY_VAR
и значением Noviello
, просто введите:
MY_VAR='Noviello'
Проверить, что переменная установлена, можно с помощью команды echo $MY_VAR
:
echo $MY_VAR
Noviello
Используйте команду printenv
, чтобы проверить, является ли эта переменная переменной среды или нет:
printenv MY_VAR
Вывод будет пустым, что говорит нам о том, что переменная не является переменной окружения.
Вы также можете попробовать напечатать переменную в подоболочке, и вы получите пустой вывод.
bash -c 'echo $MY_VAR'
Команда export
используется для установки переменных среды.
Чтобы создать переменную среды, просто экспортируйте переменную оболочки как переменную среды:
export MY_VAR
Вы можете проверить это, запустив:
printenv MY_VAR
Noviello
Если вы попытаетесь напечатать переменную в подоболочке на этот раз, вы получите имя переменной, напечатанное на вашем терминале:
bash -c 'echo $MY_VAR'
Noviello
Вы также можете установить переменные среды в одной строке:
export MY_NEW_VAR="My New Var"
Переменные среды, созданные таким образом, доступны только в текущем сеансе. Если вы откроете новую оболочку или выйдете из нее, все переменные будут потеряны.
Постоянные переменные среды
Чтобы сделать переменные среды постоянными, вам необходимо определить эти переменные в файлах конфигурации bash. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:
/etc/environment
— используйте этот файл для установки общесистемных переменных среды. Переменные в этом файле задаются в следующем формате:
FOO=valore
VAR_TEST="Valore uno"
/etc/profile
— переменные, установленные в этом файле, загружаются при каждом входе в оболочку входа в систему bash. При объявлении переменных окружения в этом файле нужно использовать команду export
:
export JAVA_HOME="/path/to/java/home"
export PATH=$PATH:$JAVA_HOME/bin
Например, если вы используете Bash, вы можете объявить переменные в файле ~/.bashrc
.
Откройте файл:
nano ~/.bashrc
Вставьте следующую строку кода в конец файла:
export TEST_VAR="variabile di prova"
Сохраните и закройте файл, нажав CTRL + X, затем Y, чтобы сохранить изменения, а затем ENTER, если вы используете nano.
Чтобы загрузить новые переменные среды в текущий сеанс оболочки, используйте source
команду:
source ~/.bashrc
Созданные таким образом переменные среды также доступны в последующих сеансах. Если вы откроете новую оболочку или выйдете, все переменные будут сохранены.
Вывод
В этом руководстве мы показали вам, как устанавливать и перечислять переменные среды и оболочки.