Открыть сервис

Переменная окружения

Переменная окружения (также переменная среды, англ. environment variable) — это динамическое именованное значение, хранящееся в операционной системе или программной среде, которое может влиять на поведение запускаемых процессов. Переменные окружения представляют собой пары «ключ=значение» и используются для передачи конфигурационной информации, такой как пути к файлам, параметры локали, учётные данные или настройки программного обеспечения, без необходимости жёстко прописывать эти данные в коде приложений.

История

Концепция переменных окружения возникла в ранних многозадачных операционных системах, таких как Unix (1970-е годы). В Unix-подобных системах переменные окружения стали стандартным механизмом для настройки пользовательской среды, например, переменная PATH определяла, где искать исполняемые файлы. В MS-DOS (1980-е годы) также появились переменные окружения, но их функциональность была ограничена. С развитием Windows (начиная с Windows NT) и других операционных систем механизм переменных окружения был расширен и стандартизирован. В современных системах, включая Linux, macOS и Windows, переменные окружения поддерживаются на уровне ядра и оболочки.

Типы и классификация

Переменные окружения можно классифицировать по нескольким признакам.

По области действия

  • Системные (глобальные) — устанавливаются для всей операционной системы и доступны всем пользователям и процессам. Изменение таких переменных требует прав администратора.
  • Пользовательские — задаются для конкретного пользователя и действуют только в его сеансе. Переменные пользователя переопределяют системные при совпадении имён.
  • Сеансовые (локальные) — существуют только в рамках текущего сеанса оболочки или процесса и не наследуются дочерними процессами (в некоторых реализациях) или наследуются, но не сохраняются после завершения сеанса.

По способу установки

  • Статические — задаются в конфигурационных файлах (например, /etc/environment в Linux, ~/.bashrc или ~/.profile для пользователя) или через системные настройки (Windows: «Переменные среды»).
  • Динамические — создаются или изменяются во время выполнения процесса, например, через команду export в Unix-оболочках или через API операционной системы.
  • Автоматические — устанавливаются системой или приложениями автоматически, например, HOME (домашний каталог пользователя), USER (имя пользователя), SHELL (путь к командной оболочке).

Основные характеристики

Переменные окружения обладают следующими свойствами:

  • Имя — строка, обычно состоящая из букв, цифр и символа подчёркивания, в верхнем регистре (по соглашению, но не обязательно). В Unix имена чувствительны к регистру, в Windows — нет.
  • Значение — строка, которая может содержать любые символы, включая пробелы и специальные знаки. Значение может быть пустым.
  • Наследование — дочерние процессы (запущенные из родительского) наследуют копию окружения родителя. Изменения в дочернем процессе не влияют на родительский.
  • Ограничение по длине — в большинстве систем максимальная длина имени и значения ограничена (например, в Windows — 32767 символов для значения, в Linux — 2 МБ для всего окружения процесса).

Применение

Переменные окружения широко используются в различных областях.

В операционных системах

  • Настройка путей поиска: PATH (список каталогов для поиска исполняемых файлов), LD_LIBRARY_PATH (пути к динамическим библиотекам в Linux).
  • Локализация: LANG, LC_ALL — определяют язык, кодировку и региональные настройки.
  • Управление сеансом: HOME, USER, TMPDIR (временный каталог).

В разработке программного обеспечения

  • Конфигурация приложений: переменные используются для хранения параметров подключения к базам данных (например, DATABASE_URL), ключей API, режимов отладки (DEBUG=true).
  • Контейнеризация: в Docker и Kubernetes переменные окружения — основной способ передачи конфигурации в контейнеры (например, MYSQL_ROOT_PASSWORD).
  • Сборка и тестирование: CI/CD-системы (например, Jenkins, GitHub Actions) используют переменные для хранения секретов и параметров сборки.

В веб-разработке

  • Фреймворки (Django, Ruby on Rails, Node.js) читают настройки из переменных окружения, что позволяет разделять конфигурации для разработки, тестирования и продакшена.
  • Переменная PORT указывает, на каком порту запускать веб-сервер.

В системном администрировании

  • Автоматизация скриптов: переменные позволяют адаптировать поведение скриптов под разные среды без изменения кода.
  • Безопасность: хранение паролей и токенов в переменных окружения (а не в коде) снижает риск утечки через репозитории.

Примеры распространённых переменных

ПеременнаяОписаниеТипичное значение
PATHСписок каталогов для поиска исполняемых файлов/usr/bin:/bin:/usr/local/bin
HOMEПуть к домашнему каталогу пользователя/home/user
USERИмя текущего пользователяivan
SHELLПуть к командной оболочке/bin/bash
LANGЯзык и кодировка по умолчаниюru_RU.UTF-8
TEMPКаталог для временных файлов (Windows)C:\Users\user\AppData\Local\Temp
PWDТекущий рабочий каталог (Unix)/home/user/projects

Управление переменными окружения

В Unix-подобных системах

  • Просмотр: команда env или printenv выводит все переменные; echo $ИМЯ — значение конкретной.
  • Установка: export ИМЯ=значение (временная, для сеанса); setenv ИМЯ значение (в C-shell).
  • Удаление: unset ИМЯ.
  • Постоянная установка: добавление строки export ИМЯ=значение в файл ~/.bashrc, ~/.profile или /etc/environment.

В Windows

  • Просмотр: команда set (в командной строке) или Get-ChildItem Env:PowerShell); графический интерфейс: «Система» → «Дополнительные параметры системы» → «Переменные среды».
  • Установка: set ИМЯ=значение (временная, для сеанса); setx ИМЯ значение (постоянная, для пользователя или системы).
  • Удаление: set ИМЯ= (очистка значения) или через графический интерфейс.

В языках программирования

  • Python: os.environ['ИМЯ'] (чтение), os.environ['ИМЯ'] = 'значение' (запись).
  • JavaScript (Node.js): process.env.ИМЯ.
  • Java: System.getenv("ИМЯ").

Безопасность и ограничения

Переменные окружения не являются надёжным способом хранения секретов, так как они могут быть прочитаны другими процессами (например, через /proc/pid/environ в Linux) или случайно раскрыты в логах и отчётах об ошибках. Для критически важных данных (пароли, ключи шифрования) рекомендуется использовать специализированные хранилища секретов (например, HashiCorp Vault, AWS Secrets Manager) или зашифрованные файлы конфигурации. В контейнерных средах переменные окружения часто передаются через оркестраторы, но их значения могут быть видны в метаданных контейнера.

Интересные факты

  • В Unix-подобных системах переменная PATH может содержать относительные пути (например, .), что создаёт риск выполнения вредоносного кода из текущего каталога. В современных системах по умолчанию точка в PATH не включается.
  • Переменная IFS (Internal Field Separator) в Unix-оболочках управляет разделением строк на слова, что может привести к неожиданному поведению скриптов.
  • В Windows переменная %APPDATA% указывает на каталог для данных приложений пользователя, а %PROGRAMFILES% — на каталог установки программ.

Источники

  • Описание переменных окружения в документации GNU/Linux (man pages: environ, bash, env).
  • Документация Microsoft Windows: «Переменные среды» (System Properties → Environment Variables).
  • Стандарт POSIX.1-2017, раздел «Environment Variables».
  • Книга «Unix Programming Environment» (Brian Kernighan, Rob Pike, 1984).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →