open atlas
↑ К треку
Командная строка CLI · 02 · 03

Чтение файлов

cat выгружает весь файл в stdout — для маленьких файлов и конвейеров. less — пейджер для больших файлов: прокрутка, поиск /, выход q. head и tail выводят первые или последние N строк; tail -f следит за живым логом.

CLI Основы ◷ 18 min
Уровень
ОсновыJuniorMiddleSenior

Каждый конфигурационный файл, лог, скрипт и файл данных на сервере — это текстовый файл. Умение быстро читать их — будь то проверка значения конфига, просмотр 200 МБ лога или наблюдение за ошибками в реальном времени — навык, который ты будешь использовать каждый день. Четыре команды охватывают весь диапазон: cat для маленьких файлов и конвейеров, less для больших, head и tail для краёв и живых потоков.

К концу урока ты будешь знать, какой инструмент выбрать в каждой ситуации и почему выгружать 200 МБ лога через cat — не лучшая идея.

Цель

После этого урока ты сможешь использовать cat для вывода содержимого файла и конкатенации файлов, less для интерактивного просмотра большого файла без загрузки его целиком в память, head -n N для просмотра первых N строк, а также tail -n N и tail -f для просмотра последних N строк или слежения за живым лог-файлом.

1

cat выводит весь файл в стандартный вывод. Название происходит от concatenate (конкатенировать) — его исходное назначение — объединять несколько файлов. При одном файле просто выводит его:

cat /etc/hostname
myserver

С несколькими файлами cat выводит их один за другим по порядку:

cat header.txt body.txt footer.txt

cat — правильный инструмент для маленьких файлов (несколько сотен строк) и для подачи содержимого файла в конвейер (cat file.txt | grep error). Для больших файлов он выгружает всё сразу, перегружая терминал и потенциально память.

2

less — пейджер, позволяющий интерактивно прокручивать большой файл. В отличие от cat, less не загружает весь файл; он читает ровно столько, сколько нужно для заполнения экрана, что делает его безопасным для файлов любого размера:

less /var/log/syslog

Основные клавиши управления less:

  • Стрелки / j / k — прокрутка на одну строку вниз или вверх
  • Space / b — прокрутка на страницу вниз или вверх
  • /шаблон — поиск вперёд по шаблону (нажми n для следующего совпадения)
  • ?шаблон — поиск назад
  • g — перейти в начало файла
  • G — перейти в конец
  • q — выйти

less — правильный инструмент, когда файл может быть слишком длинным для экрана. При сомнении используй less вместо cat.

3

head выводит первые N строк файла. По умолчанию — 10 строк; используй -n для изменения:

head /etc/passwd          # первые 10 строк
head -n 20 /etc/passwd    # первые 20 строк
head -n 1 /etc/hostname   # только первая строка — полезно для файлов с одним значением

head полезен для проверки формата файла перед его обработкой или для быстрого чтения конфига, где важные настройки находятся вверху.

4

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.log
84321 /var/log/app/app.log

84 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-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 5 завершено

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources4
expand
  1. 01
  2. 02
  3. 03
  4. 04

Trademarks belong to their respective owners. Editorial reference only.