ѕодпишитесь на наш Telegram-канал Ѕудьте в курсе последних новостей 👇 😉 ѕодписатьс€
ѕоддержим в трудное врем€ —пециальное предложение на техническую поддержку вашей »“ - инфраструктуры силами наших экспертов ѕодобрать тариф
ѕоставка оборудовани€ √аранти€ и помощь с настройкой. —кидка дл€ наших читателей по промокоду WIKIMERIONET  упить
»нтерфейс статистики Merion Mertics показывает ключевые диаграммы и графики по звонкам, а также историю звонков в формате, который легко поймет менеджер ѕопробовать бесплатно
¬недрение
офисной телефонии
Ўаг на пути к созданию доступных унифицированных коммуникаций в вашей компании ¬недрить
»нтеграци€ с CRM ѕомогаем навести пор€док с данными
и хранить их в единой экосистеме
ѕодключить
»“ Ѕезопастность ”мна€ информационна€ безопасность дл€ вашего бизнеса «аказать
ћерион Ќетворкс

7 минут чтени€

ѕеременные окружени€ (или переменные среды) - это набор пар ключ-значение, которые хран€тс€ в вашем Linux и используютс€ процессами дл€ выполнени€ определенных операций. ќни отвечают за стандартное поведение системы и приложений. ѕри взаимодействии с вашим сервером через сеанс оболочки, есть много информации, которую ваша оболочка обрабатывает, чтобы определить ее поведение и доступы. Ќекоторые из этих параметров содержатс€ в настройках конфигурации, а другие определ€ютс€ пользовательским вводом. ќболочка отслеживает все эти параметры и настройки через окружение. ќкружение - это область, которую оболочка создает каждый раз при запуске сеанса, содержащего переменные, определ€ющие системные свойства. Ќапример, это может быть часовой по€с в системе, пути к определенным файлам, приложени€ по-умолчанию, локали и многое другое. ѕеременные окружени€ также могут использоватьс€ в программах оболочки или в подоболочках дл€ выполнени€ различных операций.

ѕеременные окружени€

¬ этом руководстве мы расскажем, как просматривать, устанавливать и сбрасывать переменные окружени€ в вашей системе.


ѕеременные окружени€ и переменные оболочки

ѕеременные имеют следующий формат:

KEY=value
KEY="Some other value"
KEY=value1:value2

ƒолжны соблюдатьс€ следующие правила:

  • »мена переменных чувствительны к регистру (регистрозависимы). ѕеременные окружени€ должны быть написаны большими буквами (UPPER CASE).
  • Ќесколько значений переменных раздел€ютс€ двоеточием :
  • ¬округ символа = нет пробела

ѕеременные можно разделить на две категории:

  • ѕеременные окружени€ (Environmental Variables) - это переменные, которые определены дл€ текущей оболочки и наследуютс€ любыми дочерними оболочками или процессами. ѕеременные окружени€ используютс€ дл€ передачи информации в процессы, которые порождаютс€ из оболочки.
  • ѕеременные оболочки (Shell Variables) - это переменные, которые содержатс€ исключительно в оболочке, в которой они были установлены или определены. ќни часто используютс€ дл€ отслеживани€ эфемерных данных, например, текущего рабочего каталога.

¬ывести список всех переменных окружени€ и оболочки

ћы можем увидеть список всех наших переменных окружени€, использу€ команды env или printenv. ¬ состо€нии по умолчанию они должны работать точно так же:

SHELL=/bin/bash
TERM=xterm
USER=demouser
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demouser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv	

Ёто типичный вывод как дл€ env, так и дл€ printenv. –азница между этими двум€ командами про€вл€етс€ только в их более конкретной функциональности. Ќапример, с помощью printenv вы можете запросить значени€ отдельных переменных:

printenv SHELL

ѕолучим:

/bin/bash

ј как посмотреть переменные оболочки?

ƒл€ этого можно использовать команду set. ≈сли мы введем set без каких-либо дополнительных параметров, мы получим список всех переменных оболочки, переменных окружени€, локальных переменных и функций оболочки:

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

“ут мы получим гигантский вывод, поэтому стоит использовать less, чтобы разделить содержимое на страницы:

set | less

“акже дл€ вывода переменной оболочки можно использовать команду echo:

echo $ BASH_VERSION

ѕолучим ответ:

4.4.19 (1) -release

ќбщий набор переменных окружени€ в Linux

ѕосмотрим на общий набор переменных окружени€, которые вы можете найти в своей системе.

  • USER: текущее им€ пользовател€, использующего систему
  • EDITOR: кака€ программа запускаетс€ дл€ редактировани€ файла на вашем хосте
  • HOME: домашний каталог текущего пользовател€
  • PATH: список каталогов, разделенных двоеточи€ми, в которых система ищет команды
  • PS1: основна€ строка приглашени€ (дл€ определени€ отображени€ приглашени€ оболочки)
  • PWD: текущий рабочий каталог
  • _: сама€ последн€€ команда, выполненна€ в системе пользователем
  • MAIL: путь к почтовому €щику текущего пользовател€
  • SHELL: оболочка, используема€ дл€ интерпретации команд в системе, она может быть много разных (например, bash, sh, zsh или другие)
  • LANG: кодировка €зыка, используема€ в системе
  • DESKTOP_SESSION: текущий рабочий стол, используемый на вашем хосте (GNOME, KDE)
  • HISTFILESIZE: количество строк истории команд, сохраненных в файле истории
  • HISTSIZE: количество строк истории, разрешенных в пам€ти
  • UID: текущий UID дл€ пользовател€
  • HOSTNAME: им€ компьютера системы
  • TERM: указывает тип терминала
  • OLDPWD: предыдущий рабочий каталог
  • BASHOPTS: список параметров, которые использовались при выполнении bash.
  • BASH_VERSION: верси€ bash, выполн€ема€ в удобочитаемой форме.
  • BASH_VERSINFO: верси€ bash с машиночитаемым выводом.
  • COLUMNS:  оличество столбцов в ширину, которые используютс€ дл€ вывода вывода на экран.
  • DIRSTACK: стек каталогов, доступных с помощью команд pushd и popd.
  • IFS: внутренний разделитель полей дл€ разделени€ ввода в командной строке. ѕо умолчанию это пробел.
  • SHELLOPTS: параметры оболочки, которые можно установить с помощью параметра set.

