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

Быстрые ссылки
- Что такое переменные окружения в Linux?
- Как показать значение переменной окружения
- Как перечислить переменные с помощью printenv
- Общие переменные окружения
- Диагностика и проверки окружения
Краткое содержание
Переменные окружения — это пары “имя=значение”, которые процессы читают и наследуют. В терминале чаще всего используют echo, printenv и env. Для поиска удобны grep и просмотрщик less. Если переменная не видна, проверьте, экспортирована ли она, где она задана (локально в shell или в файле профиля) и не перекрывается ли системными настройками.
Что такое переменные окружения?
Коротко: переменная окружения — это именованное значение, доступное процессу и его дочерним процессам. Процесс читает значение по имени. Если переменная не экспортирована, дочерние процессы её не увидят.
- Environment variable (переменная окружения): строка формата NAME=VALUE, доступная процессу.
- Shell (оболочка): программа, принимающая команды и управляющая переменными в интерактивной сессии.
- Экспорт (export): операция, делающая локальную переменную видимой дочерним процессам.
Понимание этих трёх понятий помогает при диагностике проблем с окружением.
Как показать значение конкретной переменной
Если вы знаете имя переменной, используйте echo:
echo $HOMEecho $USERecho подставляет значение переменной в строку и печатает его в stdout. Если переменная не задана, echo выведет пустую строку.
Короткая проверка на существование переменной:
if [ -z "$FOO" ]; then
echo "FOO не задана или пуста"
else
echo "FOO=$FOO"
fiprintenv против env: в чём разница
- printenv — специализированная утилита для вывода переменных окружения. Она печатает текущие переменные, одну на строку, и имеет минимум опций.
- env — утилита для запуска команд в модифицированном окружении. Если вызвать env без аргументов, она также выведет список переменных; однако её основная цель — выполнить программу с кастомными значениями.
Примеры:
printenvenv # покажет список, но чаще используется как: env VAR=value commandЕсли нужно создать временное окружение при запуске программы:
env LANG=C.UTF-8 my_appЭто запустит my_app с локалью C.UTF-8, не меняя глобальные значения.
Как использовать printenv: опции и поведение
Основные сценарии работы с printenv:
- Показать все переменные:
printenv- Использовать null-терминатор (редко нужно):
printenv -0Опция -0 заменяет символ новой строки на нулевой байт. Это полезно при передаче списков в программы, которые ожидают null-terminated строки. В интерактивной сессии вывод выглядит как сплошной поток и плохо читается.
Чтобы пролистывать вывод удобнее, используйте less:
printenv | lessДля поиска по имени переменной используйте grep:
printenv | grep DISPLAYПример: если вы ищете всё, что связано с языком и локалью:
printenv | grep -i langКогда переменная не отображается: типичные причины
- Переменная задана локально в shell, но не экспортирована. Локальная переменная видна только в текущей оболочке.
- Переменная установлена в конфигурации, которая ещё не выполнена (например, в ~/.bashrc для некорректного типа сессии).
- Переменная переопределяется позже при запуске процесса.
- Переменная удалена или переименована.
Проверьте локальные переменные и функцию declare:
declare -p VAR 2>/dev/null || echo "VAR не найдено"Или используйте set для просмотра всех переменных и функций в текущей shell-сессии:
set | lessset выведет гораздо больше (включая функции и локальные переменные), тогда как printenv показывает только экспортированные переменные.
Как установить и сделать переменную постоянной
Чтобы в текущей сессии задать переменную и экспортировать её дочерним процессам:
export FOO=barЧтобы переменная сохранилась между сессиями, добавьте строку в файл, который читается при входе в систему или при запуске оболочки:
- Для интерактивной Bash-сессии: ~/.bashrc или ~/.bash_profile (в зависимости от дистрибутива и типа сессии).
- Для системного уровня: /etc/environment или /etc/profile.d/*.sh (требуется sudo).
Пример записи в ~/.bashrc:
# Добавлено вручную: переменные окружения
export EDITOR=nano
export PATH="$HOME/bin:$PATH"После изменения ~/.bashrc перезапустите сессию или выполните:
source ~/.bashrcПросмотр окружения процесса: /proc//environ
Иногда нужно посмотреть переменные окружения уже запущенного процесса. Для этого можно прочитать /proc/
Пример (требуются права чтения для соответствующего PID):
tr '\0' '\n' < /proc/1/environ | grep -i PATHЭта команда преобразует нулевые байты в переводы строки и позволяет читать переменные как обычный список. Будьте осторожны с правами доступа: для процессов других пользователей может потребоваться sudo.
Частые переменные окружения и их назначение
Ниже — перевод и пояснения распространённых переменных, которые вы чаще всего встретите.
- BASHOPTS: опции, с которыми запущен bash.
- BASH_VERSION: версия bash.
- COLUMNS: ширина терминала в колонках.
- DIRSTACK: стек директорий для pushd/popd.
- HISTFILESIZE: максимальный размер файла истории (строки).
- HISTSIZE: максимальное количество строк истории в памяти.
- HOME: домашняя директория пользователя.
- HOSTNAME: имя компьютера.
- IFS: разделитель полей для парсинга (обычно пробел).
- LANG: локаль и кодировка по умолчанию.
- LS_COLORS: коды цветов для ls.
- MAIL: путь к почтовому ящику пользователя.
- OLDPWD: предыдущая рабочая директория.
- PS1: основной формат командной строки (prompt).
- PATH: список директорий через двоеточие, в которых ищутся исполняемые файлы.
- PWD: текущая рабочая директория.
- SHELL: путь к вашей оболочке (например, /bin/bash).
- TERM: эмуляция терминала.
- UID: идентификатор пользователя.
- USER: имя текущего пользователя.
- _: последний выполненный командный аргумент (в контексте printenv чаще равен printenv).
Обратите внимание: набор переменных зависит от дистрибутива, оконной среды и конфигурации.

Примечание: -0 используется редко. В интерактивной оболочке вывод будет слитный и неудобочитаемый.

Полезные приёмы и шаблоны (cheat sheet)
- Показать всё и поиск по ключевому слову:
printenv | grep -i "user"- Посмотреть локальные (неэкспортированные) переменные и функции:
set | less- Прочитать окружение конкретного процесса:
tr '\0' '\n' < /proc//environ | less - Экспортировать переменную временно:
export TMP_VAR=value- Запустить команду с изменённым окружением без изменения текущего:
env VAR=value commandДиагностика проблем: чек‑лист и рабочий процесс
Шаги для быстрого поиска причин некорректного окружения:
- Убедитесь, что переменная экспортирована:
export VAR. - Проверьте, где она задана:
grep -n "VAR" ~/.bashrc ~/.profile /etc/environment /etc/profile.d/*. - Проверьте локальные переменные в текущей сессии:
set | grep VAR. - Посмотрите окружение целевого процесса:
tr '\0' '\n' < /proc/./environ | grep VAR - При изменении конфигурационных файлов перезапустите сессию или выполните
source. - Если проблема с PATH, временно проверьте
echo $PATHи запуститеwhich.
Краткий playbook для восстановления PATH:
- Если пропали системные утилиты (например, ls, cp):
- Выполните
echo $PATHи убедитесь, что присутствуют /usr/bin и /bin. - Если их нет, временно восстановите:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin. - Исправьте файл, где PATH был перезаписан (например, в ~/.bashrc), заменив конструкции
PATH="$HOME/bin"наPATH="$HOME/bin:$PATH".
- Выполните
Ролевые чек‑листы
Для разработчика:
- Проверить переменные, связанные с локалью и билд-средой (LANG, LC_*).
- Убедиться, что PATH включает путь к инструментам сборки.
- Не хранить секреты в открытом виде в ~/.bashrc; использовать менеджеры секретов.
Для системного администратора:
- Проверить системные файлы: /etc/environment, /etc/profile.d/*.
- Проверить, не задаёт ли systemd юнит переменные через Environment=.
- Убедиться, что при обновлениях пакетов не переписываются профили пользователей.
Для специалиста по безопасности:
- Исключить хранение паролей и токенов в глобальных файлах конфигурации.
- Ограничить читабельность файлов с секретами правами доступа.
- Проверить процессы на утечки через /proc/*/environ.
Когда перечисление переменных не помогает: альтернативные подходы
- Если программа использует собственный конфиг, проверьте её конфигурационные файлы. Переменные окружения — не единственный источник настроек.
- Для сервисов systemd: изучите юниты и директивы Environment= и EnvironmentFile=.
- Для контейнеров: проверьте переменные, заданные в Dockerfile или в docker-compose.
Безопасность и приватность
- Не публикуйте вывод printenv/ env в публичных логах — там могут быть ключи и токены.
- Используйте утилиты вроде pass, secret‑store или Vault для секретов.
- Ограничивайте права на файлы, где хранятся переменные (chmod 600).
Совместимость между оболочками
- Bash/zsh/sh: используют export для экспорта переменных.
- Fish: синтаксис иной —
set -x VAR value. - Systemd: переменные можно задать в unit‑файлах через Environment=.
При переносе скриптов между оболочками проверяйте синтаксис экспорта и инициализации.
Тесты и критерии приёмки
Чтобы убедиться, что изменение переменной прошло успешно:
- Acceptance 1: После добавления
export VAR=valдочерний процесс (например,bash -c 'echo $VAR') должен вывести val. - Acceptance 2: После внесения изменения в ~/.bashrc и выполнения
source ~/.bashrcвыводecho $VARдолжен вернуть ожидаемое значение. - Acceptance 3: Для системных изменений (например, /etc/environment) перезагрузка или новая логин-сессия должна сохранить значение.
Примеры и типичные команды (практическая подборка)
- Показать PATH красиво, разбив по строкам:
echo $PATH | tr ':' '\n' | nl- Показать только переменные с подстрокой HOME или USER:
printenv | grep -E 'HOME|USER'- Найти все переменные, содержащие слово password/secret (предупреждение: это может найти ложные срабатывания):
printenv | grep -i -E 'pass(word)?|secret|token'- Просмотреть переменные окружения процесса с PID 1234:
sudo tr '\0' '\n' < /proc/1234/environ | lessКороткая галерея исключительных случаев
- Переменная существует в интерактивной shell-сессии, но printenv её не показывает — значит, она не экспортирована.
- PATH был перезаписан в конфиге без приставки :$PATH — в этом случае системные пути будут потеряны.
- Службы systemd не видят изменения в ~/.bashrc — systemd не читает пользовательские dotfiles, используйте EnvironmentFile или unit‑файл.
Краткое руководство по откату изменений (runbook)
Если изменение переменной привело к сбою:
- Откатите файл конфигурации до резервной копии (если есть) или удалите внесённую строку.
- Восстановите PATH временно:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin- Перезапустите сервис или сессию.
- Проанализируйте логи, найдите причину некорректного присваивания.
Краткая методология проверки окружения (минимум шагов)
- Запустить printenv | less.
- Сузить поиск grep по ключевым словам.
- Проверить, экспортирована ли переменная (declare/set).
- Если требуется — посмотреть окружение процесса в /proc/
/environ. - Исправить конфигурационный файл и применить изменения (source или перезапуск).
Бокс с ключевыми идеями
- Переменные окружения — средство передачи конфигурации процессам.
- Printenv показывает только экспортированные переменные.
- Set/declare дают более полный взгляд на локальное состояние shell.
- Env запускает программу в модифицированном окружении.
1‑строчный глоссарий
- export: команда для пометки переменной как экспортируемой.
- printenv: выводит экспортированные переменные и их значения.
- env: запускает процесс с модифицированным окружением или выводит окружение при отсутствии аргументов.
Короткое объявление для команды (100–200 слов)
Если вы хотите быстро сообщить команде об инструменте для проверки окружения, используйте следующий текст:
В Linux для просмотра переменных окружения используйте printenv. Для поиска по имени переменной пропускайте вывод через grep, а для удобного чтения — через less. Помните: printenv показывает только экспортированные переменные; если переменная не видна, проверьте, не задана ли она локально без export. Изменения постоянного характера вносятся в ~/.bashrc, /etc/environment или systemd unit (EnvironmentFile). Для просмотра окружения запущенного процесса используйте /proc/
Итог
Переменные окружения — простой и мощный инструмент настройки поведения приложений и оболочки. Для большинства задач достаточно printenv, grep, echo и базовых правок в ~/.bashrc или /etc/environment. При диагностике обращайте внимание на область видимости (локальная vs экспортированная), на то, где именно задаётся переменная, и на возможные перезаписи.
| | Linux Commands | | Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc · tr | | | Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | | | Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld | |
Похожие материалы
Как подключить Android к машине и слушать музыку
Создание качественного AI-арта: советы и приёмы
Как исправить буферизацию в Kodi
Обновите буфер обмена Windows 10 с Ditto
Восстановление, обновление и сброс Windows 8