Урок 4 из 8 · 20 мин · обновлено
Читать и искать: cat, less, tail, grep, find
Как посмотреть содержимое файла целиком и постранично, увидеть начало и конец лога, следить за логом в реальном времени, найти строки командой grep и файлы командой find.
Учебный лог
Логи — журналы, куда программы записывают, что происходит. Их приходится читать разработчикам, тестировщикам и администраторам. Создадим учебный лог интернет-магазина: скопируйте команду целиком, вместе со строками до EOF.
cd ~/practice
cat > app.log << 'EOF'
2026-10-20 09:15 INFO Заказ 101 создан
2026-10-20 09:17 ERROR Оплата заказа 101 не прошла
2026-10-20 09:20 INFO Заказ 102 создан
2026-10-20 09:21 INFO Заказ 101 оплачен
2026-10-20 09:40 ERROR Нет связи с сервером доставки
2026-10-20 10:02 INFO Заказ 103 создан
2026-10-20 10:05 WARN Медленный ответ базы данных
2026-10-20 10:30 ERROR Оплата заказа 103 не прошла
EOF
Такая запись передаёт команде cat текст до слова EOF, а > сохраняет его в файл. Подробнее о > — в следующем уроке.
Посмотреть: cat, less, head, tail
cat app.log— вывести файл целиком. Удобно для коротких файлов;less app.log— открыть постранично. Листать — пробелом и стрелками, искать —/словои Enter, выйти — Q;head— начало файла,tail— конец. По умолчанию по 10 строк, число задаёт-n.
head -n 3 app.log
tail -n 2 app.log
2026-10-20 09:15 INFO Заказ 101 создан
2026-10-20 09:17 ERROR Оплата заказа 101 не прошла
2026-10-20 09:20 INFO Заказ 102 создан
2026-10-20 10:05 WARN Медленный ответ базы данных
2026-10-20 10:30 ERROR Оплата заказа 103 не прошла
В логах самое свежее — внизу, поэтому их обычно читают с конца. А tail -f app.log следит за файлом: показывает новые строки, как только программа их дописывает. Так смотрят, что происходит на сервере прямо сейчас. Выход — Ctrl+C.
grep: найти строки
grep печатает строки, в которых есть нужный текст:
grep ERROR app.log
2026-10-20 09:17 ERROR Оплата заказа 101 не прошла
2026-10-20 09:40 ERROR Нет связи с сервером доставки
2026-10-20 10:30 ERROR Оплата заказа 103 не прошла
Полезные параметры:
-i— без учёта регистра:grep -i error app.logнайдёт иERROR, иError;-c— только посчитать строки:grep -c ERROR app.logвыведет3;-v— наоборот, строки без этого текста:grep -v INFO app.log;-n— показать номера строк;-r— искать во всех файлах папки и вложенных:grep -r "TODO" projects/.
Если в искомом тексте есть пробелы, его берут в кавычки: grep "Заказ 101" app.log.
find: найти файлы
grep ищет внутри файлов, а find — сами файлы:
find . -name "*.jpg"
./photos/jpg/cat.jpg
./photos/jpg/dog.jpg
.— где искать: в текущей папке и во всех вложенных;-name "*.jpg"— по имени, шаблон берут в кавычки.-iname— без учёта регистра;-type d— только папки,-type f— только файлы;-size +100M— файлы больше 100 мегабайт. Помогает понять, чем занят диск;-mtime -1— изменённые за последние сутки.
Попробуйте сами. Выясните по app.log: сколько всего ошибок, какие записи касаются заказа 101 и какие строки не являются информационными, то есть без INFO.
Решение
grep -c ERROR app.log
grep "заказа 101\|Заказ 101" app.log
grep -v INFO app.log
3
2026-10-20 09:15 INFO Заказ 101 создан
2026-10-20 09:17 ERROR Оплата заказа 101 не прошла
2026-10-20 09:21 INFO Заказ 101 оплачен
2026-10-20 09:17 ERROR Оплата заказа 101 не прошла
2026-10-20 09:40 ERROR Нет связи с сервером доставки
2026-10-20 10:05 WARN Медленный ответ базы данных
2026-10-20 10:30 ERROR Оплата заказа 103 не прошла
\| в шаблоне grep означает «или»: подходят строки и с «Заказ 101», и с «заказа 101». Можно проще — искать только число: grep 101 app.log. Но тогда попадут и строки, где 101 встречается случайно, например во времени или сумме.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Лог на миллион строк. Как посмотреть только последние 20 строк?
tail показывает конец файла, а в логах свежие записи именно там. head показал бы самые старые.
-
Что выведет grep ERROR app.log?
grep печатает строки, где встречается искомый текст. Чтобы получить только число, добавляют -c.
-
Как найти все файлы .jpg во всех вложенных папках текущей папки?
find обходит все вложенные папки. ls *.jpg посмотрел бы только в текущей.
-
Как следить за логом, пока программа продолжает в него писать?
tail -f показывает новые строки по мере появления. Выход — Ctrl+C.