Чтение файлов
cat выгружает весь файл в stdout — для маленьких файлов и конвейеров. less — пейджер для больших файлов: прокрутка, поиск /, выход q. head и tail выводят первые или последние N строк; tail -f следит за живым логом.
Каждый конфигурационный файл, лог, скрипт и файл данных на сервере — это текстовый файл. Умение быстро читать их — будь то проверка значения конфига, просмотр 200 МБ лога или наблюдение за ошибками в реальном времени — навык, который ты будешь использовать каждый день. Четыре команды охватывают весь диапазон: cat для маленьких файлов и конвейеров, less для больших, head и tail для краёв и живых потоков.
К концу урока ты будешь знать, какой инструмент выбрать в каждой ситуации и почему выгружать 200 МБ лога через cat — не лучшая идея.
После этого урока ты сможешь использовать cat для вывода содержимого файла и конкатенации файлов, less для интерактивного просмотра большого файла без загрузки его целиком в память, head -n N для просмотра первых N строк, а также tail -n N и tail -f для просмотра последних N строк или слежения за живым лог-файлом.
cat выводит весь файл в стандартный вывод. Название происходит от concatenate (конкатенировать) — его исходное назначение — объединять несколько файлов. При одном файле просто выводит его:
cat /etc/hostnamemyserverС несколькими файлами cat выводит их один за другим по порядку:
cat header.txt body.txt footer.txtcat — правильный инструмент для маленьких файлов (несколько сотен строк) и для подачи содержимого файла в конвейер (cat file.txt | grep error). Для больших файлов он выгружает всё сразу, перегружая терминал и потенциально память.
less — пейджер, позволяющий интерактивно прокручивать большой файл. В отличие от cat, less не загружает весь файл; он читает ровно столько, сколько нужно для заполнения экрана, что делает его безопасным для файлов любого размера:
less /var/log/syslogОсновные клавиши управления less:
- Стрелки /
j/k— прокрутка на одну строку вниз или вверх Space/b— прокрутка на страницу вниз или вверх/шаблон— поиск вперёд по шаблону (нажмиnдля следующего совпадения)?шаблон— поиск назадg— перейти в начало файлаG— перейти в конецq— выйти
less — правильный инструмент, когда файл может быть слишком длинным для экрана. При сомнении используй less вместо cat.
head выводит первые N строк файла. По умолчанию — 10 строк; используй -n для изменения:
head /etc/passwd # первые 10 строк
head -n 20 /etc/passwd # первые 20 строк
head -n 1 /etc/hostname # только первая строка — полезно для файлов с одним значениемhead полезен для проверки формата файла перед его обработкой или для быстрого чтения конфига, где важные настройки находятся вверху.
tail выводит последние N строк файла. По умолчанию — 10 строк; тот же флаг -n применим:
tail /var/log/auth.log # последние 10 строк
tail -n 50 /var/log/syslog # последние 50 строкФлаг -f (follow — следить) — это то, как инженеры наблюдают за живыми логами. Он держит файл открытым и выводит новые строки по мере их добавления — терминал обновляется в реальном времени:
tail -f /var/log/nginx/access.logНажми Ctrl-C, чтобы остановить слежение. tail -f — стандартный способ наблюдать за логами работающего сервиса без внешнего средства просмотра логов.
Изучение лога сервера на разных масштабах.
Новое приложение было развёрнуто. Что-то выглядит неправильно. Нужно исследовать /var/log/app/app.log.
# Шаг 1: Проверить размер файла перед его выгрузкой
wc -l /var/log/app/app.log84321 /var/log/app/app.log84 000 строк — cat здесь не подойдёт. Используй less:
less /var/log/app/app.logВнутри less ищи ошибки:
/ERRORНашёл несколько. Теперь получи последние 100 строк, чтобы увидеть, что происходит прямо сейчас:
tail -n 100 /var/log/app/app.logПроблема продолжается. Понаблюдай в режиме реального времени:
tail -f /var/log/app/app.logНовые строки появляются по мере того, как приложение их записывает. Когда видишь повторяющуюся ошибку, нажми Ctrl-C, чтобы остановить слежение и проанализировать вывод.
▸Почему это работает
На macOS cat, head и tail работают идентично. less доступен на macOS, но некоторые старые системы поставляются с more (более старым, простым пейджером). В терминальных эмуляторах macOS ты будешь часто использовать less, и он ведёт себя так же. Для tail -f, macOS также поддерживает tail -F (заглавная F), которая обрабатывает ротацию логов, следя за именем файла, а не файловым дескриптором — полезно, когда логи переключаются в полночь.
▸Частая ошибка
Запуск cat на большом бинарном файле или файле логов не только тратит время — он может заблокировать терминал. Бинарные файлы часто содержат управляющие символы, которые переставляют отображение или даже сбрасывают состояние терминала. Если ты случайно запустил cat на бинарном файле, введи reset для восстановления терминала:
resetЛучше сначала проверить тип файла:
file /some/unknown/file/some/unknown/file: ELF 64-bit LSB executable, x86-64, ...file определяет формат; если там написано ELF, gzip, image или что-то не текстовое — используй просмотрщик в шестнадцатеричном формате или соответствующий инструмент, но не cat.
Файл лога содержит 500 000 строк и активно записывается работающим сервисом. Ты хочешь видеть только самые последние записи по мере их появления. Какая команда правильная?
cat выводит весь файл в stdout — идеально для маленьких файлов и конвейеров, опасно для больших. less — пейджер, позволяющий прокручивать, искать (/) и навигировать по файлу любого размера без риска для памяти; выход по q. head -n N выводит первые N строк; tail -n N — последние N строк. tail -f следит за файлом и выводит новые строки по мере их появления — стандартный инструмент для наблюдения за живыми логами. Подбирай инструмент под размер файла: cat для маленьких, less для неизвестных или больших, head/tail для ограниченных фрагментов.
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.