10. Переменные окружения
Что такое переменные окружения?
Заголовок раздела «Что такое переменные окружения?»Переменные окружения (environment variables) — это именованные значения, доступные всем процессам в системе. Они хранят конфигурацию: пути к программам, настройки приложений, учётные данные.
Это стандартный способ передавать конфигурацию в программы без хардкода в исходном коде.
Просмотр переменных окружения
Заголовок раздела «Просмотр переменных окружения»env # все переменные окруженияprintenv # то же самоеprintenv HOME # значение конкретной переменнойecho $HOME # тоже работаетecho $PATH # переменная PATHset # все переменные + функции (bash)Ключевые системные переменные
Заголовок раздела «Ключевые системные переменные»echo $HOME # домашняя директория: /home/userecho $USER # имя пользователяecho $PATH # пути поиска программecho $SHELL # текущая оболочка: /bin/bashecho $PWD # текущая директорияecho $OLDPWD # предыдущая директорияecho $EDITOR # редактор по умолчаниюecho $LANG # локаль: en_US.UTF-8echo $TERM # тип терминалаecho $HOSTNAME # имя хостаPATH — путь поиска программ
Заголовок раздела «PATH — путь поиска программ»PATH — это список директорий, в которых ищутся исполняемые файлы:
echo $PATH# Когда ты пишешь `ls`, система ищет ls в каждой директории PATHwhich ls # /bin/ls — где найдена командаwhich node # /usr/local/bin/nodeexport — установка переменных
Заголовок раздела «export — установка переменных»# Переменная только для текущей оболочки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 и .zshrc — постоянная конфигурация
Заголовок раздела «.bashrc и .zshrc — постоянная конфигурация»Файлы конфигурации оболочки читаются при каждом запуске:
~/.bashrc— для интерактивных bash оболочек~/.bash_profileили~/.profile— при входе в систему~/.zshrc— для zsh
# Редактирование .bashrcnano ~/.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"source — применить изменения
Заголовок раздела «source — применить изменения»После редактирования .bashrc нужно применить изменения:
source ~/.bashrc # перечитать .bashrc. ~/.bashrc # то же самое (. = source)
# Перезапустить оболочкуexec bashexec zshalias — псевдонимы команд
Заголовок раздела «alias — псевдонимы команд»# Создать алиас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 файлы — конфигурация проектов»В разработке принято хранить секреты в .env файлах:
# .env файл проектаDATABASE_URL=postgresql://user:pass@localhost/mydbSECRET_KEY=mysecretkey123API_KEY=sk-abcdef123456NODE_ENV=developmentPORT=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. Проверь PATHecho $PATH | tr ':' '\n' # каждый путь на новой строке
# 3. Добавь директорию в PATHexport PATH="$PATH:$HOME/scripts"echo $PATH
# 4. Создай постоянный алиасecho 'alias myalias="echo Hello from alias!"' >> ~/.bashrcsource ~/.bashrcmyalias
# 5. Создай .env файлcat > .env << EOFAPP_NAME=MyProjectPORT=3000DEBUG=trueEOF
# Загрузи егоexport $(cat .env | xargs)echo $APP_NAME # MyProject
# 6. Верни PATH на место (перезапусти bash)exec bashПеременные окружения — основа 12-factor приложений. Это стандарт современной разработки!