← Назад к вопросам

Как посмотреть переменную окружения в Linux

1.0 Junior🔥 162 комментариев
#Linux и администрирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Просмотр переменных окружения в Linux

В Linux существует несколько методов для просмотра переменных окружения, каждый из которых имеет свои особенности и сценарии применения.

1. Команда printenv (основная)

printenv — наиболее прямой способ вывода переменных окружения. Без аргументов команда показывает все переменные, а с указанием имени — значение конкретной переменной.

# Вывести все переменные окружения
printenv

# Вывести конкретную переменную (например, PATH)
printenv PATH

# Альтернативный синтаксис
printenv USER HOME

2. Команда env

env также отображает все переменные окружения, но имеет дополнительный функционал для запуска команд в изменённом окружении.

# Показать все переменные
env

# Запустить команду с временной переменной
env MY_VAR=value bash -c 'echo $MY_VAR'

3. Вывод через $VAR_NAME в связке с echo

Для быстрой проверки отдельных переменных используется конструкция с echo и знаком $.

# Вывод стандартных переменных
echo $HOME
echo $USER
echo $PATH
echo $SHELL

# Важный нюанс: используйте кавычки для строк с пробелами
echo "Current shell: $SHELL"

4. Команда set (расширенный вывод)

set без параметров показывает все переменные оболочки, включая не только окружение, но и функции, локальные переменные. Вывод более объёмный.

# Показать все переменные и функции оболочки
set

# Для фильтрации можно использовать grep
set | grep PATH

5. Особые файлы и способы

Через /proc файловую систему

Для просмотра окружения конкретного процесса можно использовать специальные файлы:

# Просмотреть окружение процесса с PID 1234
cat /proc/1234/environ | tr '\0' '\n'

# Просмотреть своё собственное окружение (текущего shell)
cat /proc/$$/environ | tr '\0' '\n'

Здесь tr '\0' '\n' заменяет нулевые символы на переводы строк для читаемости.

Внутри сценариев и приложений

В скриптах можно использовать различные конструкции:

#!/bin/bash
# Простой вывод переменной
echo "Home directory is: $HOME"

# Вывод с проверкой на существование
if [ -z "$CUSTOM_VAR" ]; then
    echo "CUSTOM_VAR is not set"
else
    echo "CUSTOM_VAR = $CUSTOM_VAR"
fi

Сравнение методов

МетодЧто показываетРекомендуемое использование
printenvТолько экспортированные переменные окруженияОсновной способ, чистый вывод окружения
echo $VARЗначение конкретной переменнойБыстрая проверка отдельных переменных
envЭкспортированные переменные + управление окружениемПросмотр или временное изменение окружения
setВсе переменные оболочки (локальные и экспортированные)Полная диагностика среды оболочки
/proc/[PID]/environОкружение конкретного процессаОтладка процессов, анализ окружения демонов

Практические примеры и особенности

Пример 1: Поиск конкретных переменных

# Ищем переменные, связанные с Java
printenv | grep -i java

# Или так
env | grep JAVA_HOME

Пример 2: Проверка важных переменных

# Критически важные переменные для DevOps
echo "PATH: $PATH"
echo "HOME: $HOME"
echo "USER: $USER"
echo "SHELL: $SHELL"
echo "PWD: $PWD"
echo "LOGNAME: $LOGNAME"

Пример 3: Экспорт и просмотр

# Создаем переменную и экспортируем её
export MY_TEST_VAR="Hello DevOps"
printenv MY_TEST_VAR

# Локальная переменная (не будет видна через printenv)
LOCAL_VAR="Local value"
echo $LOCAL_VAR
printenv LOCAL_VAR  # Не выведет ничего - переменная не экспортирована

Ключевые отличия и важные нюансы

  1. Экспортированные vs локальные переменные:

    • printenv и env показывают только экспортированные переменные (те, что унаследуются дочерними процессами)
    • set показывает все переменные, включая локальные
  2. Процесс-ориентированный подход: Окружение существует в контексте каждого процесса. Переменные, установленные в одном терминале, не видны в других процессах без экспорта.

  3. Постоянство: Переменные, установленные через командную строку, исчезают после закрытия терминала. Для постоянного хранения используют:

    • ~/.bashrc (для bash, интерактивные сессии)
    • ~/.profile или ~/.bash_profile (логин-сессии)
    • Системные файлы: /etc/environment, /etc/profile.d/
  4. Безопасность: В переменных окружения часто хранятся чувствительные данные (пароли, ключи API). Будьте осторожны при выводе всего окружения в многопользовательских системах.

Заключение

Для разных задач подходят разные методы: printenv для чистого просмотра экспортированного окружения, echo $VAR для быстрой проверки отдельных значений, /proc/[PID]/environ для анализа окружения запущенных процессов. Как DevOps инженер, важно понимать эти различия для эффективной отладки, настройки CI/CD-пайплайнов и управления средами выполнения приложений. Понимание работы переменных окружения критически важно для контейнеризации (Docker), оркестрации (Kubernetes) и настройки серверных приложений.