linux view-edit

head

Вывод первых строк (или байт) файла

Описание

head — утилита для вывода начала файла. По умолчанию выводит первые 10 строк. Это одна из фундаментальных Unix-утилит, входящая в GNU coreutils. Команда незаменима, когда нужно быстро «заглянуть» в начало файла, не открывая его целиком: проверить формат CSV, убедиться в правильной кодировке, посмотреть заголовок лога или первые записи данных.

head особенно эффективна при работе с очень большими файлами, где открытие через cat или less нежелательно. Например, можно быстро проверить заголовок таблицы данных объёмом несколько гигабайт. Команда читает ровно столько данных из файла, сколько необходимо, и сразу завершает работу.

Парная команда — tail, которая выводит конец файла. Вместе head и tail покрывают большинство сценариев «взглянуть на краевые строки файла». При использовании в конвейерах head ограничивает вывод предыдущих команд заданным количеством строк.

Синтаксис

head [ОПЦИИ] [ФАЙЛ]...

Компоненты команды:

Краткий синтаксис: head -N ФАЙЛ, где N — количество строк (устаревший, но широко поддерживаемый вариант).

# По умолчанию — первые 10 строк head file.txt # Первые 5 строк head -n 5 file.txt head -5 file.txt # краткая форма # Первые 100 байт head -c 100 file.txt # Несколько файлов (выводятся с заголовками) head -n 3 file1.txt file2.txt # Всё кроме последних N строк head -n -5 file.txt # все строки, кроме последних 5

Флаги и опции

Флаг Описание Пример
-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.dat
head -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 для «среза» файла
Комбинация head и tail позволяет извлечь произвольный диапазон строк. Например, строки с 21 по 30: head -n 30 file.txt | tail -n 10. Или используйте sed -n '21,30p' file.txt — более читаемо.
Совет: head -c для создания тестовых данных
Для создания файла заданного размера при тестировании: head -c 1M /dev/urandom > test_1mb.bin — создаст файл из 1 мегабайта случайных данных. Удобно для тестирования загрузки файлов или скорости работы с файлами.
Совет: быстрое определение разделителя CSV
head -n 1 file.csv выводит только строку заголовков — по ней можно быстро определить разделитель (запятая, точка с запятой, табуляция) и набор колонок, не открывая весь файл.
Предупреждение: head -n -N требует GNU coreutils
Синтаксис head -n -K (отрицательное значение) — расширение GNU и не работает на macOS и BSD-системах. На macOS используйте: head -n $(( $(wc -l < file.txt) - K )) file.txt или установите GNU coreutils через Homebrew.