Команда отработала, в терминале промелькнула стена текста — и через секунду её уже не вернуть. А там было что-то важное: то ли путь к файлу, то ли строчка с ошибкой, то ли результат, который надо отправить другу. Ты лихорадочно скроллишь вверх, но половина уже уехала за край экрана.
Знакомо? Терминал по умолчанию выбрасывает весь вывод тебе в лицо и тут же о нём забывает. Но есть три коротких значка — >, >> и 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» — там ты наберёшь эти стрелочки вживую, в тренажёре прямо в браузере, и они перестанут быть магией.