Способы оплаты Abuse

Команда tail и head в Linux: просмотр начала и конца файлов

07.11.2025, 20:25
Содержание:

При работе с серверами Linux администраторам постоянно приходится просматривать файлы — особенно логи, конфигурационные файлы и текстовые документы. Но что делать, если файл содержит тысячи или миллионы строк? Открывать его полностью не имеет смысла. Именно для таких задач существуют команды head и tail.

В этой статье разберем, как эффективно работать с этими командами, рассмотрим реальные сценарии использования и покажем полезные примеры для повседневной работы.

Что такое head и tail?

head — команда для просмотра начала файла (первых строк).

tail — команда для просмотра конца файла (последних строк).

Эти утилиты входят в стандартный набор GNU coreutils и доступны во всех дистрибутивах Linux по умолчанию.

Зачем они нужны?

Типичные сценарии использования:

  • Просмотр последних записей в логах (tail).
  • Мониторинг логов в реальном времени (tail -f).
  • Быстрая проверка формата файла (head).
  • Извлечение первых N строк из большого файла.
  • Отладка приложений через логи.
  • Анализ структуры больших CSV/текстовых файлов.

Команда head: просмотр начала файла

Базовый синтаксис

head [опции] файл

Основные примеры использования

1. Просмотр первых 10 строк (по умолчанию):

head /var/log/syslog

По умолчанию head выводит первые 10 строк файла.

2. Указать количество строк:

head -n 20 /var/log/syslog

Или короткая запись:

head -20 /var/log/syslog

Выведет первые 20 строк.

3. Просмотр первых N байт:

head -c 100 /etc/passwd

Выведет первые 100 байт файла (полезно для бинарных файлов).

4. Просмотр нескольких файлов

head -n 5 /var/log/syslog /var/log/auth.log

При просмотре нескольких файлов head добавляет заголовок с именем файла.

5. Убрать заголовки при работе с несколькими файлами

