Глиф Учебники

Урок 3. Просмотр файлов и поиск: cat, less, tail, grep, find

Курс «Командная строка Linux» · урок 3 из 10 · 4 минуты чтения

Большая часть работы в терминале — найти нужное: строку в журнале, настройку в файле, сам файл где-то в системе. Для этого есть несколько простых команд, и все они работают одинаково в любом Linux.

Чтобы повторять примеры, создайте в папке для опытов файл app.log — короткий журнал программы:

Bash
cat > app.log << 'EOF'
2026-03-12 10:00:01 INFO сервер запущен
2026-03-12 10:05:17 ERROR нет связи с базой
2026-03-12 10:05:20 INFO повторное подключение
2026-03-12 10:06:02 WARNING мало места на диске
2026-03-12 10:07:45 ERROR нет связи с базой
EOF

Всё между первой строкой и строкой EOF попадёт в файл. Как это устроено — в уроке Перенаправление вывода и конвейеры. Можно и проще: открыть nano app.log, вставить строки и сохранить.

cat — весь файл сразу

Терминал
$ cat app.log
2026-03-12 10:00:01 INFO сервер запущен
2026-03-12 10:05:17 ERROR нет связи с базой
2026-03-12 10:05:20 INFO повторное подключение
2026-03-12 10:06:02 WARNING мало места на диске
2026-03-12 10:07:45 ERROR нет связи с базой

cat выводит файл целиком — удобно для коротких файлов. cat -n добавит номера строк. Имя команды — от concatenate (склеить): cat a.txt b.txt выведет оба файла подряд.

less — листать длинный файл

Файл на тысячи строк cat пролистнёт за долю секунды. Для чтения есть less:

Bash
less /etc/services
КлавишаДействие
стрелки, Space, bстрока вниз и вверх, страница вперёд, страница назад
g и Gв начало и в конец файла
/слово и Enterискать вперёд; n — следующее совпадение, N — предыдущее
qвыйти

Те же клавиши работают в man: он обычно показывает справку через less.

head и tail — начало и конец

Терминал
$ head -n 2 app.log
2026-03-12 10:00:01 INFO сервер запущен
2026-03-12 10:05:17 ERROR нет связи с базой
$ tail -n 1 app.log
2026-03-12 10:07:45 ERROR нет связи с базой

Без -n обе команды показывают 10 строк. Самый полезный ключ — tail -f (follow, следить): команда показывает конец файла и дальше печатает новые строки по мере того, как программа их дописывает. Так смотрят журнал работающего сайта или службы. Выход — Ctrl+C.

Bash
tail -f app.log

Откройте второй терминал и допишите строку: echo "новая строка" >> app.log — она сразу появится в первом.

app.log 1 2026-03-12 10:00:01 INFO сервер запущен 2 2026-03-12 10:05:17 ERROR нет связи с базой 3 2026-03-12 10:05:20 INFO повторное подключение 4 2026-03-12 10:06:02 WARNING мало места на диске 5 2026-03-12 10:07:45 ERROR нет связи с базой + новая строка дописана позже head -n 2 начало файла tail -n 1 конец файла tail -f печатает новые строки
head -n 2 показывает первые две строки app.log, tail -n 1 — последнюю, а tail -f остаётся ждать и печатает строки, которые дописываются в конец файла.

grep — найти строки

grep печатает строки, в которых есть искомый текст:

Терминал
$ grep ERROR app.log
2026-03-12 10:05:17 ERROR нет связи с базой
2026-03-12 10:07:45 ERROR нет связи с базой
$ grep -c ERROR app.log
2
$ grep -n WARNING app.log
4:2026-03-12 10:06:02 WARNING мало места на диске
$ grep -v INFO app.log
2026-03-12 10:05:17 ERROR нет связи с базой
2026-03-12 10:06:02 WARNING мало места на диске
2026-03-12 10:07:45 ERROR нет связи с базой
строки app.log grep ERROR grep -v INFO 1 2026-03-12 10:00:01 INFO сервер запущен 2 2026-03-12 10:05:17 ERROR нет связи с базой 3 2026-03-12 10:05:20 INFO повторное подключение 4 2026-03-12 10:06:02 WARNING мало места на диске 5 2026-03-12 10:07:45 ERROR нет связи с базой grep -c ERROR печатает только число подходящих строк 2
grep ERROR пропускает из app.log только строки 2 и 5 со словом ERROR, grep -v INFO — строки без INFO, а grep -c ERROR печатает их число 2.
КлючЧто делает
-iбез учёта регистра: grep -i error найдёт и ERROR, и Error
-nпоказать номера строк
-cтолько посчитать подходящие строки
-vнаоборот: строки, где текста нет
-wтолько целое слово: grep -w cat не найдёт category
-rискать во всех файлах папки и вложенных папок
-lпоказать только имена файлов, где есть совпадение
-Eрасширенные шаблоны: grep -E "ERROR|WARNING" — одно или другое

Искать можно не только простой текст, но и шаблон — регулярное выражение. Самые нужные знаки: ^ — начало строки, $ — конец строки, . — любой символ. grep "^2026-03-12 10:05" app.log найдёт строки, которые начинаются с этого времени. Шаблон берите в кавычки, чтобы оболочка не поняла его знаки по-своему. Если нужно найти сам знак вроде точки или звёздочки, добавьте ключ -F: тогда текст ищется как есть.

Поиск по всем файлам папки:

Bash
grep -rn "listen" /etc/nginx/

Подробнее — в справке Как найти текст в файлах.

find — найти файлы

find ищет файлы по имени, размеру, дате и другим признакам. Порядок такой: где искать, потом условия:

Bash
find ~ -name "notes.txt"
find ~ -iname "*отчёт*"
find /var/log -name "*.log" -type f
find ~ -type d -name "projects"
find / -size +500M -type f 2>/dev/null
find ~/practice -mtime -1
find /var/log -name "*.log" -type f где искать условия должны выполниться все /var/log что выведет find syslog имя не подходит под *.log auth.log /var/log/auth.log nginx папка — find заходит внутрь access.log /var/log/nginx/access.log error.log /var/log/nginx/error.log apt папка — find заходит внутрь history.log /var/log/apt/history.log
find /var/log -name "*.log" -type f обходит папку /var/log вместе с вложенными папками nginx и apt и выводит полные пути всех файлов, подходящих под условия.

Шаблон в -name обязательно берите в кавычки. Без них оболочка сама подставит имена из текущей папки, и find получит не шаблон, а случайный список файлов.

Поиск по всему диску (find / …) выводит много строк Permission denied — это папки, куда обычному пользователю нельзя. Добавка 2>/dev/null прячет эти сообщения: так ошибки отправляются «в никуда» (подробнее — в уроке Перенаправление вывода и конвейеры).

С найденным можно сразу что-то сделать — ключ -exec: {} заменяется именем файла, а \; завершает команду:

Bash
find ~/practice -name "*.log" -exec ls -l {} \;

У find есть ключи -delete и -exec rm {} \; — они удаляют всё найденное без вопросов. Сначала всегда запускайте ту же команду без удаления и смотрите список. Ошибка в условии (например, забытое -name) удалит всё содержимое папки.

Коротко

Проверьте себя

1. Какой командой следить за журналом, в который программа дописывает новые строки?
2. Что выведет grep -v INFO app.log?
3. Зачем шаблон в find ~ -name "*.txt" взят в кавычки?
4. Как выйти из less?