Введение / Зачем это нужно
Переменные окружения — это ключевой механизм в Linux для передачи информации между процессами и настройки поведения программ. Они управляют путями поиска исполняемых файлов (PATH), локализацией (LANG), настройками конкретных приложений (например, JAVA_HOME) и многим другим. Понимание и умение правильно настраивать их — базовый навык для разработчика, системного администратора и любого продвинутого пользователя Linux. Этот гайд поможет вам уверенно работать с переменными окружения: от простого просмотра до создания постоянных глобальных настроек.
Требования / Подготовка
- Операционная система: Любой дистрибутив Linux (Ubuntu, Debian, CentOS, Fedora, Arch и т.д.).
- Командная оболочка (Shell): Руководство ориентировано на
bash(по умолчанию в большинстве дистрибутивов) иzsh. Синтаксисexportстандартен. - Права доступа: Для редактирования файлов в домашнем каталоге (
~/.bashrc,~/.profile) нужны стандартные права пользователя. - Текстовый редактор: Рекомендуется familiarity с
nano(простой) илиvim/vim.tiny(мощный).
Шаг 1: Просмотр текущих переменных окружения
Прежде чем что-то изменять, нужно понять, что уже есть. Для этого есть несколько команд:
env— выводит все переменные окружения текущей сессии.printenv— работает аналогичноenv, но может принимать имя переменной:printenv PATH.echo $VAR_NAME— показывает значение конкретной переменной в текущей оболочке. Удобно, но переменная должна быть уже определена в оболочке.
# Показать все переменные
env
# Показать только PATH
echo $PATH
# Проверить, существует ли переменная
printenv HOME
Обратите внимание на переменную PATH. Это список каталогов, через которые система ищет исполняемые команды. Каталоги разделены двоеточием (:).
Шаг 2: Создание временной переменной (для текущей сессии)
Чтобы задать переменную, которая будет доступна только в текущем открытом терминале и его дочерних процессах, выполните два действия:
- Присвоение значения:
MY_VAR="значение". - Экспорт в окружение:
export MY_VAR.
# Создаём переменную и экспортируем её
export FAVORITE_EDITOR="nano"
export PROJECT_PATH="/home/user/myproject"
# Проверяем, что она доступна
echo $FAVORITE_EDITOR
# Вывод: nano
# Запускаем дочерний процесс (например, другой скрипт), который увидит эту переменную
./some_script.sh
⚠️ Важно: Если вы просто выполните
MY_VAR="value"безexport, переменная будет существовать только в текущей оболочке, но не будет передана запускаемым из неё программам.
Шаг 3: Изменение переменной PATH
Одна из самых частых задач — добавить собственный каталог с исполняемыми файлами в PATH. Всегда добавляйте новый путь к существующему значению $PATH, а не перезаписывайте его, иначе сломаете доступ к системным командам (ls, cd, apt и т.д.).
# Правильно: добавляем каталог ~/bin в конец PATH
export PATH="$PATH:$HOME/bin"
# Проверяем результат
echo $PATH
# В выводе в конце будет :/home/ваш_логин/bin
# Можно добавить в начало (высший приоритет), но будьте осторожны
# export PATH="$HOME/bin:$PATH"
Шаг 4: Создание постоянных переменных через ~/.bashrc
Файл ~/.bashrc (точка в начале — скрытый файл) выполняется при каждом запуске нового интерактивного не-логического shell. Это идеальное место для переменных, которые нужны вам в каждом новом терминале.
- Откройте файл в текстовом редакторе:
nano ~/.bashrc - Добавьте в конец файла строки с командами
exportдля ваших переменных:# Мои кастомные настройки export EDITOR="nano" export LANG="ru_RU.UTF-8" export PATH="$PATH:$HOME/.local/bin" - Сохраните файл (
Ctrl+Oв nano, затемEnter) и закройте редактор (Ctrl+X). - Примените изменения к текущей сессии, не перезапуская терминал:
Или просто откройте новое окно терминала.source ~/.bashrc
Шаг 5: Создание глобальных переменных через ~/.profile (или ~/.bash_profile)
Если вам нужно, чтобы переменная была доступна при любом входе в систему (включая графический вход, запуск скриптов через cron или другие программы, запускаемые из меню), используйте файл ~/.profile (или ~/.bash_profile в некоторых системах). Этот файл читается при запуске login shell.
- Откройте (или создайте) файл:
nano ~/.profile - Добавьте туда нужные
export-команды. Пример дляJAVA_HOME:# Настройка Java export JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64" export PATH="$JAVA_HOME/bin:$PATH" - Сохраните файл. Изменения вступят в силу после следующего входа в систему (перезагрузки или выхода/входа). Чтобы применить их сейчас в текущем терминале, выполните:
source ~/.profile
💡 Совет: Для большинства пользователей, работающих в основном в терминале, достаточно
~/.bashrc. Используйте~/.profileдля настроек, которые должны быть видны всем программам, запущенным от вашего имени.
Шаг 6: Создание переменной для одной команды (Inline)
Иногда нужно задать переменную только для выполнения одной конкретной команды, не засоряя окружение. Синтаксис: VAR=value command.
# Выполнить команду 'make' с указанием конкретного компилятора
CC=gcc-11 make
# Запустить скрипт с временной локалью
LANG=ru_RU.UTF-8 ./setup_script.sh
# Проверить, что глобальная переменная не изменилась
echo $LANG
# Вывод будет прежним, если он был задан в .bashrc/.profile
Проверка результата
После выполнения настроек убедитесь, что всё работает:
- Перезапустите терминал (или выполните
sourceдля соответствующего файла). - Проверьте наличие ваших переменных:
echo $MY_VAR printenv MY_VAR - Проверьте, что
PATHсодержит нужные пути и в правильном порядке:echo $PATH | tr ':' '\n' # Вывод каждого пути с новой строки - Проверьте, что команды из добавленного каталога доступны:
which my_custom_tool # Должен показать полный путь к исполняемому файлу
Возможные проблемы
- «Команда не найдена» после добавления в PATH: Убедитесь, что вы добавили путь к каталогу, а не к самому исполняемому файлу. Проверьте, что файл действительно существует и имеет права на выполнение (
chmod +x файл). - Изменения в .bashrc/.profile не применяются: Вы уверены, что редактировали правильный файл? Проверьте, какой shell вы используете (
echo $SHELL). Убедитесь, что вы выполнилиsource ~/.bashrcили перезапустили терминал. Для.profileможет потребоваться полный выход/вход в систему. - Конфликт имён переменных: Избегайте использования общих имён (
PATH,HOME,USER) для своих переменных, если только вы не уверены в последствиях. Используйте префикс, например,MYAPP_DEBUG. - Проблемы с правами: При запуске скриптов или программ, которые зависят от ваших переменных, убедитесь, что у вас есть права на выполнение. Ошибки доступа могут возникать, если скрипт запущен через
sudo— переменные текущего пользователя по умолчанию не передаются. Используйтеsudo -Eдля сохранения окружения (осторожно!) или настройте переменные системно в/etc/environment(требует прав root). - Кодировка/локализация: Если после установки
LANGилиLC_*символы отображаются некорректно, убедитесь, что соответствующая локальная генерация установлена в системе (sudo locale-gen ru_RU.UTF-8в Debian/Ubuntu).