UNIXAWESOME

Переменные окружения в linux

Sept. 18, 2021

В системах на основе Linux и Unix переменные окружения представляют собой набор динамических именованных значений, хранящихся в системе, которые используются приложениями, запускаемыми в оболочках или подоболочках. Проще говоря, переменное окружение - это переменная с именем и связанным значением.

Если не пугает англоязычный контент, то вот хорошее видео на эту тему. Ну и кроме этого, просто отличный канал.

How To Use Shell Environment Variables

Переменные среды позволяют настроить работу системы и поведение приложений в системе. Например, переменная среды может хранить информацию о текстовом редакторе или браузере по умолчанию, пути к исполняемым файлам или настройках языкового стандарта и раскладки клавиатуры.

Так же переменные удобно использовать в терминале или при написании скриптов. В системе есть два типа переменных: глобальные и локальные.

Можно также разделить их на: ЛОКАЛЬНЫЕ(переменные определены только для текущей сессии), ПОЛЬЗОВАТЕЛЬСКИЕ(определяются для конкретного пользователя и загружаются каждый раз когда он входит в систему) и СИСТЕМНЫЕ(доступны во всей системе, для всех пользователей)

Список всех глобальных переменных можно получить командой:

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 токен. Ведь хранить это просто в коде ещё тот идиотизм.