рекомендации

суббота, 4 апреля 2020 г.

Настройка и просмотр переменных окружения в Linux

В системах на основе 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
Вывод будет пустым, что говорит о том, что переменная не является переменной окружения.

Вы также можете попробовать вывести переменную в подоболочке, и вы получите пустой вывод.
$ export 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=bar$ VAR_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
Перевод. Оригинал: How to Set and List Environment Variables in Linux

Комментариев нет:

Отправить комментарий