Урок 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».
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Чем отличаются команды echo текст > file.txt и echo текст >> file.txt?
Одна стрелка заменяет содержимое файла целиком. Две стрелки добавляют строку в конец и сохраняют то, что было.
-
Что делает команда grep ERROR app.log | wc -l?
grep отбирает строки с ошибками, а конвейер передаёт их команде wc -l, которая считает строки.
-
Почему перед uniq -c почти всегда ставят sort?
Без сортировки одинаковые строки могут быть разбросаны по файлу, и uniq посчитает их по отдельности.