Home » Команда export в Linux — как задавать переменные окружения
Команда export в Linux — как задавать переменные окружения

Команда export в Linux — как задавать переменные окружения

Переменные окружения в Linux — это основа основ для любого админа. Неважно, работаете ли вы с простеньким VPS или настраиваете мощный выделенный сервер, команда export станет вашим верным спутником в борьбе с конфигурацией. Сегодня разберём, как правильно задавать переменные окружения, избежать типичных граблей и сделать вашу жизнь проще.

Как работает команда export?

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

Основные принципы работы:

  • Локальные переменные — видны только в текущей оболочке
  • Экспортированные переменные — наследуются дочерними процессами
  • Область видимости — переменные действуют только “вниз” по иерархии процессов

Классический пример:


# Локальная переменная
MY_VAR="hello"

# Экспортированная переменная
export MY_EXPORTED_VAR="hello world"

# Проверяем различия
bash -c 'echo $MY_VAR' # Пусто
bash -c 'echo $MY_EXPORTED_VAR' # hello world

Пошаговая настройка переменных окружения

Разберём несколько способов задания переменных — от простых до продвинутых:

Способ 1: Базовый синтаксис


# Создание и экспорт в одну строку
export PATH="/usr/local/bin:$PATH"
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk"

# Создание переменной, затем экспорт
DATABASE_URL="postgresql://user:pass@localhost/db"
export DATABASE_URL

Способ 2: Временные переменные для команды


# Переменная действует только для одной команды
ENV=production node app.js

# Несколько переменных
DEBUG=1 NODE_ENV=development npm start

Способ 3: Постоянные переменные


# В ~/.bashrc или ~/.profile
echo 'export API_KEY="your-secret-key"' >> ~/.bashrc
source ~/.bashrc

# Системные переменные в /etc/environment
echo 'LANG=en_US.UTF-8' | sudo tee -a /etc/environment

Практические примеры и кейсы

Сценарий Команда Результат
Настройка PATH для custom бинарников export PATH="/opt/myapp/bin:$PATH" Команды из /opt/myapp/bin доступны глобально
Конфигурация базы данных export DB_HOST="db.example.com" Приложения могут подключаться к БД
Настройка локали export LANG="ru_RU.UTF-8" Система использует русскую локаль

Положительные практики

  • Используйте понятные имена: export API_URL вместо export URL
  • Группируйте по логике: все переменные для одного приложения в одном месте
  • Документируйте: добавляйте комментарии к нестандартным переменным


# Настройки для веб-приложения
export APP_ENV="production"
export APP_DEBUG="false"
export APP_URL="https://example.com"

# Настройки базы данных
export DB_CONNECTION="mysql"
export DB_HOST="127.0.0.1"
export DB_PORT="3306"

Отрицательные практики (чего НЕ делать)

  • Не храните секреты в ~/.bashrc — они видны в процессах
  • Не переопределяйте системные переменные без крайней необходимости
  • Не используйте пробелы в значениях без кавычек


# ПЛОХО
export PATH="/usr/bin" # Затирает существующий PATH
export SECRET=my secret key # Сломается на пробелах

# ХОРОШО
export PATH="/usr/local/bin:$PATH"
export SECRET="my secret key"

Полезные команды для работы с переменными


# Просмотр всех экспортированных переменных
export

# Просмотр конкретной переменной
echo $PATH
printenv PATH

# Удаление переменной
unset MY_VAR

# Проверка, экспортирована ли переменная
declare -p MY_VAR

# Временное изменение переменной
(export PATH="/tmp:$PATH"; which mycommand)

Автоматизация и скрипты

Переменные окружения особенно мощны в автоматизации. Вот несколько продвинутых техник:

Условное задание переменных


# Задать переменную, только если она не задана
export DATABASE_URL=${DATABASE_URL:-"postgresql://localhost/mydb"}

# Для обязательных переменных
export API_KEY=${API_KEY:?"API_KEY must be set"}

Загрузка переменных из файла


# Создаём .env файл
cat > .env << EOF API_KEY=secret123 DATABASE_URL=postgres://localhost/db DEBUG=true EOF # Загружаем переменные set -a # Автоматически экспортировать все переменные source .env set +a

Скрипт для настройки окружения


#!/bin/bash
# setup-env.sh

# Определяем окружение
if [ "$1" = "production" ]; then
export APP_ENV="production"
export DEBUG="false"
export LOG_LEVEL="error"
elif [ "$1" = "development" ]; then
export APP_ENV="development"
export DEBUG="true"
export LOG_LEVEL="debug"
else
echo "Usage: $0 [production|development]"
exit 1
fi

echo "Environment configured for $APP_ENV"

Интересные факты и нестандартные применения

  • PS1 и PS2 — это тоже переменные окружения, которые управляют видом приглашения командной строки
  • LD_LIBRARY_PATH может перенаправлять загрузку библиотек для отладки
  • HISTSIZE контролирует размер истории команд

Креативные способы использования:


# Цветной вывод для разных окружений
export PS1='\[\033[0;32m\]PROD>\[\033[0m\] ' # Зелёный для прода
export PS1='\[\033[0;31m\]DEV>\[\033[0m\] ' # Красный для разработки

# Автоматическое подключение к нужной базе
export DATABASE_URL="$(cat /etc/db-config/$(hostname).conf)"

# Условные алиасы на основе переменных
[ "$APP_ENV" = "development" ] && alias ll='ls -la --color=auto'

Сравнение с альтернативными решениями

Метод Область видимости Постоянство Лучше для
export Текущая сессия и дочерние процессы До завершения сессии Временные настройки
/etc/environment Все пользователи Постоянно Системные переменные
~/.bashrc Конкретный пользователь Постоянно Персональные настройки
systemd Environment Конкретный сервис Постоянно Сервисы и демоны

Отладка и диагностика

Когда что-то идёт не так, эти команды помогут найти проблему:


# Проверяем, какие переменные видит процесс
cat /proc/PID/environ | tr '\0' '\n'

# Трассировка переменных в скрипте
set -x
export MY_VAR="debug"
echo $MY_VAR
set +x

# Проверяем источник переменной
echo $PS1
grep -r "PS1" ~/.bashrc ~/.profile /etc/bash.bashrc

Безопасность и рекомендации

  • Никогда не экспортируйте пароли через командную строку — они попадут в history
  • Используйте файлы с ограниченными правами для хранения секретов
  • Рассмотрите использование HashiCorp Vault или Kubernetes Secrets для продакшена


# Безопасная загрузка секретов
if [ -f /etc/secrets/app.env ]; then
set -a
source /etc/secrets/app.env
set +a
fi

# Проверяем права на файл
chmod 600 /etc/secrets/app.env
chown root:root /etc/secrets/app.env

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

Команда export — это мощный инструмент, который должен быть в арсенале каждого администратора. Она позволяет гибко настраивать окружение для приложений, автоматизировать процессы и создавать переносимые конфигурации.

Ключевые рекомендации:

  • Используйте export для временных переменных в скриптах
  • Храните постоянные настройки в соответствующих конфигурационных файлах
  • Не забывайте о безопасности при работе с секретами
  • Документируйте нестандартные переменные для коллег
  • Тестируйте изменения в изолированном окружении

Овладев этими техниками, вы сможете эффективно управлять конфигурацией на любом сервере — от небольшого VPS до enterprise-решений. Помните: правильно настроенные переменные окружения — это основа стабильной и предсказуемой работы ваших приложений.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked