Перейти к содержимому

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

Переменные окружения (environment variables) — это именованные значения, доступные всем процессам в системе. Они хранят конфигурацию: пути к программам, настройки приложений, учётные данные.

Это стандартный способ передавать конфигурацию в программы без хардкода в исходном коде.

Окно терминала
env # все переменные окружения
printenv # то же самое
printenv HOME # значение конкретной переменной
echo $HOME # тоже работает
echo $PATH # переменная PATH
set # все переменные + функции (bash)
Окно терминала
echo $HOME # домашняя директория: /home/user
echo $USER # имя пользователя
echo $PATH # пути поиска программ
echo $SHELL # текущая оболочка: /bin/bash
echo $PWD # текущая директория
echo $OLDPWD # предыдущая директория
echo $EDITOR # редактор по умолчанию
echo $LANG # локаль: en_US.UTF-8
echo $TERM # тип терминала
echo $HOSTNAME # имя хоста

PATH — это список директорий, в которых ищутся исполняемые файлы:

/bin
echo $PATH
# Когда ты пишешь `ls`, система ищет ls в каждой директории PATH
which ls # /bin/ls — где найдена команда
which node # /usr/local/bin/node
Окно терминала
# Переменная только для текущей оболочки
MYVAR="hello"
echo $MYVAR # работает
bash -c 'echo $MYVAR' # пусто! дочерний процесс не видит
# export — передать в дочерние процессы
export MYVAR="hello"
bash -c 'echo $MYVAR' # теперь работает!
# Одновременно объявить и экспортировать
export DATABASE_URL="postgresql://localhost/mydb"
export API_KEY="secret123"
export NODE_ENV="production"
# Удалить переменную
unset MYVAR

Файлы конфигурации оболочки читаются при каждом запуске:

  • ~/.bashrc — для интерактивных bash оболочек
  • ~/.bash_profile или ~/.profile — при входе в систему
  • ~/.zshrc — для zsh
Окно терминала
# Редактирование .bashrc
nano ~/.bashrc
# или
vim ~/.bashrc

Типичное содержимое ~/.bashrc:

Окно терминала
# Экспорт переменных
export EDITOR="vim"
export JAVA_HOME="/usr/lib/jvm/java-17"
export PATH="$PATH:$HOME/.local/bin:$JAVA_HOME/bin"
# Алиасы
alias ll="ls -la"
alias la="ls -la"
alias ..="cd .."
alias ...="cd ../.."
alias grep="grep --color=auto"
alias df="df -h"
alias free="free -h"
# Для разработки
alias gs="git status"
alias gp="git push"
alias gl="git pull"
alias dc="docker-compose"
export NODE_ENV="development"
export DATABASE_URL="postgresql://localhost/mydb"

После редактирования .bashrc нужно применить изменения:

Окно терминала
source ~/.bashrc # перечитать .bashrc
. ~/.bashrc # то же самое (. = source)
# Перезапустить оболочку
exec bash
exec zsh
Окно терминала
# Создать алиас
alias ll="ls -la --color=auto"
alias myip="curl https://ifconfig.me"
alias update="sudo apt update && sudo apt upgrade -y"
# Посмотреть все алиасы
alias
# Удалить алиас
unalias ll
# Временный алиас (только для текущей сессии)
# Постоянный — добавить в ~/.bashrc

В разработке принято хранить секреты в .env файлах:

Окно терминала
# .env файл проекта
DATABASE_URL=postgresql://user:pass@localhost/mydb
SECRET_KEY=mysecretkey123
API_KEY=sk-abcdef123456
NODE_ENV=development
PORT=3000
Окно терминала
# Загрузить .env в текущую оболочку
export $(cat .env | grep -v '#' | xargs)
# Или использовать dotenv в Node.js проектах
# npm install dotenv
# require('dotenv').config()

⚠️ Всегда добавляй .env в .gitignore! Никогда не коммить секреты!

#!/bin/bash
# Переменные с дефолтными значениями
PORT="${PORT:-3000}" # использовать 3000 если PORT не задан
DB_HOST="${DB_HOST:-localhost}"
# Проверить что переменная задана
: "${DATABASE_URL:?Переменная DATABASE_URL не задана!}"
# Использовать значение если переменная задана
DEBUG="${DEBUG:+--verbose}" # "--verbose" только если DEBUG задан
Окно терминала
# 1. Посмотри своё окружение
env | sort | head -30
# 2. Проверь PATH
echo $PATH | tr ':' '\n' # каждый путь на новой строке
# 3. Добавь директорию в PATH
export PATH="$PATH:$HOME/scripts"
echo $PATH
# 4. Создай постоянный алиас
echo 'alias myalias="echo Hello from alias!"' >> ~/.bashrc
source ~/.bashrc
myalias
# 5. Создай .env файл
cat > .env << EOF
APP_NAME=MyProject
PORT=3000
DEBUG=true
EOF
# Загрузи его
export $(cat .env | xargs)
echo $APP_NAME # MyProject
# 6. Верни PATH на место (перезапусти bash)
exec bash

Переменные окружения — основа 12-factor приложений. Это стандарт современной разработки!