Переменные окружения – это один из тех инструментов, которые незаметно присутствуют почти в каждом современном приложении, но напрямую влияют на его стабильность, безопасность и удобство сопровождения. Но что это? И как с ними работать? Разбираемся в этом руководстве.
Что такое переменные окружения
Переменные окружения – это именованные параметры, которые операционная система передает запущенным приложениям. Они хранятся вне кода и используются для передачи настроек, от которых зависит поведение программы: адреса сервисов, пути к файлам, режим работы, учетные данные и другие конфигурационные значения.
Главная особенность переменных окружения заключается в том, что они отделяют логику приложения от конкретной среды, в которой оно запущено. Один и тот же код может работать на локальном компьютере разработчика, на тестовом сервере и в продакшене – меняются только значения переменных, а не сам исходный код.
Переменные окружения задаются на уровне ОС или среды выполнения и становятся доступны приложению с момента его запуска, оставаясь неизменными на всем протяжении жизненного цикла процесса. Программа может считывать их как при инициализации, так и в ходе работы, чтобы адаптироваться к текущему окружению – например, выбрать нужную базу данных или включить режим отладки.
Чаще всего через переменные окружения передают:
- параметры подключения к базе данных и внешним сервисам;
- ключи API и токены доступа;
- флаги включения и отключения функций;
- настройки логирования и уровня отладки;
- параметры, зависящие от окружения – dev, staging, production.
Переменные окружения повышают безопасность, упрощают сопровождение проекта и снижают риск ошибок при развертывании приложения.
Типы переменных в командной оболочке
В Linux и macOS (и в целом в Unix-подобных системах) переменные обычно задаются в формате:
Чтобы переменные корректно читались оболочкой и приложениями, стоит придерживаться базовых правил:
- имена переменных регистрозависимы – path и PATH будут разными значениями;
- для переменных окружения чаще используют UPPER CASE, чтобы визуально отличать их от локальных переменных и не путать с внутренними параметрами скрипта;
- несколько значений в одной переменной разделяют двоеточием : (классический пример – PATH);
- пробелы вокруг = недопустимы: KEY=value, а не KEY = value;
- если значение содержит пробелы или спецсимволы, его берут в кавычки.
По области действия и назначению переменные можно разделить на две основные категории:
Переменные окружения (environment variables) – это переменные, которые определены в текущей оболочке и наследуются дочерними процессами. То есть, если из терминала запускается приложение, оно получает доступ к этим значениям. Они нужны, чтобы передавать процессам настройки и параметры, не прописывая их в коде: режим работы, адреса сервисов, пути, токены, локали и другие данные, которые должны быть доступны за пределами одной сессии оболочки.
Переменные оболочки (shell variables) – это переменные, которые существуют только внутри текущей сессии оболочки и обычно не передаются дальше, если их специально не экспортировать. Они удобны для временных значений и служебных данных: переменные в скриптах, промежуточные результаты, текущие параметры выполнения команд.
Просмотр переменных
Чтобы вывести все переменные окружения, используются стандартные команды:
или

Обе команды отображают список переменных, которые доступны текущему процессу и будут унаследованы дочерними процессами.
Если требуется посмотреть значение конкретной переменной, достаточно указать ее имя:
![]()
или воспользоваться выводом через оболочку:
Если нужно увидеть не только окружение, но и локальные переменные текущей оболочки:
Она выводит полный список переменных и функций, определенных в текущей сессии оболочки, что удобно при отладке скриптов.

