Команды head и tail в Linux
Кратко: команды head и tail быстро выводят начало и конец текстового файла без его полного открытия. Используйте -n для строк и -c для байтов/символов; комбинируйте через pipe, чтобы выбирать произвольные диапазоны.
Многие задачи в Linux требуют не чтения всего файла, а лишь его начала или конца — например, просмотр логов, быстрый осмотр большой таблицы или получение последних записей журнала. Команды head и tail предназначены именно для этого: head выводит первые строки входного файла, tail — последние.
Что делает команда head
head выводит начальную часть файла (по умолчанию — первые 10 строк). Это полезно, когда файл слишком большой для просмотра целиком или нужно понять структуру данных по началу файла.
Синтаксис команды head
head [option] [file]Чтобы прочитать справку в системе, используйте:
man headПримеры использования head
Для примеров создайте файл numbers.txt с числами от one до twenty по одному слову на строку. Одна строка — одно слово.
- По умолчанию вывод первых 10 строк:
head numbers.txtВывод:
one
two
three
four
five
six
seven
eight
nine
ten- Вывести первые N строк:
head -n 3 numbers.txtВывод:
one
two
three- Исключить последние N строк (отсчитать с конца):
head -n -15 numbers.txtВывод:
one
two
three
four
five- Вывести первые N байтов/символов (опция -c):
head -c 10 numbers.txtВывод (считает байты; при UTF-8 многобайтовые символы могут обрезаться):
one
two
thВажно: опция -c считает байты, а не символы в многобайтовых кодировках. Если файл в UTF-8 и содержит не-ASCII, -c может разрезать символы посередине.
Что делает команда tail
tail выводит конечную часть файла (по умолчанию — последние 10 строк). Часто используется для просмотра последних записей логов и мониторинга обновлений.
Синтаксис команды tail
tail [option] [file]Чтобы узнать подробности, выполните:
man tailПримеры использования tail
- По умолчанию последние 10 строк:
tail numbers.txtВывод:
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty- Вывести последние N строк:
tail -n 4 numbers.txtВывод:
seventeen
eighteen
nineteen
twenty- Начать вывод с конкретной строки N (например, с 17-й):
tail -n +17 numbers.txtВывод (начинает с указанной строки и далее до конца файла):
seventeen
eighteen
nineteen
twenty- Вывести последние N байтов:
tail -c 10 numbers.txtВывод:
en
twentyЗаметьте: как и у head, -c считает байты, а не кодовые точки Unicode.
Работа с несколькими файлами
Обе команды поддерживают несколько входных файлов. Они пронумеруют блоки вывода и добавят заголовки с именами файлов.
head [option] [file1] [file2]
tail [option] [file1] [file2]Это удобно при сравнении или при необходимости просмотреть начало/конец набора файлов.
Комбинирование head и tail
Pipe (|) перенаправляет stdout первой команды в stdin следующей. Частая задача — взять конкретные строки диапазона. Пример: получить 6–8 строки файла.
head -n 8 numbers.txt | tail -n 3Вывод:
six
seven
eightВ этом сценарии head сначала даёт первые 8 строк, а tail берёт из них последние 3.
Полезные сценарии и подсказки
- Быстрый просмотр заголовков CSV/TSV: head -n 5 file.csv
- Мониторинг логов в реальном времени: tail -f /var/log/syslog (флаг -f держит файл «открытым» и печатает добавляемые строки)
- Комбинация с grep/awk/sed для фильтрации и извлечения полей: tail -n 100 /var/log/app.log | grep ERROR | head -n 20
Совет: при обработке бинарных файлов используйте hexdump или strings вместо head/tail, чтобы избежать повреждённого вывода.
Когда команды дают неожиданный результат
- Подсчёт байтов вместо символов: опции -c ориентированы на байты, поэтому в UTF-8 символы длиной >1 байта будут исказены. Для работы с символами используйте инструменты, поддерживающие кодировки, или предварительно перекодируйте файл в ASCII/utf-8 и избегайте -c.
- Буферизация при использовании в скриптах или при чтении из FIFO может давать задержки. Для реального времени используйте tail -f или stdbuf для управления буферизацией.
- Файлы с необычными окончаниями строк (CRLF vs LF) могут выглядеть по-разному; при трансляции между Windows и Unix учитывайте dos2unix.
Альтернативы и сочетания
- sed: печать произвольного диапазона строк: sed -n ‘6,8p’ numbers.txt
- awk: гибкая фильтрация по номеру строки: awk ‘NR>=6 && NR<=8’ numbers.txt
- less/more: интерактивный просмотр больших файлов с возможностью пролистывания
- dd: извлечение байтовых диапазонов, например, dd if=file bs=1 skip=100 count=200 2>/dev/null
Каждый инструмент имеет своё предназначение: head/tail — простые и быстрые; sed/awk — мощные для выборок и преобразований.
Памятка (cheat sheet)
- head file — первые 10 строк
- head -n N file — первые N строк
- head -n -N file — все строки, кроме последних N
- head -c N file — первые N байтов
- tail file — последние 10 строк
- tail -n N file — последние N строк
- tail -n +N file — с N-й строки до конца
- tail -c N file — последние N байтов
- tail -f file — поддерживать вывод новых строк в реальном времени
Критерии приёмки
- Быстрый показ начала/конца файла без открытия в редакторе.
- Управление количеством строк/байтов через -n и -c.
- Корректная работа при комбинировании через pipe и в сценариях мониторинга (-f).
Роль‑ориентированные чек-листы
Для разработчика:
- Используйте head для проверки структуры входных данных (первые 5–10 строк).
- Для отладки логов применяйте tail -n 200 | grep “ERROR”.
Для системного администратора / SRE:
- tail -f /var/log/service.log для мониторинга запуска сервиса.
- При ротации логов проверяйте, что tail -f ссылается на правильный файл (иногда нужен –follow=name).
Для аналитика данных:
- head -n 1 file.csv — посмотреть заголовки столбцов.
- head -n 100 | awk -F”,” ‘{print $3}’ — быстро проверить значения в колонке.
Ментальные модели и варианты применения
- Модель «окна»: head даёт левый край файла, tail — правый. Pipe позволяет сдвигать окно выборки внутрь файла.
- «Проверочный фильтр»: сначала head/tail сокращают поток данных, затем grep/sed/awk выполняют фильтрацию внутри уменьшенного набора.
Тонкие места и совместимость
- Кодировка: учитывайте UTF-8; опция -c оперирует байтами. Для корректного считывания символов используйте инструменты с поддержкой Unicode.
- Поведение в разных Unix-произведениях обычно одинаково, но флаги и реализация могут незначительно отличаться в очень старых системах.
- tail –follow=name полезен при ротации логов: он продолжит следить за новым файлом с тем же именем.
Однострочные шаблоны (snippets)
- Показать последние 500 строк:
tail -n 500 /var/log/syslog- Показать последние 100 строк и фильтровать по ERROR:
tail -n 100 /var/log/app.log | grep ERROR- Показать строки с 100 по 200:
head -n 200 file | tail -n 101- Следить за логом и показывать только новые строки с ERROR:
tail -f /var/log/app.log | grep --line-buffered ERRORСводка и рекомендации
Команды head и tail — простые, но крайне полезные инструменты для оперативного просмотра файлов. Они экономят время и ресурсы при работе с большими файлами и отлично сочетаются с другими утилитами командной строки. Помните о различиях между байтами и символами, а также используйте более мощные инструменты (sed, awk, dd) при необходимости точных выборок или преобразований.
Краткий глоссарий
- -n — количество строк; если перед числом стоит +, вывод начинается с этой строки.
- -c — количество байтов.
- -f — следить за добавлением новых строк (follow).
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone