Linux Labs

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

Конвейер: ответ из нескольких команд

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

Шаг 4 из 7 · теория · 6 мин

Самые частые — сверху

Осталось расставить счёт по убыванию и оставить верх списка.

sort сравнивает строки как текст, знак за знаком. Для чисел нужен ключ -n: с ним 9 меньше 10. Ключ -r разворачивает порядок, и большие числа встают сверху. Поэтому sort -rn после uniq -c ставит первым самый частый адрес, а head -n 3 оставляет три верхние строки.

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

В файле sizes.txt три строки — 9, 10 и 100. В каком порядке их напечатает sort sizes.txt?

  • Большие числа сверху ставит sort -rn. Без ключей sort сравнивает текст, и строки на 1 идут раньше строки на 9.

  • sort сортирует любые строки, числа тоже, но как текст: 10 и 100 начинаются с 1 и встают раньше 9.

  • Без -n sort сравнивает текст знак за знаком: 1 меньше 9, поэтому 10 и 100 встают раньше 9. По величине их расставит sort -n.

Без ключей sort сравнивает строки как текст: 10 и 100 начинаются с 1 и встают раньше 9. sort -n расставит их по величине — 9, 10, 100.

Длинный конвейер собирают по звену: добавил команду — посмотри вывод через | head, потом пиши следующую. Так сразу видно, на каком звене строки стали не те.

В конвейер попадает только поток 1. Сообщения об ошибках каждой команды идут мимо него, прямо на экран, и направляют их своим 2> у нужной команды. Готовый ответ сохраняют через > в конце конвейера: … | head -n 3 > top.txt.

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

В /etc есть каталоги, куда student нельзя заглянуть. Что окажется на экране после find /etc -name '*.conf' | wc -l?

  • Сообщения Permission denied find печатает в поток 2, мимо конвейера, — они тоже на экране. wc сосчитал одни пути.

  • wc получил пути от find через |, поэтому ввода с клавиатуры не ждёт и печатает их число.

  • Сообщения в конвейер не попадают: они в потоке 2. wc сосчитал пути, а сообщения напечатались на экран.

Конвейер передаёт один поток 1, поэтому wc сосчитал найденные пути, а сообщения об отказах find напечатал прямо на экран. Убрать их можно через 2> /dev/null у find.

Главное в шаге

  • sort -rn ставит большие числа сверху, head -n 3 оставляет три верхние строки.
  • Конвейер собирают по звену и после каждого смотрят вывод через head.
  • Через | идёт только поток 1; ошибки направляют 2> у своей команды.
Ubuntu 24.04
Загрузка…