При работе с серверами Linux администраторам постоянно приходится просматривать файлы — особенно логи, конфигурационные файлы и текстовые документы. Но что делать, если файл содержит тысячи или миллионы строк? Открывать его полностью не имеет смысла. Именно для таких задач существуют команды head и tail.
В этой статье разберем, как эффективно работать с этими командами, рассмотрим реальные сценарии использования и покажем полезные примеры для повседневной работы.
head — команда для просмотра начала файла (первых строк).
tail — команда для просмотра конца файла (последних строк).
Эти утилиты входят в стандартный набор GNU coreutils и доступны во всех дистрибутивах Linux по умолчанию.
Типичные сценарии использования:
tail).tail -f).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) скрывает имена файлов.
Проверка формата 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 [опции] файл.
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 — это режим 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) полезна, когда файл может быть ротирован или пересоздан. Команда продолжит следить даже после ротации логов.
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
Очень мощная техника — комбинировать обе команды через pipe (|).
Получить строки с 20 по 30:
head -n 30 file.txt | tail -n 10
head -n 30 — берет первые 30 строк.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
Показать последние строки с ошибками:
tail -1000 /var/log/syslog | grep -i error
Мониторинг логов с фильтрацией:
tail -f /var/log/nginx/access.log | grep "POST"
Показать только IP-адреса из логов:
tail -100 /var/log/nginx/access.log | awk '{print $1}'
Подсчитать количество ошибок в последних 1000 строках:
tail -1000 /var/log/application.log | grep ERROR | wc -l
Просмотр последних строк с возможностью прокрутки:
tail -1000 /var/log/syslog | less
|
Опция |
Описание |
Пример |
|
-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 |
|
Опция |
Описание |
Пример |
|
-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 |
Смотрим последние 100 строк перед ошибкой:
tail -100 /var/log/myapp/application.log
Если нужно больше контекста:
tail -500 /var/log/myapp/application.log | grep -A 10 -B 10 "FATAL"
Следим за логами во время развертывания:
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
Берем последние 10000 запросов и анализируем:
tail -10000 /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1-2 | sort | uniq -c | sort -rn | head -20
Следим за файлом даже при ротации:
tail -F /var/log/application.log
Извлекаем последние 1000 записей из лога для анализа:
tail -1000 /var/log/syslog > /tmp/last_1000_syslog.txt
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 когда:
с -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!