Linux Labs

Первые шаги / Ступень 11 из 15

Куда уходит вывод команды

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · на машине · 8 мин

Оба потока в один файл или никуда

Иногда сообщения об ошибках нужны в одном файле с результатом. Иногда они только мешают читать вывод.

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

Упражнение · посмотреть

Поменяй порядок перенаправлений

В ~/stream-lab выполни две команды поиска — они отличаются порядком перенаправлений, — а потом посчитай строки со словом denied в all.txt.

Сначала предположи

В первой команде 2>&1 стоит раньше > all.txt. Куда попадут сообщения Permission denied?

Теперь начни упражнение, выполни команду и сверь прогноз с выводом.

Войти и начать Машина доступна после входа

Оболочка разбирает перенаправления слева направо. В первой команде 2>&1 стоит раньше: поток 1 в этот момент ещё идёт на экран, и поток 2 отправился туда же. Затем > перевёл в файл один поток 1. Во второй команде > сначала направил поток 1 в all.txt, и 2>&1 отправил поток 2 следом. Оба потока в один файл — это > файл 2>&1, именно в таком порядке.

Ненужный поток выбрасывают в /dev/null — особый файл, который принимает любой текст и ничего не хранит. find /etc -name '*.conf' 2> /dev/null печатает одни найденные пути.

Внимание

2> /dev/null выбрасывает все сообщения об ошибках команды, нужные тоже. Выбрасывай поток ошибок, когда уже знаешь, что в нём.

Проверь себя 1 вопрос

Ты ищешь свои отчёты по всей системе: find / -name 'report*'. Нужные пути тонут среди сотен строк Permission denied. Что сделаешь?

  • > выбросит поток 1 — как раз найденные пути, а отказы в доступе останутся на экране.

  • 2>&1 отправит поток 2 туда же, куда идёт поток 1, — на экран. Отказы так и останутся среди путей.

  • >> дописывает в /dev/null поток 1: найденные пути пропадут, а отказы останутся на экране.

Отказы в доступе find печатает в поток 2, и 2> /dev/null выбрасывает их. Найденные пути идут в поток 1 и по-прежнему печатаются на экран.

Ubuntu 24.04
Загрузка…