Найти в Дзене

Переменные окружения в Linux.

Привет, друзья! Сегодня поговорим о переменных окружения в Linux - это фундаментальный инструмент, который влияет на всё: от поведения командной строки до конфигурации приложений. Если вы разработчик, системный администратор или просто энтузиаст Linux, эта статья поможет разобраться в нюансах. Мы пройдёмся от базовых понятий до современных инструментов вроде direnv. Переменные окружения (environment variables) - это пары "ключ-значение", которые определяют среду выполнения программ в Linux. Они передают конфигурационные данные между процессами, влияя на всё: от путей поиска файлов до настроек приложений. Например, переменная $PATH указывает, где система ищет исполняемые файлы, а $HOME - путь к домашнему каталогу пользователя. Без понимания переменных окружения сложно эффективно работать в терминале. Они используются в скриптах, Docker-контейнерах, CI/CD-пайплайнах и даже в повседневных задачах. Представьте: вы запускаете приложение, и оно "знает" вашу базу данных благодаря переменной D
Оглавление

Привет, друзья! Сегодня поговорим о переменных окружения в Linux - это фундаментальный инструмент, который влияет на всё: от поведения командной строки до конфигурации приложений. Если вы разработчик, системный администратор или просто энтузиаст Linux, эта статья поможет разобраться в нюансах. Мы пройдёмся от базовых понятий до современных инструментов вроде direnv.

Что такое переменные окружения и почему они важны?

Переменные окружения (environment variables) - это пары "ключ-значение", которые определяют среду выполнения программ в Linux. Они передают конфигурационные данные между процессами, влияя на всё: от путей поиска файлов до настроек приложений. Например, переменная $PATH указывает, где система ищет исполняемые файлы, а $HOME - путь к домашнему каталогу пользователя.

Без понимания переменных окружения сложно эффективно работать в терминале. Они используются в скриптах, Docker-контейнерах, CI/CD-пайплайнах и даже в повседневных задачах. Представьте: вы запускаете приложение, и оно "знает" вашу базу данных благодаря переменной DATABASE_URL. Это магия окружения!

Но есть нюанс: не путайте переменные окружения с переменными оболочки (shell variables). Давайте разберёмся в различиях.

Разница между переменными оболочки и окружения

В Linux оболочка (shell), такая как Bash, управляет двумя типами переменных:

  • Переменные оболочки: Локальные для текущей сессии. Они не передаются дочерним процессам. Создаются просто: MY_VAR="hello". Если вы запустите скрипт, он не увидит эту переменную.
  • Переменные окружения: Глобальные, наследуемые дочерними процессами. Чтобы превратить переменную оболочки в окружения, используйте export: export MY_ENV_VAR="world". Теперь любой запущенный процесс сможет её прочитать.

Правила именования просты: имена чувствительны к регистру, традиционно в UPPER_CASE (например, PATH). Присвоение - без пробелов: KEY=value. Для извлечения - $KEY. Если значение содержит пробелы, используйте кавычки: KEY="value with space".

Управление переменными в текущей сессии

В терминале вы управляете переменными с помощью встроенных команд. Давайте разберём ключевые.

Просмотр переменных

  • printenv: Выводит только переменные окружения. Пример: printenv HOME покажет /home/user.
  • env: Аналогично, но может запускать команды с изменённым окружением.
  • set: Показывает все переменные оболочки, окружения и функции. Полезно для полного обзора.

Создание, изменение и удаление

  • Создать: export VAR="value".
  • Изменить: Просто переприсвойте.
  • Удалить: unset VAR.
-2
Пример вывода printenv в терминале Bash
Пример вывода printenv в терминале Bash

Как сделать переменные постоянными?

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

Login vs Non-login оболочки

  • Login-оболочка: Запускается при входе (SSH, консоль). Читает /etc/profile, ~/.bash_profile или ~/.profile.
  • Non-login-оболочка: Новый терминал. Читает ~/.bashrc.

Ключевые файлы

  • /etc/environment: Системные переменные для всех пользователей (без скриптов).
  • /etc/profile: Глобальные для login-оболочек.
  • ~/.profile: Пользовательские для всех сессий.
  • ~/.bashrc: Для интерактивных non-login.

Рекомендация: В ~/.profile добавьте if [ -f ~/.bashrc ]; then . ~/.bashrc; fi для единства.

Порядок чтения конфигурационных файлов в Bash
Порядок чтения конфигурационных файлов в Bash

Современные практики: direnv для проектного управления

Глобальные переменные - это хаос для нескольких проектов. Введите direnv: инструмент, который загружает переменные автоматически при входе в директорию.

Как работает direnv?

  • Установите direnv и добавьте хук в ~/.bashrc.
  • В проекте создайте .envrc: export DATABASE_URL="postgresql://..."
  • Авторизуйте: direnv allow.
  • При входе в папку - переменные загружены, при выходе - выгружены.

Direnv имеет stdlib: path_add PATH ./bin для добавления путей, layout node для фреймворков.

Рабочий процесс с direnv: динамическое окружение для проектов
Рабочий процесс с direnv: динамическое окружение для проектов

Практические сценарии

Настройка $PATH

export PATH="$PATH:/home/user/bin" - добавьте директорию без перезаписи.

Установка EDITOR

export EDITOR="vim" - для программ вроде git.

Shebang в скриптах

Используйте #!/usr/bin/env bash для переносимости.

Переносимый shebang с использованием env
Переносимый shebang с использованием env

Заключение и рекомендации

Переменные окружения - основа Linux-конфигурации. Освойте export, файлы вроде .bashrc и инструменты вроде direnv - и ваша продуктивность взлетит. Для разработчиков: интегрируйте в CI/CD. Экспериментируйте в терминале.

Если вам понравился материал, не забудьте поставить палец вверх 👍 и поделиться статьёй с друзьями. Подписывайтесь на мой Telegram-канал, чтобы первыми узнавать о новых статьях и полезных материалах. А также загляните на сайт RoadIT.ru, где я собираю заметки о командах Linux, HowTo-гайды и много другой интересной информации. Спасибо за внимание!