Урок 5 из 8 · 20 мин · обновлено

Конвейеры и перенаправление: | и >

Как сохранить вывод команды в файл через > и >>, передать его другой команде через конвейер | и собрать из маленьких команд wc, sort, uniq и cut настоящий отчёт по логу.

Перенаправление: > и >>

Обычно команда выводит результат на экран. Его можно сохранить в файл:

Терминал
grep ERROR app.log > errors.txt
echo "Проверено администратором" >> errors.txt
tail -n 2 errors.txt
Результат
2026-10-20 10:30 ERROR Оплата заказа 103 не прошла
Проверено администратором
  • > — записать вывод в файл. Если файл был, его содержимое заменится;
  • >> — дописать в конец файла, не трогая то, что там уже есть.

Частая ошибка — написать > вместо >> и потерять содержимое файла. Для журналов и списков почти всегда нужен >>.

Конвейер: |

Вертикальная черта | — конвейер (pipe): вывод одной команды становится входом для следующей. Не нужно сохранять промежуточный результат в файл.

Терминал
grep ERROR app.log | wc -l
Результат
3

grep отобрал строки с ошибками, wc -l их посчитал. Команда wc считает строки (-l), слова (-w) и символы (-c).

Конвейер может быть длинным: каждая команда делает одно маленькое дело, а вместе они решают задачу. В этом главная идея командной строки Linux.

sort, uniq, cut: отчёт по логу

Посчитаем, сколько в логе записей каждого уровня — INFO, WARN, ERROR.

Шаг 1. cut вырезает колонку. Слова в строке разделены пробелами, уровень — третье слово:

Терминал
cut -d ' ' -f 3 app.log
Результат
INFO
ERROR
INFO
INFO
ERROR
INFO
WARN
ERROR

-d ' ' — разделитель колонок, пробел. -f 3 — номер колонки.

Шаг 2. sort ставит одинаковые строки рядом, а uniq -c считает их:

Терминал
cut -d ' ' -f 3 app.log | sort | uniq -c
Результат
      3 ERROR
      4 INFO
      1 WARN

uniq склеивает только одинаковые строки, которые идут подряд. Поэтому перед ним почти всегда стоит sort.

Шаг 3. Отсортируем по количеству, от большего к меньшему:

Терминал
cut -d ' ' -f 3 app.log | sort | uniq -c | sort -rn
Результат
      4 INFO
      3 ERROR
      1 WARN

sort -n сортирует как числа, а не как текст, -r — в обратном порядке. Четыре маленькие команды дали готовый отчёт. Тот же конвейер работает и на логе в миллион строк.

Попробуйте сами. Сделайте файл report.txt: в первой строке — заголовок «Ошибки за 20 октября», ниже — все строки с ошибками, а в конце — строка «Всего: 3», где число посчитано командой.

Решение
Терминал
echo "Ошибки за 20 октября" > report.txt
grep ERROR app.log >> report.txt
echo "Всего: $(grep -c ERROR app.log)" >> report.txt
cat report.txt
Результат
Ошибки за 20 октября
2026-10-20 09:17 ERROR Оплата заказа 101 не прошла
2026-10-20 09:40 ERROR Нет связи с сервером доставки
2026-10-20 10:30 ERROR Оплата заказа 103 не прошла
Всего: 3

Первая команда создаёт файл через >, остальные дописывают через >>. Запись $(команда) подставляет в текст результат команды: оболочка сначала выполнит grep -c, а потом echo получит готовую строку «Всего: 3».

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Чем отличаются команды echo текст > file.txt и echo текст >> file.txt?

  2. Что делает команда grep ERROR app.log | wc -l?

  3. Почему перед uniq -c почти всегда ставят sort?