Если вы только начинаете свой путь в мире Linux, то наверняка уже сталкивались с упоминанием «переменных окружения». Звучит немного загадочно, но на самом деле это один из фундаментальных и очень полезных инструментов системы. Он позволяет настраивать поведение программ и самой операционной системы без необходимости редактировать их код или сложные конфигурационные файлы. В этой статье мы разберем, как создать и настроить переменные окружения в Linux, зачем они нужны и как с ними работать.
Что такое переменные окружения
Представьте, что ваша операционная система и программы, которые вы запускаете, постоянно нуждаются в какой-то базовой информации: где искать исполняемые файлы, какой язык использовать для сообщений, как называется ваш домашний каталог и так далее. Переменные окружения — это как раз такие «записки» или «настройки», которые хранят эту информацию.
Формально переменная окружения — это именованный объект (пара «ключ-значение»), который содержит текстовую информацию. Эта информация доступна для процессов, запущенных в данной «среде», например, в вашем текущем сеансе терминала.
Переменная имеет имя (обычно пишут заглавными буквами, например, HOME) и значение (например, /home/user). Когда вы запускаете программу из терминала, она обычно «наследует» все переменные окружения, которые были установлены в этом терминале. Они используются для конфигурации системы и приложений, передачи настроек между процессами, указания путей и многого другого.
Проще всего представить работу с переменными окружения в Linux, как взаимодействие с глобальными настройками вашего текущего рабочего сеанса.
Как посмотреть переменные окружения в Linux
Узнать, какие переменные окружения уже установлены в вашей системе, очень просто. Есть несколько команд:
- printenv или env – эти команды выведут список всех переменных окружения, доступных в текущем сеансе.
printenv
# Или
env
Вы увидите довольно большой список пар ИМЯ=значение, например:
USER=vasya
HOME=/home/vasya
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LANG=ru_RU.UTF-8
- Если вы хотите посмотреть значение переменной окружения в Linux, используйте команду echo, добавив перед именем переменной знак доллара ($):
echo $HOME
Вывод:
/home/vasya
Знак $ говорит оболочке (shell), что нужно подставить значение переменной HOME, а не просто вывести слово «HOME».
Как добавить и задать переменную окружения в Linux
Переменные окружения можно создавать или изменять. Важно понимать, что изменения могут быть временными (только для текущего сеанса терминала) или постоянными, то есть сохранятся после перезагрузки.
Временные переменные (для текущей сессии)
Чтобы установить переменную окружения в Linux только для текущего окна терминала и запущенных из него программ, используется команда export.
Синтаксис:
export ИМЯ_ПЕРЕМЕННОЙ="значение”
Создадим новую переменную MY_APP_VERSION:
export MY_APP_VERSION=”1.0"
Теперь проверим ее:
echo $MY_APP_VERSION
Вывод:
1.0
Эта переменная будет доступна всем командам, которые вы запустите после ее объявления в этом же терминале. Как только вы закроете терминал, эта переменная исчезнет.
Постоянные переменные
Чтобы переменная была доступна всегда (после перезагрузки или открытия нового терминала), ее нужно прописать в конфигурационные файлы вашей оболочки (shell). Чаще всего используется Bash, поэтому рассмотрим файлы для него.
- Для текущего пользователя
Изменения вносятся в файл ~/.bashrc (для интерактивных сессий, самый частый случай) или ~/.profile / ~/.bash_profile (для сессий входа). Для простоты начнем с ~/.bashrc. Символ ~ означает ваш домашний каталог (например, /home/vasya).
Откройте файл ~/.bashrc в текстовом редакторе (например, nano):
nano ~/.bashrc
Добавьте строку с командой export в конец файла:
export MY_APP_VERSION=”1.0”
# Можно добавить комментарий для себя
export GITVERSE_USER=”myusername”
Сохраните файл (в nano это Ctrl+O, Enter) и закройте редактор (Ctrl+X). Чтобы изменения применились сразу в текущем терминале, выполните команду:
source ~/.bashrc
Или просто закройте и снова откройте терминал. Теперь переменная будет устанавливаться каждый раз при запуске новой сессии Bash.
- Для всей системы
Такие переменные задаются в системных файлах, например, /etc/environment или в скриптах внутри /etc/profile.d/. Редактирование системных файлов требует прав администратора (sudo) и должно выполняться с осторожностью. Для большинства задач достаточно пользовательских настроек. Приедем пример на файле /etc/environment:
sudo nano /etc/environment
В этом файле переменные задаются в формате ИМЯ="значение" (без export):
MY_GLOBAL_VAR="some_value"
Для применения изменений обычно требуется перезагрузка или повторный вход в систему.
Где хранятся переменные окружения
Как мы уже поняли, переменные окружения не хранятся в каком-то одном магическом месте. Их источник зависит от типа переменной. Временные переменные, созданные через export, существуют только в памяти текущей оболочки и ее дочерних процессов. Они исчезают при закрытии сеанса.
Постоянные переменные для конкретного пользователя хранятся в файлах типа ~/.bashrc, ~/.profile, ~/.bash_profile. Они считываются при запуске оболочки.
Постоянные переменные для всех пользователей системы хранятся в файлах типа /etc/environment, /etc/profile, скриптах в /etc/profile.d/. Они считываются при входе в систему или запуске оболочки на системном уровне.
Система обычно считывает эти файлы в определенном порядке (сначала системные, потом пользовательские), что позволяет пользовательским настройкам переопределять системные.
Часто используемые переменные
Вот несколько переменных окружения, с которыми вы наверняка столкнетесь:
- PATH – пожалуй, самая важная. Содержит список каталогов, разделенных двоеточием (:), в которых оболочка ищет исполняемые файлы (команды). Когда вы вводите ls или python, система ищет их в каталогах, указанных в PATH.
- HOME – путь к домашнему каталогу текущего пользователя (например, /home/vasya).
- USER (или LOGNAME) – имя текущего пользователя.
- SHELL – путь к командной оболочке пользователя по умолчанию (например, /bin/bash).
- PWD – текущий рабочий каталог (директория, в которой вы находитесь). Хотя PWD часто обновляется самой оболочкой, она ведет себя как переменная окружения.
- LANG – определяет язык и региональные стандарты (формат даты, чисел) по умолчанию. Например, ru_RU.UTF-8. Есть также переменные LC_* (например, LC_TIME, LC_MESSAGES) для более тонкой настройки.
Вы можете посмотреть их значения у себя командой echo $ИМЯ_ПЕРЕМЕННОЙ.
Вопрос-ответ
В чем разница между MYVAR=”value” и export MYVAR=”value”?
MYVAR=”value” создает переменную только внутри текущей оболочки. Программы, запущенные из этой оболочки, ее не увидят. export MYVAR=”value” создает переменную и делает ее доступной (экспортирует) для всех дочерних процессов, запускаемых из этой оболочки. Для постоянного хранения в файлах конфигурации всегда используйте export.
Почему имена переменных обычно пишут ЗАГЛАВНЫМИ буквами?
Это общепринятое соглашение в Unix-подобных системах. Оно помогает отличать переменные окружения от других переменных (например, переменных в скриптах). Использовать строчные буквы можно, но не рекомендуется, чтобы избежать путаницы и возможных конфликтов.
Я добавил переменную в ~/.bashrc, но она не появилась сразу. Почему?
Файл ~/.bashrc считывается только при запуске новой интерактивной оболочки Bash. Чтобы изменения применились в текущем терминале, нужно либо выполнить команду source ~/.bashrc, либо просто закрыть и открыть терминал заново.
Переменные окружения в Linux — это мощный инструмент, понимание его работы сделает ваше взаимодействие с системой гораздо эффективнее. Не бойтесь экспериментировать с временными переменными в терминале — это лучший способ научиться.