head
Вывод первых строк (или байт) файла
Описание
head — утилита для вывода начала файла. По умолчанию выводит первые 10 строк. Это одна из фундаментальных Unix-утилит, входящая в GNU coreutils. Команда незаменима, когда нужно быстро «заглянуть» в начало файла, не открывая его целиком: проверить формат CSV, убедиться в правильной кодировке, посмотреть заголовок лога или первые записи данных.
head особенно эффективна при работе с очень большими файлами, где открытие через cat или less нежелательно. Например, можно быстро проверить заголовок таблицы данных объёмом несколько гигабайт. Команда читает ровно столько данных из файла, сколько необходимо, и сразу завершает работу.
Парная команда — tail, которая выводит конец файла. Вместе head и tail покрывают большинство сценариев «взглянуть на краевые строки файла». При использовании в конвейерах head ограничивает вывод предыдущих команд заданным количеством строк.
Синтаксис
Компоненты команды:
- head — имя команды
- [ОПЦИИ] — флаги для указания количества строк или байт
- [ФАЙЛ]... — один или несколько файлов; без указания файла — читает из
stdin
Краткий синтаксис: head -N ФАЙЛ, где N — количество строк (устаревший, но широко поддерживаемый вариант).
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-n N |
Вывести первые N строк файла. По умолчанию N=10. Если N отрицательное (-n -K), выводит все строки кроме последних K. |
head -n 20 log.txt |
-c N |
Вывести первые N байт. Поддерживает суффиксы: K (килобайты), M (мегабайты), G (гигабайты). Отрицательное значение — все байты кроме последних N. |
head -c 512 binary.dathead -c 1K file.txt |
-q |
Тихий режим (quiet): не выводить заголовки с именами файлов при обработке нескольких файлов. | head -q -n 5 *.log |
-v |
Подробный режим (verbose): всегда выводить заголовок с именем файла, даже если файл один. | head -v file.txt |
-z |
Использовать нулевой байт (\0) как разделитель строк вместо символа новой строки. Полезно для обработки файлов с именами, содержащими пробелы. |
head -z -n 5 file.txt |
--lines=N |
Длинная форма флага -n. Более читабельна в скриптах. |
head --lines=50 file.txt |
--bytes=N |
Длинная форма флага -c. |
head --bytes=1024 file.bin |
--help |
Вывести справку и выйти. | head --help |
--version |
Вывести информацию о версии. | head --version |
Паттерны использования
Проверка заголовка CSV-файла
Быстро посмотреть структуру большого файла данных:
# Заголовок + первые 5 строк данных head -n 6 data.csv # Только заголовок (первая строка) head -n 1 data.csv # Пример вывода: # id,name,email,created_at # 1,Alice,alice@example.com,2024-01-01 # 2,Bob,bob@example.com,2024-01-02
Ограничение вывода в конвейере
Взять только первые N результатов из вывода другой команды:
# Топ-10 самых больших файлов du -sh * | sort -rh | head -n 10 # Первые 5 процессов по потреблению CPU ps aux --sort=-%cpu | head -n 6 # Первые 3 строки с ошибками grep ERROR /var/log/app.log | head -n 3
Просмотр нескольких файлов
Одновременный просмотр начала нескольких файлов с заголовками:
# Посмотреть начало всех .log-файлов head -n 3 /var/log/*.log # Вывод: # ==> /var/log/auth.log <== # Jan 1 00:00:01 host sshd ... # # ==> /var/log/syslog <== # Jan 1 00:00:01 host kernel ...
Все строки кроме последних N
Нестандартное применение: отрицательное значение убирает N строк с конца:
# Файл без последних 3 строк # (удалить итоговую строку CSV) head -n -3 report.csv > report_no_total.csv # Убрать последнюю строку лога # (неполная запись при обрыве) head -n -1 partial.log > clean.log
Проверка бинарного формата
Просмотр первых байт файла для определения его типа (magic bytes):
# Первые 4 байта (magic number) head -c 4 image.png | xxd # 00000000: 8950 4e47 .PNG head -c 4 archive.zip | xxd # 00000000: 504b 0304 PK.. head -c 512 file.bin | xxd | head -20
Скрипт: обработка строк файла
Использование в скриптах для обработки только части файла:
#!/bin/bash # Получить первый элемент из списка задач NEXT_TASK=$(head -n 1 tasks.txt) echo "Следующая задача: $NEXT_TASK" # Удалить задачу из списка после выполнения tail -n +2 tasks.txt > tasks_tmp.txt mv tasks_tmp.txt tasks.txt
Советы и предупреждения
Комбинация
head и tail позволяет извлечь произвольный диапазон строк. Например, строки с 21 по 30: head -n 30 file.txt | tail -n 10. Или используйте sed -n '21,30p' file.txt — более читаемо.
Для создания файла заданного размера при тестировании:
head -c 1M /dev/urandom > test_1mb.bin — создаст файл из 1 мегабайта случайных данных. Удобно для тестирования загрузки файлов или скорости работы с файлами.
head -n 1 file.csv выводит только строку заголовков — по ней можно быстро определить разделитель (запятая, точка с запятой, табуляция) и набор колонок, не открывая весь файл.
Синтаксис
head -n -K (отрицательное значение) — расширение GNU и не работает на macOS и BSD-системах. На macOS используйте: head -n $(( $(wc -l < file.txt) - K )) file.txt или установите GNU coreutils через Homebrew.