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

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

Коротко

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

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

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

Тёплая иллюстрация: воронка собирает поток в аккуратный конверт

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

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

ls > files.txt

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

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

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

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

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

Важно

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

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

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

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

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, чтобы ошибки последовали за ним. Если поменять местами, ошибки уйдут не туда, куда ты ждёшь.

Совет

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

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

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

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

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

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

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

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

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

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

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

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