В системах на основе Linux и Unix переменные окружения представляют собой набор динамических именованных значений, хранящихся в системе, которые используются приложениями, запускаемыми в оболочках или подоболочках. Проще говоря, переменное окружение - это переменная с именем и связанным значением.
Если не пугает англоязычный контент, то вот хорошее видео на эту тему. Ну и кроме этого, просто отличный канал.
Переменные среды позволяют настроить работу системы и поведение приложений в системе. Например, переменная среды может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или настройках языкового стандарта и раскладки клавиатуры.
Так же переменные удобно использовать в терминале или при написании скриптов. В системе есть два типа переменных: глобальные и локальные.
Можно также разделить их на: ЛОКАЛЬНЫЕ(переменные определены только для текущей сессии), ПОЛЬЗОВАТЕЛЬСКИЕ(определяются для конкретного пользователя и загружаются каждый раз когда он входит в систему) и СИСТЕМНЫЕ(доступны во всей системе, для всех пользователей)
Список всех глобальных переменных можно получить командой:
printenv
или можно вывести конкретную переменную, например HOME
printenv HOME
или это можно сделать при помощи команды echo
и с добавлением знака $
echo $HOME
Теперь попробуем создать пользовательскую локальную переменную. Для этого используются двойные или одинарные кавычки.
username="MyUserName"
И попробуем её вывести
echo $username
Как видете, всё просто.
Можно заметить что глобальные переменные написаны прописными буквами, а локальные строчными. Это не обязательно, но желательно делать так, что бы их не путать и случайно не переопределить важную системную переменную от которой зависит робота системы.
Если запустить ещё один терминал и попробовать ввести echo $username
, то мы ничего не увидим, потому что мы создали локальную переменную, которая доступна только в родительской оболочке и недоступна для дочерних.
Что бы сделать переменную доступной во всей системе, необходимо воспользоваться командой экспорта.
export username
Теперь можем запустить новый экземпляр терминала и попробовать вывести значение нашей переменной.
Так же теперь она будет в списке вывода команды printenv
.
Для того что бы после перезагрузки переменная была доступна, необходимо добавить её в ~/.bashrc
или ~/.zshrc
файл(в самый конец). В зависимости от того какая у вас оболочка используется.
...
export username="MyUserName"
Убрать/сбросить переменную можно введя команду:
unset username
Глобальные переменные очень удобны при написании скриптов. Я сам часто использую некоторые из них. Например HOME
или USER
, UID
. Это очень удобно.
HOME
- домашняя директория текущего пользователяUSER
- имя текущего пользователяUID
- числовой идентификатор текущего пользователя(Полезно для проверки в скриптах является пользователь рутом или нет)PATH
- Список каталогов для поиска при выполнении команд. Когда вы запускаете команду, система будет искать в этих каталогах в указанном порядке и использовать первый найденный исполняемый файл.
Хорошей практикой при веб разработке является хранение в глобальных переменных важных/секретных данных, например пароль от базы данных, пароль от почты, или API токен. Ведь хранить это просто в коде ещё тот идиотизм.