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

Что такое переменные окружения
Переменная окружения — это пара имя=значение, которую операционная система передаёт процессам при их запуске. Они помогают программам узнавать, где домашняя папка пользователя, какие каталоги искать в PATH, какой язык использовать и т. д. Коротко: переменные влияют на поведение программ без правки их конфигов.
Важно: дочерние процессы наследуют переменные родителя. Изменение в одной сессии по умолчанию не меняет системные файлы и не влияет на другие сессии.
Быстрый справочник терминов
- Переменная окружения — name=value, доступна процессу и его детям.
- export — команда оболочки, которая маркирует переменную как окружение для дочерних процессов.
- shell variable — переменная только для текущей оболочки, пока она не экспортирована.
Как просмотреть переменные
Есть два основных сценария: вывести все переменные или посмотреть значение одной.
Показать все текущие переменные окружения:
printenvАльтернативы: env показывает схожий список; в bash declare -x отобразит экспортированные переменные.
Узнать значение конкретной переменной:
printenv HOMEМожно передать несколько имён:
printenv HOME PWDЧастая ошибка — не ставить пробел между командой и переменной. Правильно использовать знак $ с именем переменной и пробел при передаче в команду:
ls $HOME
Как временно задать переменную
Чтобы задать переменную только для текущей сессии, достаточно присвоить значение:
EXAMPLE_VAR=helloЧтобы значение было видно дочерним процессам, экспортируйте переменную:
export EXAMPLE_VAR=helloПроверка:
echo $EXAMPLE_VARЕсли вы закроете терминал или выйдете из сессии, эти изменения исчезнут. Это удобно для тестирования.

Как сохранить переменные постоянно
Чтобы переменные сохранялись между сессиями, добавьте их в системные или пользовательские конфигурационные файлы.
Типичные файлы и когда их использовать:
- /etc/environment — простая пара name=value, действует для всех пользователей (системная переменная окружения).
- /etc/profile — скрипт, который выполняется при логине для всех оболочек логина.
- ~/.bashrc — выполняется при запуске интерактивной неприходной bash-оболочки (обычно для терминалов).
- ~/.profile или ~/.bash_profile — выполняются при логин-сессии, в зависимости от дистрибутива и оболочки.
Пример добавления в ~/.bashrc:
echo 'export EXAMPLE_VAR=hello' >> ~/.bashrcПосле правки можно выполнить:
source ~/.bashrcчтобы изменение вступило в силу без выхода из сеанса.
Важно: при изменении системных файлов используйте привилегии root и проверяйте синтаксис, чтобы не нарушить процесс логина.
Примеры и готовые сниппеты
Часто нужные паттерны:
- Добавить каталог в PATH для текущего пользователя:
export PATH="$HOME/bin:$PATH"- Установить переменную только для одной команды:
VAR=value command --option- Добавить переменную в /etc/environment (с правами root):
echo 'MY_VAR=production' | sudo tee -a /etc/environmentКогда переменные не применяются или ведут себя иначе
- Изменили ~/.bashrc, но новые ssh-сессии не видят переменную — проверьте, используется ли при логине ~/.profile или ~/.bash_profile.
- Переменная есть в оболочке, но не видна программе — убедитесь, что вы сделали export.
- PATH перестал работать после правки — возможно, вы перезаписали PATH вместо добавления в него. Всегда используйте конструкцию PATH=”$HOME/bin:$PATH”.
Отладка и тесты приёма
Критерии приёмки
- Переменная задана и видна в текущей оболочке:
echo $VARвыводит значение. - Переменная экспортирована и доступна дочерним процессам:
sh -c 'echo $VAR'или запуск программы видит значение. - После добавления в конфиг и перезагрузки новой сессии значение сохраняется.
Тесты
- Временное:
EX=1; echo $EX— должно вывести 1. - Экспорт:
export EX=2; bash -c 'echo $EX'— должно вывести 2. - Персистентность: добавить строку в ~/.bashrc, открыть новый терминал и проверить
echo $VAR.
Роли и чеклисты
Для пользователя
- Проверить значение:
printenv NAME. - Временно задать:
NAME=valueилиexport NAME=value. - Сохранить для себя: добавить в ~/.bashrc или ~/.profile.
Для администратора
- Для системных значений используйте /etc/environment или /etc/profile.
- Минимизируйте изменения PATH глобально, чтобы не нарушить сервисы.
- Документируйте изменения и используйте контроль версий для конфигов.
Безопасность и приватность
- Не храните секреты (пароли, ключи API) в простых переменных окружения, если система доступна многим пользователям.
- Для сервисов используйте менеджеры секретов или ограничьте доступ к файлам с переменными.
- Осторожно с sudo:
sudo echo $VARне передаёт переменные окружения по умолчанию; используйтеsudo -Eили настройкуenv_keepв sudoers при необходимости.
Совместимость оболочек
- Bash, Dash, Zsh и другие имеют схожую семантику переменных, но файлы и моменты загрузки отличаются. Проверьте, какой файл инициализации использует ваша оболочка.
- POSIX-совместимые конструкции (name=value, export) работают в большинстве оболочек.
Быстрый чек-лист для типичных задач
- Посмотреть всё:
printenv. - Посмотреть одну:
printenv NAME. - Временно задать:
NAME=value. - Сделать доступным дочерним процессам:
export NAME=value. - Сохранить навсегда для пользователя: добавить
export NAME=valueв ~/.bashrc. - Сохранить для всех: добавить
NAME=valueв /etc/environment илиexport NAME=valueв /etc/profile.
Краткое резюме
Переменные окружения — простой и мощный механизм настройки поведения программ и оболочки. Используйте временные переменные для тестов и конфигурационные файлы для постоянных изменений. Всегда проверяйте, экспортирована ли переменная, и где именно вы внесли изменения.
Полезное напоминание
Важно: перед глобальными изменениями сделайте резервную копию конфигурационных файлов, чтобы быстро откатить при ошибке.
1‑строчный глоссарий
- export — пометить переменную как окружение для дочерних процессов.
- PATH — список каталогов для поиска исполняемых файлов.
Mermaid диаграмма выбора файла для сохранения переменных
flowchart TD
A[Нужно ли менять для всех пользователей?] -->|Да| B[/etc/environment или /etc/profile]
A -->|Нет| C[~/.bashrc или ~/.profile]
B --> D[Тест и перезагрузка]
C --> DПохожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента