Урок 3. Просмотр файлов и поиск: cat, less, tail, grep, find
Большая часть работы в терминале — найти нужное: строку в журнале, настройку в файле, сам файл где-то в системе. Для этого есть несколько простых команд, и все они работают одинаково в любом Linux.
Чтобы повторять примеры, создайте в папке для опытов файл app.log — короткий журнал программы:
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:
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.
tail -f app.logОткройте второй терминал и допишите строку: echo "новая строка" >> app.log — она сразу появится в первом.
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 нет связи с базой| Ключ | Что делает |
|---|---|
-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: тогда текст ищется как есть.
Поиск по всем файлам папки:
grep -rn "listen" /etc/nginx/Подробнее — в справке Как найти текст в файлах.
find — найти файлы
find ищет файлы по имени, размеру, дате и другим признакам. Порядок такой: где искать, потом условия:
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-name— по имени, с шаблонами*и?;-iname— то же без учёта регистра;-type f— только файлы,-type d— только папки;-size +500M— больше 500 МБ (k— килобайты,G— гигабайты);-mtime -1— изменённые за последние сутки,-mtime +30— больше 30 суток назад.
Шаблон в -name обязательно берите в кавычки. Без них оболочка сама подставит имена из текущей папки, и find получит не шаблон, а случайный список файлов.
Поиск по всему диску (find / …) выводит много строк Permission denied — это папки, куда обычному пользователю нельзя. Добавка 2>/dev/null прячет эти сообщения: так ошибки отправляются «в никуда» (подробнее — в уроке Перенаправление вывода и конвейеры).
С найденным можно сразу что-то сделать — ключ -exec: {} заменяется именем файла, а \; завершает команду:
find ~/practice -name "*.log" -exec ls -l {} \;У find есть ключи -delete и -exec rm {} \; — они удаляют всё найденное без вопросов. Сначала всегда запускайте ту же команду без удаления и смотрите список. Ошибка в условии (например, забытое -name) удалит всё содержимое папки.
Коротко
cat— показать короткий файл,less— листать длинный (/— поиск,q— выход).headиtail— начало и конец файла,tail -f— следить за новыми строками.grep текст файл— строки с текстом;-i,-n,-v,-c,-r— самые нужные ключи.find где условия— поиск файлов по имени (-name), типу (-type), размеру (-size), дате (-mtime).- Шаблоны для
grepиfind— в кавычках; удаление черезfind— только после проверки списка.