Битлента
Windows, macOS, Android, iOS5 мин чтения·

Переменная PATH: почему появляется command not found и как добавить свою папку с программами

Как работает переменная PATH в Linux и macOS, почему команда установлена, но не находится, как посмотреть путь поиска, добавить папку и сделать изменение постоянным.

Кратко

Когда вы вводите команду, оболочка ищет программу по папкам из переменной PATH. Если нужной папки там нет, появляется command not found, хотя программа установлена. Посмотреть список можно командой echo $PATH, добавить папку — в файле настроек оболочки.

Как оболочка ищет команду

Когда вы вводите в терминале имя программы без пути, оболочка не сканирует весь диск. Она просматривает только каталоги, которые перечислены в переменной окружения PATH, причём по порядку слева направо, и запускает первый найденный файл с подходящим именем. Если ни в одной папке такого файла нет, вы видите сообщение «command not found».

Поэтому сообщение не означает, что программа не установлена. Она может лежать на диске, просто в каталоге, который не входит в список поиска. Другая частая причина — опечатка в имени или различие в регистре букв: в Linux имена команд чувствительны к регистру, а в macOS это зависит от файловой системы.

Есть команды, которые вообще не лежат в файлах: встроенные команды оболочки, например cd, и алиасы, определённые в вашем профиле. Они работают без поиска по PATH, но при запуске из другого окружения, например из планировщика, их может не быть.

Увидеть, что именно будет запущено, помогает type имя: оно сообщает, встроена ли команда, алиас она или файл, и показывает полный путь. Команда which имя ищет файл по PATH и тоже выводит путь.

Как посмотреть и прочитать PATH

Выполните echo $PATH. Результат — одна строка, в которой каталоги разделены двоеточиями. Для удобства можно вывести каждый путь с новой строки: echo $PATH | tr ':' '\n'.

Какие каталоги встречаются в такой строке, зависит от системы. Часто видны такие места.

КаталогЧто обычно хранится
/usr/binосновные программы дистрибутива или системы
/binбазовые команды, на многих системах это ссылка на /usr/bin
/usr/local/binпрограммы, которые администратор ставит вручную
/usr/sbin, /sbinпрограммы для администрирования
/opt/homebrew/binпакеты Homebrew на Mac с Apple Silicon
~/.local/binпользовательские программы в ряде дистрибутивов

Порядок имеет значение. Если одноимённые программы лежат в двух каталогах, запустится та, что левее. Это объясняет ситуацию, когда после установки новой версии продолжает работать старая: в PATH раньше стоит каталог со старой. Команда which -a имя покажет все совпадения по порядку, и вы увидите, кто кого заслоняет.

Порядок действий при command not found

Не спешите ставить программу заново. Проверьте по порядку.

  1. Проверьте написание: опечатки и регистр букв. Попробуйте вызвать подсказку автодополнения клавишей Tab.
  2. Убедитесь, что программа вообще на диске. Для файла из пакета используйте менеджер пакетов; для найденной вручную — find или locate, если он установлен.
  3. Если файл найден, запустите его по полному пути. Если так работает, а по имени нет, дело именно в PATH.
  4. Посмотрите содержимое PATH и убедитесь, что нужного каталога там нет.
  5. Добавьте каталог (см. следующий раздел) или создайте в уже подходящей папке ссылку на программу.
  6. Откройте новое окно терминала и проверьте снова: изменения в файле настроек подхватываются только новыми сессиями.

Отдельный случай — файл найден, но при запуске по полному пути выдаётся «Permission denied»: у файла нет бита выполнения. Исправляется командой chmod с ключом +x для этого файла. А сообщение «No such file or directory» при запуске существующего скрипта часто означает неверную первую строку с указанием интерпретатора.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Как добавить папку в PATH и сделать это постоянным

Для текущего окна терминала достаточно одной команды: export PATH="$PATH:/путь/к/папке". Папка добавится в конец списка, и поиск в ней будет идти последним. Если нужно, чтобы она имела приоритет, ставят её в начало: export PATH="/путь/к/папке:$PATH". Закрыв окно, вы потеряете изменение.

Чтобы сделать его постоянным, строку добавляют в файл настроек вашей оболочки. Какой именно файл, зависит от оболочки и системы: в современном macOS по умолчанию используется zsh с файлом .zprofile или .zshrc, в большинстве дистрибутивов Linux — bash с файлом .bashrc или .profile. Проверить свою оболочку можно командой echo $SHELL. После правки файла откройте новое окно или выполните команду source с именем файла.

Что нельзя делать:

  • не заменять PATH целиком, а не дополнять его: после такой команды перестанут находиться даже базовые программы, а исправить поможет только новое окно терминала;
  • не добавлять в PATH текущую папку (точку) ради удобства: тогда вы рискуете случайно запустить чужой файл с привычным именем;
  • не добавлять каталоги, в которые могут писать другие пользователи.

Почему в cron и графических программах PATH другой

Одна и та же команда может работать в терминале и не работать в планировщике или при запуске из значка. Причина в том, что PATH формируется для каждой сессии отдельно. Терминал читает файлы настроек вашей оболочки, а cron, launchd или служба systemd используют короткий стандартный набор каталогов.

Решение для автоматических задач — указывать полные пути к программам и скриптам, а если нужны особые каталоги, задавать PATH в самом задании или в начале скрипта. Для cron и launchd решение одно и то же.

В macOS графические приложения запускаются не из оболочки и не читают ваш .zshrc, поэтому переменные, заданные там, им недоступны. Для них нужны другие механизмы, и часто проще указывать пути напрямую в настройках самого приложения.

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

Короткий чек-лист на случай, если команда не находится

Когда программа не находится, быстрая последовательность проверок помогает не метаться между гипотезами.

  • Выполните type имя: если ответ «not found», команды нет ни как встроенной, ни как файла в PATH.
  • Запустите файл по полному пути, если знаете, где он лежит: это отделяет проблему PATH от проблемы прав и самой программы.
  • Проверьте echo $SHELL и убедитесь, что правите файл настроек именно той оболочки, которую используете.
  • Откройте новое окно терминала после правки: старые окна не перечитывают файл.
  • Проверьте, не лежит ли программа в каталоге пользователя другого аккаунта: при работе через sudo PATH бывает другим, потому что система нередко подставляет собственный безопасный список каталогов.

Если вы работаете в чужой системе или на общем сервере, не меняйте глобальные настройки PATH для всех пользователей без согласования. Личных правок в домашней папке почти всегда достаточно, и они не затрагивают остальных.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
linuxmacosPATHтерминал

Часто задаваемые вопросы

Читайте также