В интерактивных оболочках также можно использовать автодополнение: начав ввод имени переменной с символа $и нажав Tab, оболочка подскажет доступные варианты.
Регулярный просмотр переменных помогает быстро находить ошибки в конфигурации, проверять корректность значений и понимать, какие параметры реально доступны приложению в текущей среде выполнения.
Постоянные переменные
Постоянные переменные – это переменные окружения, которые сохраняются между сессиями: вы закрыли терминал, перезагрузили систему, а значения остались. В отличие от временных переменных, заданных только на время текущего сеанса, постоянные прописываются в файлах конфигурации или настройках системы.
В Linux существует несколько уровней задания постоянных переменных: пользовательский, системный и сервисный.
Пользовательские постоянные переменные
Пользовательские переменные применяются только для конкретного пользователя и не затрагивают остальных. Они задаются в файлах инициализации оболочки, расположенных в домашнем каталоге.
Основные файлы:
- ~/.bashrc – выполняется при каждом запуске интерактивной Bash-сессии;
- ~/.bash_profile – выполняется при логине пользователя;
- ~/.profile – универсальный файл, используется разными оболочками.
Чаще всего переменные добавляют именно в ~/.bashrc, если они нужны в интерактивной работе, или в ~/.profile, если должны быть доступны сразу после входа в систему.
Пример:
Файл ~/.bashrc удобен для переменных, которые нужны в интерактивной работе, а ~/.profile – для глобальных пользовательских настроек. После изменения файла можно применить настройки:
Системные постоянные переменные
Системные переменные доступны всем пользователям и используются для глобальных настроек. Их следует задавать аккуратно, так как ошибки могут повлиять на работу всей системы.
Основные варианты:
- /etc/environment. Простой файл формата KEY=value. Не поддерживает export, подстановки и сложную логику. Используется для базовых глобальных переменных.
- /etc/profile. Скрипт, выполняемый при входе пользователя в систему.
Поддерживает shell-синтаксис, но редактировать его напрямую не рекомендуется.
- /etc/profile.d/*.sh. Наиболее безопасный и удобный способ.
Для каждой группы переменных создается отдельный файл.
Пример файла /etc/profile.d/myapp.sh:
Изменения вступают в силу после повторного входа пользователей или перезагрузки системы.
Постоянные переменные для сервисов и systemd
Сервисы, которые запущены через systemd, не наследуют пользовательское окружение. Для них переменные нужно задавать отдельно.
Наиболее распространенные способы:
- директива Environment= в unit-файле;
- подключение файла с переменными через EnvironmentFile=;
- drop-in конфигурации в каталоге
/etc/systemd/system/<service>.service.d/.
Пример drop-in файла:
После изменений обязательно примените конфигурацию:
Ключевые переменные
В Linux существует набор переменных окружения, которые используются самой системой, оболочкой и большинством приложений. Они либо задаются автоматически, либо настраиваются администратором, и от их значений напрямую зависит поведение программ и пользовательской среды.
Основные системные и пользовательские переменные
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные локализации и языка
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные выполнения и загрузки программ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные для временных файлов и XDG-каталогов
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные графической среды
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные, используемые приложениями
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Переменные безопасности и администрирования
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Удаление и сброс переменных
В процессе работы с системой и приложениями нередко возникает необходимость удалить переменную окружения или сбросить ее значение. Это может потребоваться для отладки, временного изменения конфигурации или устранения конфликтов между настройками.
Удаление переменной в текущей оболочке
Чтобы удалить переменную (окружения или оболочки) в текущей сессии, используется команда:
После этого переменная исчезнет из текущей сессии. Если открыть новый терминал, она может появиться снова – если задана в ~/.bashrc, ~/.profile, /etc/environment и т. п.
Проверить результат можно так:
Если ничего не вывелось – переменная не задана как переменная окружения.
Удаление постоянных переменных
Если переменная задана в файлах автозагрузки, она будет появляться снова при новом входе или запуске оболочки. Тогда нужно убрать ее из соответствующего файла.
Где обычно искать:
- ~/.bashrc, ~/.profile, ~/.bash_profile – пользовательские настройки;
- /etc/environment, /etc/profile, /etc/profile.d/*.sh – системные настройки.
Что делать:
- Открыть файл и удалить строку вида:
- Применить изменения:
или просто перезайти в систему.
Сброс значения переменной
Если переменную нужно не удалить, а заменить ее значение, достаточно присвоить новое:
или, для переменной окружения:
Временный сброс для одной команды
Иногда переменную нужно изменить или обнулить только для одного запуска программы:
или полностью убрать ее из окружения команды:
В этом случае глобальное окружение не изменяется.
Сброс переменных для systemd-сервисов
Для сервисов под управлением systemd переменные сбрасываются удалением директивы Environment= или строки в EnvironmentFile.
После правок обязательно выполните:
Без этого изменения не вступят в силу.
Практические рекомендации
- Четко разделяйте области ответственности
Не смешивайте в одном месте разные типы переменных:
- пользовательские – в ~/.profile или ~/.bashrc;
- системные – в /etc/environment или /etc/profile.d/;
- сервисные – в конфигурациях systemd.
Так проще понять, откуда берется значение и почему оно применяется.
- Используйте осмысленные и уникальные имена
Для собственных приложений рекомендуется использовать понятные и уникальные имена переменных окружения, чтобы избежать конфликтов с системными или сторонними переменными.
Лучше применять префиксы, отражающие название приложения или проекта, например:
Избегайте общих имен вроде ENV, CONFIG, DEBUG.
- Не храните секреты в открытых файлах
Секреты, такие как API-ключи, токены и пароли, ни в коем случае нельзя хранить в открытом виде в файлах. Правильнее всего:
- не коммитить никакие секреты в репозиторий;
- хранить конфиденциальные данные в отдельных файлах с ограниченными правами доступа, например, установив chmod 600, чтобы только владелец мог читать и писать;
- использовать EnvironmentFile в сервисах systemd или аналогичные механизмы в контейнерах (например, Docker – env_file), чтобы загружать переменные окружения безопасно и автоматически.
В продакшн-средах это особенно критично: утечка одного токена может привести к компрометации всей инфраструктуры.
- Не переопределяйте системные переменные без необходимости
Особенно чувствительны к изменениям переменные вроде PATH, LD_LIBRARY_PATH и LANG, поскольку они используются множеством программ для поиска исполняемых файлов, библиотек и настройки локализации.
Если нужно изменить PATH, дополняйте его, а не заменяйте:
- Используйте .env-файлы осознанно
Файлы .env удобны на этапе разработки – они позволяют хранить конфигурацию проекта в одном месте и быстро настраивать переменные окружения. Однако важно понимать, что это не системный стандарт, а соглашение, которое работает только если приложение или фреймворк явно загружает такой файл (например, через библиотеки вроде dotenv для Node.js, Python и других языков).
Используйте их как вспомогательный инструмент, а не универсальное решение.
- Минимизируйте количество переменных
Каждая переменная окружения добавляет сложность в настройку и сопровождение приложения – она становится точкой отказа, если будет утеряна, опечатана или неправильно задана. Поэтому важно минимизировать их количество и оставлять только те, что действительно нужны.
-
Документируйте используемые переменные
В каждом проекте должен быть понятный и актуальный список всех используемых переменных, включая:
- имя переменной;
- назначение;
- пример значения;
- обязательность.
Такую документацию удобно размещать в файле README.md, отдельном ENVIRONMENT.md или в шаблоне .env.example.
Заключение
Управление переменными окружения в Linux – это базовый, но крайне важный навык, напрямую влияющий на стабильность, безопасность и предсказуемость как отдельных приложений, так и всей системы.
От того, как настроены переменные, зависит, найдет ли система нужные команды, подключится ли приложение к базе данных, и будет ли интерфейс отображаться на нужном языке.