К содержимому
Claude Code с 0:полный курс
ТерминалАвтор: Михаил Кузьмицкий

Переменные окружения: что такое PATH и зачем он

Коротко

Почему терминал иногда не находит установленную программу и говорит command not found — и как с этим связан загадочный PATH.

Ты установил программу. Точно установил — видел, как всё скачалось без единой ошибки. А терминал упрямо отвечает: command not found. Будто программы и нет вовсе. Знакомое чувство «да вот же она, я её только что поставил»?

Чтобы понять, что происходит, нужно познакомиться с одной невидимой штукой, которая работает за кулисами каждой твоей команды. Это переменные окружения, и главная из них — PATH. Звучит страшно, но по сути это просто записки, которые терминал держит под рукой.

Связка ключей на тёплом фоне как метафора переменных окружения

Переменные окружения — это записки для терминала

Представь, что у терминала есть блокнот с заметками: «текущий пользователь — такой-то», «домашняя папка — вот тут», «язык — русский». Это и есть переменные окружения: пары «имя = значение», которые терминал помнит всё время, пока окно открыто.

Любая программа может в этот блокнот заглянуть. Например, по переменной HOME редактор понимает, куда сохранять твои настройки, а по LANG приложение решает, на каком языке с тобой говорить. Тебе не нужно ничего объяснять каждой программе отдельно — она сама подсматривает в общий блокнот.

Посмотреть все записки разом можно командой:

env

Список будет длинный — не пугайся, читать его целиком не надо. А заглянуть в одну конкретную переменную проще так:

echo $HOME

Значок $ перед именем означает «подставь сюда значение этой переменной». Терминал увидит $HOME и заменит его на путь к твоей домашней папке. Эта мелочь — $ — пригодится дальше.

PATH — список мест, где искать программы

А теперь — главная переменная, из-за которой ты сюда и пришёл. Когда ты пишешь git или claude и жмёшь Enter, терминал не обыскивает весь компьютер в поисках этой программы. Это было бы долго. Вместо этого он смотрит в переменную PATHсписок папок, где живут программы, — и проверяет их по очереди.

Загляни в неё:

echo $PATH

Ты увидишь несколько путей, разделённых двоеточиями: /usr/local/bin:/usr/bin:/bin и так далее. Терминал читает их слева направо: «есть ли git в первой папке? нет. во второй? нет. в третьей? есть — запускаю». Как связка ключей: перебираешь по очереди, пока один не подойдёт к замку.

И вот тут вскрывается тайна command not found. Сообщение почти никогда не значит «программы нет на компьютере». Чаще оно значит «я искал её во всех папках из PATH и ни в одной не нашёл». Программа лежит на диске целая и невредимая — просто в папке, которой нет в этом списке. Терминал не телепат: где не велели смотреть, туда и не заглянет.

Понять это — половина дела. Раньше command not found выглядело как приговор: «сломал, переустанавливай». Теперь это всего лишь рапорт: «прошёлся по PATH, нужного файла не встретил». И почти всегда лечится одним из трёх движений — проверить написание команды, доустановить программу или добавить её папку в PATH. Какое именно нужно — подскажет здравый смысл: если имя редкое и хитрое, ты, скорее всего, опечатался; если только что качал установщик — он мог не дописать себя в список.

Совет

Если уверен, что программа установлена, а терминал её не видит, — почти всегда виноват PATH. Закрой терминал и открой заново: многие установщики дописывают свою папку в PATH, но эта правка подхватывается только в новом окне. Банальное «выключить и включить» здесь и правда лечит — не потому что магия, а потому что новое окно перечитывает список заново.

Как задать переменную на время

Иногда переменную нужно задать самому — например, программа просит ключ или особую настройку. Сделать это на один сеанс просто:

export API_KEY=secret123

Теперь, пока окно открыто, любая программа увидит API_KEY. Проверим:

echo $API_KEY

Слово export означает «сделай эту переменную видимой для программ, которые я запускаю». Без него переменная останется только в самом терминале и до программ не дойдёт — частая ловушка: задал ключ без export, программа его не увидела, а ты гадаешь, почему.

Такие подсказки через переменные встречаются на каждом шагу. Утилита просит токен — кладёшь его в export TOKEN=.... Скрипт хочет знать, в какой папке работать, — передаёшь путь переменной. Тебе не нужно лезть в код программы: ты просто оставляешь ей записку в общем блокноте, и она её читает.

Важно понять одно: это временно. Закроешь окно — записка сотрётся, как мел с доски. Откроешь новое — переменной там уже не будет. Это не баг, а удобство: можно спокойно экспериментировать с ключами и настройками, ничего не ломая навсегда. А чтобы переменная жила постоянно, её прописывают в специальный файл настроек, который терминал читает при каждом запуске. Но это уже следующий шаг — и спешить с ним новичку не нужно: на старте хватает и временных переменных.

Что стоит запомнить

Если выкинуть все подробности, останется простая картина:

  • Переменные окружения — это общие записки терминала, пары «имя = значение».
  • PATH — список папок, где терминал ищет программы, по порядку.
  • command not found чаще значит «не нашёл в PATH», а не «не существует».
  • export ИМЯ=значение задаёт переменную на время — до закрытия окна.

Теперь command not found для тебя не глухая стена, а понятная подсказка: терминал прошёлся по списку и ничего не нашёл. Дальше дело техники — проверить написание, установить программу или перезапустить окно.

Хочешь разобраться с терминалом по-настоящему, шаг за шагом и без зубрёжки? В нашем бесплатном курсе ты тренируешься прямо в браузере — пишешь команды и сразу видишь результат.

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

Попробуй на практике

Бесплатные интерактивные курсы по теме — прямо в браузере, с нуля.