”становка переменных окружени€ в Linux

¬ Linux у вас есть много разных способов установки переменных окружени€ в зависимости от того, хотите ли вы сделать их посто€нными или нет.

—амый простой способ установить переменные окружени€ - использовать команду export.

export VAR="value"	

ƒл€ примера создаим новую переменную, а затем экспортируем ее.

„тобы создать новую переменную оболочки с именем NEW_VARIABLE и значением "test", и затем сразу экспортировать ее введите:

export NEW_VARIABLE='test'

» провер€ем:

printenv NEW_VARIABLE

test

»спользу€ export, ваша переменна€ окружени€ будет установлена дл€ текущего сеанса оболочки.  ак следствие, если вы откроете другую оболочку или перезапустите свою систему, переменна€ окружени€ больше не будет доступна.


”становить посто€нные переменные окружени€ в Linux

 ак вы видели в предыдущем разделе, переменные окружени€ не были посто€нными при перезапуске оболочки. ќднако существует способ сделать ваши изменени€ посто€нными: с помощью системных файлов, которые читаютс€ и выполн€ютс€ в определенных услови€х.

»спользование файла .bashrc

—амый попул€рный способ посто€нной установки переменных среды - это добавить их в файл .bashrc.

‘айл .bashrc - это скрипт, выполн€емый вс€кий раз, когда вы инициализируете сеанс интерактивной оболочки.  ак следствие, когда вы запускаете новый терминал через интерфейс GNOME или просто используете screen сессию, вы будете использовать файл .bashrc.

Ќапример, добавьте следующие записи в ваш файл .bashrc:

export TZ="America/New_York"

—охраните ваш файл и используйте команду source дл€ перезагрузки файла bashrc дл€ текущего сеанса оболочки.

source ~/.bashrc	

¬ы можете вывести новую переменную окружени€ с помощью printenv и посмотреть, дату в Linux, изменив TZ.

$ printenv TZ
America/New_York

$ date
Sat 19 Jan 2020 10:03:00 AM EDT

ќтлично, ваши изменени€ теперь сохран€ютс€ после перезагрузки оболочки или системы!

»спользование файла .bash_profile

¬ качестве альтернативы, если вы планируете подключатьс€ к своим сеансам с помощью login оболочек, вы также можете добавить переменные окружени€ непосредственно в файл .bash_profile.

$ export TZ="America/New_York"

$ source ~/.bash_profile

»спользование etc/environment

≈сли вам нужно применить определенные переменные окружени€ дл€ всех, то определить общесистемные переменные окружени€. „тобы установить общесистемные переменные окружени€ в Linux, вам нужно экспортировать переменные в файл /etc/environment.

Ќапример, чтобы изменить редактор, используемый глобально, вы можете изменить переменную EDITOR в файле окружени€.

$ export EDITOR="vi"

“еперь попробуйте войти в систему как под разными пользовател€ми в вашей системе, и вы увидите, что переменна€ EDITOR установлена дл€ всех на сервере.

”становить переменные окружени€ в одной строкой

“еперь, когда вы знаете все подробности о том, как устанавливать переменные окружени€, вы можете использовать эти шорткаты дл€ их легкой установки.

ƒл€ .bashrc:

echo "export VAR="value"" >> ~/.bashrc && source ~/.bashrc

ƒл€ .bash_profile:

echo "export VAR="value"" >> ~/.bash_profile && source ~/.bash_profile

ƒл€ /etc/environment:

echo "export VAR="value"" >> /etc/environment && source /etc/environment

—бросить переменные окружени€ в Linux

“еперь, когда вы установили много переменных окружени€ в своей системе, вы можете отменить некоторые из них, если вы больше не используете их. ¬ Linux существует два способа сброса переменных окружени€: с помощью команды unset или путем удалени€ записей переменных в ваших системных файлах.

»спользование команды unset

„тобы удалить переменную окружени€, используйте команду unset со следующим синтаксисом:

unset <variable>

¬ыгл€дит это так:

unset USERNAME

printenv USERNAME
<nothing>

»спользование команды set -n

 роме того, вы можете сбросить переменные окружени€, использу€ команду set с флагом -n-n.

set -n USERNAME

printenv USERNAME
<nothing>

”становить переменную окружени€ PATH в Linux

¬ системах Linux очень часто задают переменную окружени€ PATH, чтобы система могла находить команды.

„тобы отобразить текущую переменную окружени€ PATH, выполните команду printenv:

printenv PATH

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

„тобы установить переменную окружени€ PATH, добавьте строку export в файл .bashrc и используйте с ним команду source:

echo "export PATH=":$PATH"" >> ~/.bashrc && source ~/.bashrc

printenv PATH
:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

”спех! ¬ы успешно обновили переменную окружени€ PATH в Linux.


«аключение

¬ сегодн€шнем руководстве вы узнали, что переменные окружени€ в Linux можно задавать несколькими способами: с помощью команды export, а также путем изменени€ некоторых системных файлов, чтобы сделать их посто€нными.

¬ы также узнали, что можно сбросить переменные окружени€ и как легко обновить переменную окружени€ PATH.