# Перенаправление вывода: >, >> и 2>&1 простыми словами

Канонический URL: https://zero2claude.ru/blog/terminal-redirect-output
Дата: 2026-09-07
Теги: терминал, редиректы, stderr, новичкам

Как сохранить вывод команды в файл, дописать его в конец и куда девать ошибки. Стрелочки >, >> и магия 2>&1 на бытовых примерах.

Команда отработала, в терминале промелькнула стена текста — и через секунду её уже не вернуть. А там было что-то важное: то ли путь к файлу, то ли строчка с ошибкой, то ли результат, который надо отправить другу. Ты лихорадочно скроллишь вверх, но половина уже уехала за край экрана.

Знакомо? Терминал по умолчанию выбрасывает весь вывод тебе в лицо и тут же о нём забывает. Но есть три коротких значка — `>`, `>>` и `2>&1` — которые превращают этот мимолётный поток в аккуратный файл, который можно открыть, переслать или показать тому, кто разбирается. Давай разберёмся, как они работают, без занудства.

<Cover src="/blog/terminal-redirect-output.jpg" alt="Тёплая иллюстрация: воронка собирает поток в аккуратный конверт" />

## Стрелка `>` — «положи это в файл»

Представь, что вывод команды — это вода из крана. Обычно она просто льётся в раковину (экран) и утекает. Стрелка `>` — это шланг: она перенаправляет поток не на экран, а в файл.

```
ls > files.txt
```

Эта команда не покажет тебе список файлов на экране. Вместо этого она запишет его в файл `files.txt`. Открываешь файл — а там ровно то, что обычно мелькает в терминале. Удобно, когда вывод длинный или его надо кому-то отдать.

Важная деталь: **`>` стирает всё, что было в файле раньше**, и пишет заново. Это как чистый лист — старое содержимое исчезает без предупреждения. Если запустить две команды подряд с одной и той же стрелкой в один файл, останется только результат второй.

Бытовой пример. Ты хочешь сохранить список всех своих заметок в одном месте:

```
ls ~/Заметки > мои-заметки.txt
```

Теперь `мои-заметки.txt` — это снимок твоей папки на текущий момент. Запустишь команду завтра — файл перепишется свежим списком.

<Callout type="warning">
`>` молча затирает файл целиком. Если в `report.txt` лежали важные данные, а ты случайно написал `что-то > report.txt` — старого содержимого больше нет, отмены тут не предусмотрено. Перед перенаправлением в существующий файл лишний раз убедись, что не жалко его потерять.
</Callout>

## Двойная стрелка `>>` — «допиши в конец»

А что если стирать не надо? Что если ты хочешь копить записи — например, вести лог, куда каждый запуск добавляет новую строчку, а старые остаются на месте?

Для этого есть `>>`. Две стрелки вместо одной означают **«не стирай, а допиши снизу»**. Файл растёт, ничего не теряется.

```
echo "Запустил сборку $(date)" >> сборки.log
```

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

Простое правило, чтобы не путаться:

- Одна стрелка `>` — **новый лист**. Всё старое стирается, пишется заново.
- Две стрелки `>>` — **дневник**. Новое дописывается в конец, старое остаётся.

Если сомневаешься, что важнее — сохранить прошлое или начать с чистого, — почти всегда для логов и истории нужна именно двойная стрелка.

## `2>&1` — «и ошибки тоже сюда»

Вот тут начинается самое интересное, и именно тут многие спотыкаются. Дело в том, что у терминала не один поток вывода, а два.

Представь два разных крана над одной раковиной:

- **stdout** (поток 1) — обычный вывод, всё хорошее: результаты, ответы, списки.
- **stderr** (поток 2) — поток ошибок: предупреждения, сбои, сообщения «что-то пошло не так».

На экране оба льются вперемешку, и ты не замечаешь разницы. Но когда ты пишешь `команда > файл.txt`, в файл уходит **только stdout**. Ошибки (stderr) при этом по-прежнему вылетают на экран — стрелка `>` их не ловит.

Из-за этого бывает обидно: запустил долгую команду, перенаправил вывод в файл, ушёл пить чай — а вернувшись, видишь пустой файл и непонятно где потерянную ошибку.

Чтобы поймать и ошибки тоже, добавляют волшебное `2>&1`:

```
команда > всё.log 2>&1
```

Расшифровывается это так: «поток 2 (ошибки) отправь туда же, куда уже идёт поток 1 (обычный вывод)». Знак `&1` означает «туда, где сейчас находится поток 1» — то есть в наш файл. В итоге **и результаты, и ошибки оказываются в одном месте**, ничего не теряется.

Порядок здесь важен. Сначала указываем, куда идёт обычный вывод (`> всё.log`), и только потом — `2>&1`, чтобы ошибки последовали за ним. Если поменять местами, ошибки уйдут не туда, куда ты ждёшь.

<Callout type="tip">
Запоминалка: читай `2>&1` как «второй поток — следом за первым». Пиши его **в самом конце** строки, после того как уже сказал, куда идёт обычный вывод. Тогда и хорошее, и плохое аккуратно лягут в один файл — а его потом удобно открыть, прочитать спокойно или переслать тому, кто поможет разобраться.
</Callout>

## Зачем это всё на самом деле

Может показаться, что три значка — мелочь. Но именно они превращают терминал из «мелькнуло и пропало» в инструмент, который ничего не забывает.

Пара ситуаций из жизни, где это спасает:

- **Сохранить результат**, чтобы переслать или приложить к вопросу: `команда > результат.txt`.
- **Вести историю** запусков или событий: `echo "..." >> история.log`.
- **Поймать ошибку целиком**, когда что-то падает, и показать её тому, кто поможет: `команда > отчёт.log 2>&1`.

Последнее особенно ценно, когда ты просишь помощи — хоть у друга-программиста, хоть у Claude. Вместо «у меня что-то не работает» ты присылаешь конкретный файл со всем выводом и ошибками. И разговор сразу становится предметным: видно, где именно споткнулось.

Кстати, если ты дойдёшь до работы с Claude Code в терминале, привычка складывать вывод в файл пригодится постоянно — это самый честный способ показать ассистенту, что именно произошло, без пересказа по памяти.

Самый надёжный способ всё это уложить в голову — не зубрить, а попробовать руками: создать файл, переписать его, дописать строчку, поймать ошибку. В безопасной песочнице, где ничего не сломаешь и можно ошибаться сколько угодно.

 [Пройди бесплатный курс «Claude Code и терминал с 0»](/learn/code-terminal) — там ты наберёшь эти стрелочки вживую, в тренажёре прямо в браузере, и они перестанут быть магией.
