Gymterview
junior

Как работают переменные окружения в Linux?

Переменные окружения (environment variables) — именованные значения, доступные процессам. Используются для передачи конфигурации приложениям без изменения кода.

Основные переменные

Переменная Описание
PATH Список каталогов для поиска исполняемых файлов (через :)
HOME Домашний каталог текущего пользователя
USER Имя текущего пользователя
SHELL Путь к текущей оболочке
LANG Текущая локаль
JAVA_HOME Путь к JDK

Просмотр и установка

Пример
# Просмотр
echo $JAVA_HOME
printenv JAVA_HOME
env              # Все переменные окружения

# Установка для текущей сессии
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

# Только для одной команды
SPRING_PROFILES_ACTIVE=dev java -jar app.jar

Файлы конфигурации (порядок загрузки)

Файл Область действия Когда загружается
/etc/environment Все пользователи При входе в систему. Формат: KEY=VALUE (не bash-скрипт)
/etc/profile Все пользователи При login-shell
/etc/profile.d/*.sh Все пользователи Подгружаются из /etc/profile
~/.profile Текущий пользователь При login-shell
~/.bashrc Текущий пользователь При каждом запуске интерактивного bash
~/.bash_profile Текущий пользователь При login-shell (если есть, ~/.profile не загружается)

Примеры

Пример
# Для всех пользователей (/etc/environment — не bash-скрипт!)
JAVA_HOME="/usr/lib/jvm/java-21-openjdk-amd64"

# Для текущего пользователя (~/.bashrc)
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

# Применить изменения без перелогина
source ~/.bashrc

Для Java-разработчика

Переменные окружения — стандартный способ конфигурации в 12-factor приложениях и Spring Boot (SPRING_DATASOURCE_URL, SERVER_PORT). При запуске через systemd переменные задаются через Environment= или EnvironmentFile=.

На собеседовании: интервьюер хочет убедиться, что вы понимаете механизм конфигурации приложений через окружение. Частая ошибка — путать ~/.bashrc и ~/.profile или не знать, что /etc/environment — это не bash-скрипт (нельзя использовать export или подстановку переменных).