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

Канонический URL: https://zero2claude.ru/blog/terminal-env-vars
Дата: 2026-09-08
Теги: терминал, новичкам

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

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

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

<Cover src="/blog/terminal-env-vars.jpg" alt="Связка ключей на тёплом фоне как метафора переменных окружения" />

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

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

Любая программа может в этот блокнот заглянуть. Например, по переменной `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. Какое именно нужно — подскажет здравый смысл: если имя редкое и хитрое, ты, скорее всего, опечатался; если только что качал установщик — он мог не дописать себя в список.

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

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

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

```
export API_KEY=secret123
```

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

```
echo $API_KEY
```

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

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

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

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

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

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

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

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