- Home »

Команда 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-решений. Помните: правильно настроенные переменные окружения — это основа стабильной и предсказуемой работы ваших приложений.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.