head -q -n 5 /var/log/*.log

Опция -q (quiet) скрывает имена файлов.

Практические примеры с head

Проверка формата CSV-файла:

head -n 3 data.csv

Быстро посмотрите первые строки, чтобы понять структуру данных.

Извлечение заголовков из большого файла:

head -n 1 large_data.csv > headers.txt

Быстрый просмотр конфигурационного файла:

head -20 /etc/nginx/nginx.conf

Проверка кодировки файла:

head -c 50 file.txt | hexdump -C

Команда tail: просмотр конца файла

Базовый синтаксис

tail [опции] файл.

Основные примеры использования

1. Просмотр последних 10 строк (по умолчанию):

tail /var/log/syslog

2. Указать количество строк:

tail -n 50 /var/log/apache2/error.log

Или короткая форма:

tail -50 /var/log/apache2/error.log

3. Просмотр с определённой строки до конца:

tail -n +100 file.txt

Показывает файл начиная со строки 100 и до конца.

4. Просмотр последних N байт:

tail -c 200 /var/log/syslog

Мониторинг в реальном времени: tail -f

Самая полезная функция tail — это режим follow (следовать за файлом).

Базовое использование:

tail -f /var/log/syslog

Команда будет непрерывно выводить новые строки по мере их добавления в файл. Нажмите Ctrl+C для выхода.

Начать с последних N строк и продолжить следить:

tail -n 20 -f /var/log/nginx/access.log

Показывает последние 20 строк, затем продолжает выводить новые.

Следить за несколькими файлами одновременно:

tail -f /var/log/syslog /var/log/auth.log

Следить за файлом даже при его пересоздании:

tail -F /var/log/application.log

Опция -F (или --follow=name) полезна, когда файл может быть ротирован или пересоздан. Команда продолжит следить даже после ротации логов.

Практические кейсы использования tail

1. Мониторинг ошибок веб-сервера

tail -f /var/log/nginx/error.log

Идеально для отладки проблем с веб-сервером в реальном времени.

2. Отслеживание запросов Apache:

tail -f /var/log/apache2/access.log | grep "404"

Фильтрация и показ только ошибок 404 в реальном времени.

3. Мониторинг логов приложения:

tail -f /var/log/myapp/app.log | grep ERROR

4. Следить за логами Docker-контейнера:

docker logs -f container_name

(Внутри Docker logs использует аналогичный механизм).

5. Показать последние системные события:

tail -100 /var/log/syslog

6. Извлечение последних строк из большого файла:

tail -1000 huge_log.log > last_1000_lines.txt

Комбинирование head и tail

Очень мощная техника — комбинировать обе команды через pipe (|).

Получить строки с 20 по 30:

head -n 30 file.txt | tail -n 10
  1. head -n 30 — берет первые 30 строк.
  2. tail -n 10 — из них берет последние 10.

Итого: строки с 21 по 30.

Получить строки с 100 по 110:

head -n 110 large_file.txt | tail -n 10

Пропустить первые 50 строк и взять следующие 20:

tail -n +51 file.txt | head -n 20

Полезные комбинации с другими командами

Комбинация с grep

Показать последние строки с ошибками:

tail -1000 /var/log/syslog | grep -i error

Мониторинг логов с фильтрацией:

tail -f /var/log/nginx/access.log | grep "POST"

Комбинация с awk

Показать только IP-адреса из логов:

tail -100 /var/log/nginx/access.log | awk '{print $1}'

Комбинация с wc

Подсчитать количество ошибок в последних 1000 строках:

tail -1000 /var/log/application.log | grep ERROR | wc -l

Комбинация с less

Просмотр последних строк с возможностью прокрутки:

tail -1000 /var/log/syslog | less

Полезные опции и флаги

Для head

Опция

Описание

Пример

-n N

Показать первые N строк

head -n 20 file.txt

-c N

Показать первые N байт

head -c 100 file.txt

-q

Не показывать имена файлов

head -q file1 file2

-v

Всегда показывать имена файлов

head -v file.txt

Для tail

Опция

Описание

Пример

-n N

Показать последние N строк

tail -n 50 file.txt

-n +N

Показать с N-ой строки до конца

tail -n +100 file.txt

-c N

Показать последние N байт

tail -c 500 file.txt

-f

Следить за файлом

tail -f /var/log/syslog

-F

Следить даже при ротации

tail -F /var/log/app.log

-q

Не показывать имена файлов

tail -q *.log

--pid=PID

Прекратить после завершения процесса

tail -f --pid=1234 app.log

-s N

Интервал проверки в секундах (по умолчанию 1)

tail -f -s 5 file.log

Реальные сценарии из практики

Сценарий 1: Отладка падения приложения

Смотрим последние 100 строк перед ошибкой:

tail -100 /var/log/myapp/application.log

Если нужно больше контекста:

tail -500 /var/log/myapp/application.log | grep -A 10 -B 10 "FATAL"

Сценарий 2: Мониторинг деплоя

Следим за логами во время развертывания:

tail -f /var/log/nginx/access.log /var/log/nginx/error.log

Сценарий 3: Анализ пиковой нагрузки

Берем последние 10000 запросов и анализируем:

tail -10000 /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1-2 | sort | uniq -c | sort -rn | head -20

Сценарий 4: Проверка ротации логов

Следим за файлом даже при ротации:

tail -F /var/log/application.log

Сценарий 5: Экспорт данных

Извлекаем последние 1000 записей из лога для анализа:

tail -1000 /var/log/syslog > /tmp/last_1000_syslog.txt

Типичные ошибки и их решения

Ошибка: "Permission denied"

tail: cannot open '/var/log/syslog' for reading: Permission denied

Решение: Используйте sudo

sudo tail /var/log/syslog

Проблема: tail -f не показывает новые строки.

Причины:

  • Приложение буферизует вывод.
  • Файл не изменяется.
  • Неправильный путь к файлу.

Решение: Убедитесь, что файл действительно обновляется.

Проверить время последнего изменения:

ls -lh /var/log/syslog

Или

stat /var/log/syslog

Проблема: tail -f перестает работать после ротации логов

Решение: Используйте -F вместо -f

tail -F /var/log/application.log

Производительность и оптимизация

Для больших файлов

Если файл очень большой (гигабайты), команды head и tail работают эффективно:

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

Альтернативы для экстремально больших файлов

Для файлов размером сотни гигабайт рассмотрите:

sed для извлечения конкретных строк:

sed -n '1000,2000p' huge_file.txt

split для разбиения файла на части:

split -l 1000000 huge_file.txt part_

Чек-лист: Когда использовать head, а когда tail

Используйте head когда:

  • Нужно проверить структуру файла.
  • Проверить заголовки CSV.
  • Быстро просмотреть начало конфигурационного файла.
  • Извлечь первые N строк для обработки.

Используйте tail когда:

  • Нужны последние записи в логах.
  • Отладка текущих проблем.
  • Мониторинг логов в реальном времени (с -f).
  • Анализ недавних событий.

Заключение

Команды head и tail — это базовые, но невероятно мощные инструменты для работы с файлами в Linux. Особенно полезны они при работе с логами и большими текстовыми файлами.

Ключевые моменты:

  • head — для начала файла, tail — для конца.
  • tail -f — must-have для мониторинга логов.
  • tail -F — для логов с ротацией.
  • Комбинируйте с grep, awk, sed для мощной обработки.

Освоив эти команды, вы значительно ускорите работу с серверами и упростите отладку приложений.

Дополнительные материалы

Документация:

man head — полная документация по head

man tail — полная документация по tail

Похожие команды:

  • less — постраничный просмотр файлов.
  • more — упрощенный просмотр.
  • cat — полный вывод файла.
  • grep — поиск по содержимому.

Полезные связки:

Комплексный мониторинг:

tail -f /var/log/nginx/*.log | grep --line-buffered "ERROR"

Статистика по времени:

tail -10000 /var/log/syslog | awk '{print $1, $2, $3}' | uniq -c

Теперь вы готовы эффективно работать с файлами в Linux!