Переменная окружения¶
Переменная окружения (также переменная среды, англ. 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 →


