Вопрос с собеседования · DevOps

Что такое переменные окружения и PATH и почему команда «не найдена»?

JuniorLinux и диагностика
Ещё спрашивают так:
  • command not found — что делать?
  • Как задать переменную окружения?
Коротко

Переменные окружения — пары «имя=значение», которые процесс получает от родителя: настройки, пути, секреты. Задать для текущей сессии и дочерних процессов — export NAME=value, для одной команды — NAME=value команда, посмотреть — echo $NAME или env. PATH — список каталогов через двоеточие, где оболочка ищет программы. «command not found» значит, что программы нет ни в одном каталоге PATH: не установлена, установлена в другое место или не активировано окружение (venv).

  • which команда — откуда берётся программа
  • Постоянно — в ~/.bashrc или ~/.profile, затем открыть новую сессию
  • Программы из текущего каталога запускают как ./script.sh — . в PATH нет

А ещё Переменные окружения не видны другим уже запущенным процессам

Подробно

Пример:

export DATABASE_URL=postgres://localhost/app
python app.py           # увидит DATABASE_URL
echo $PATH
which python
export PATH="$HOME/.local/bin:$PATH"

Секреты: в переменных удобно передавать пароли приложению, но не печатать их в логи и не коммитить файлы .env.

Что хотят услышать

  • export и область видимости переменных.
  • PATH и поиск программ.
  • Причины command not found, which.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗export меняет переменную во всех уже запущенных процессах
  • ✗Текущий каталог всегда входит в PATH
  • ✗У файла программы нет права на исполнение, хотя каталог есть в PATH
  • ✓Программы нет ни в одном каталоге из PATH: не установлена или лежит в другом месте

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования