Как пользоваться командами head и tail в Linux

Команды head и tail позволяют быстро показать только интересующую часть файла — первые или последние строки/символы — вместо того чтобы открывать файл целиком. Это экономит время и ресурсы при работе с большими логами, CSV, дампами и любыми текстовыми данными.
Что делает head
Команда head читает файл с начала и по умолчанию выводит первые 10 строк. Это удобно для быстрой проверки содержимого: заголовков CSV-файла, первых ошибок в логе, структуры конфигурации.
Синтаксис head
head [опции] [файл]Для подробностей можно открыть man-страницу:
man headПримеры использования head
Создадим файл numbers.txt со словами для чисел от one до twenty (по примеру). По умолчанию:
head numbers.txtВыведет первые 10 строк:
one
two
three
four
five
six
seven
eight
nine
tenЧтобы вывести ровно N строк, используйте -n:
head -n 3 numbers.txtРезультат:
one
two
threeЧтобы исключить последние N строк, передайте отрицательное значение:
head -n -15 numbers.txtРезультат (первые 5 строк):
one
two
three
four
fiveОпция -c печатает первые N байтов/символов:
head -c 10 numbers.txtРезультат может выглядеть так (первые 10 символов файла):
one
two
thЗамечание: поведение -c зависит от локали и кодировки — в UTF-8 один символ может занимать несколько байтов, поэтому при работе с многобайтовыми кодировками считайте по байтам или используйте инструменты, ориентированные на символы.
Что делает tail
Команда tail читает файл с конца и по умолчанию выводит последние 10 строк. Это основная команда для оперативного анализа логов, мониторинга и проверки последних записей.
Синтаксис tail
tail [опции] [файл]Для справки:
man tailПримеры использования tail
По умолчанию:
tail numbers.txtВыведет последние 10 строк (для примера с числами):
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Опция -c выводит последние N байтов/символов:
tail -c 10 numbers.txtРезультат:
en
twentyОпять же, учитывайте кодировку при указании байтов.
Одновременная работа с несколькими файлами
head и tail поддерживают несколько файлов в аргументах. При этом команды печатают заголовки (имена файлов) перед содержимым, чтобы различать вывод.
head -n 5 file1.txt file2.txt
tail -n 3 file1.log file2.logЕсли нужен только чистый поток без названий, перенаправьте вывод через sed/awk или используйте cat + пайпинг.
Комбинация head и tail через пайп
Самый простой способ получить произвольный диапазон строк — взять первые K строк с помощью head, затем отрезать последние M из них через tail. Например, чтобы получить 6–8 строки:
head -n 8 numbers.txt | tail -n 3Результат:
six
seven
eightЭто работает эффективно и читабельно для небольших диапазонов.
Частые сценарии и приемы
- Просмотр заголовков CSV: head -n 1 file.csv
- Быстрая проверка формата файла: head -c 200 file
- Мониторинг логов в реальном времени: tail -f /var/log/syslog (или –follow)
- Комбинация с grep: tail -n 200 access.log | grep “ERROR” | head -n 20
Важно: tail -f держит терминал открытым и показывает добавляемые строки — удобно для мониторинга.
Альтернативы и когда head/tail не подходят
- sed/awk: для извлечения диапазона строк по номерам, шаблонам и более сложной логики используйте sed/awk. Например, sed -n ‘6,8p’ file.txt выведет 6–8 строки напрямую.
- grep: фильтрация по регулярным выражениям.
- cut: извлечение полей в строках по разделителю.
Пример: sed быстрее и чище для несмежных диапазонов или когда нужен один шаг без пайпов:
sed -n '6,8p' numbers.txtПамятка (cheat sheet)
- head -n N file — первые N строк
- head -n -N file — все строки, кроме последних N
- head -c N file — первые N байтов
- tail -n N file — последние N строк
- tail -n +N file — начиная с N-й строки до конца
- tail -c N file — последние N байтов
- tail -f file — следить за добавлением новых строк
- head file1 file2 — покажет заголовки для каждого файла
Ментальные модели и правила выбора
- Если нужно «сверху» — head; «снизу» — tail.
- Для диапазона строк предпочитайте комбинацию head|tail, если диапазон маленький, и sed/awk, если нужно одно решение.
- Для символьных манипуляций помните про кодировку (UTF-8 vs ASCII): -c считает байты, не символы.
Матричный сравнительный краткий обзор
- Простота: head/tail > sed/awk
- Гибкость: sed/awk > head/tail
- Читаемость: head|tail пайпы проще для быстрого понимания
- Производительность: для больших файлов sed/awk может быть эффективнее, поскольку один инструмент делает всю работу.
Проверка корректности и тест-кейсы
- Тест: файл с 5 строками, выполнить head (без опций) — ожидается вывод всех 5 строк.
- Тест: head -n -2 для файла из 4 строк — ожидается вывод первых 2 строк.
- Тест: tail -n +3 для файла из 6 строк — ожидается строки с 3-й по 6-ю.
- Тест: head -c 10 на UTF-8 файле с многобайтовыми символами — проверить, что вывод совпадает с первыми 10 байтами, а не 10 символами.
Критерии приёмки: команды должны обращаться к указанному файлу; поведение -n и -c соответствует man-странице; пайпинг возвращает ожидаемый диапазон строк.
Роли и быстрые чек-листы
- Разработчик:
- Используйте head для проверки структуры файлов и первых строк.
- При отладке логов комбинируйте tail -n и grep.
- Системный администратор:
- tail -f для мониторинга процессов и служб.
- При работе с большими логами применяйте tail -n 1000 | grep “ERROR”.
- Аналитик данных:
- head -n 1 для получения заголовков CSV.
- head -n 100 для предварительного просмотра и проверки типов столбцов.
Безопасность и приватность
При работе с файлами логов и конфигурациями следите за тем, чтобы вывод не содержал чувствительной информации. Не перенаправляйте вывод в общедоступные места без фильтрации и маскировки секретов.
Советы по производительности
- Для очень больших файлов используйте tail -n N вместо чтения всего файла через cat и последующей фильтрации.
- Комбинация head|tail читает только необходимую часть файла — это экономит время на сетевых и медленных дисках.
Примеры реальных команд и сценариев
- Получить последние 50 строк error.log и искать ключевое слово:
tail -n 50 /var/log/error.log | grep "CRITICAL"- Показать 2–4 строки файла:
head -n 4 file.txt | tail -n 3- Слежение за логом и фильтрация по регулярному выражению в реальном времени:
tail -f /var/log/service.log | grep --line-buffered "timeout"Когда использовать другие инструменты
- sed/awk — если нужны преобразования, подсчёты, сложная фильтрация.
- perl/python — если требуется сложная логика обработки или интеграция с API.
Маленькая методика: как выбрать инструмент для задачи
- Нужен ли только просмотр — head/tail.
- Нужен ли диапазон строк — head|tail или sed.
- Нужна ли фильтрация/парсинг — grep/sed/awk.
- Нужно ли масштабирование/скрипты — использовать awk/python.
Заключение
Head и tail — базовые, но часто незаменимые инструменты при работе с текстовыми файлами в Linux. Они просты в использовании, быстро дают доступ к нужной части файла и хорошо сочетаются с другими утилитами. Для сложных задач переходите на sed, awk или скрипты на Python, но сначала проверьте, не решит ли задачу короткая комбинация head/tail.
Важно: учитывайте кодировку при работе с опцией -c и следите за тем, чтобы вывод не раскрывал конфиденциальную информацию.
Факто-бокс:
- По умолчанию обе команды показывают 10 строк.
- Опции: -n (строки), -c (байты).
- tail поддерживает –follow (tail -f) для мониторинга в реальном времени.
Короткая памятка: head — сверху, tail — снизу, sed/awk — для сложной обработки.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента