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или подстановку переменных).