Команда Linux tail отображает данные с конца файла. Он даже может отображать обновления, добавленные к файлу, в режиме реального времени. Мы покажем вам, как его использовать.
Оглавление
Убил ли systemd хвост?
Команда tail показывает вам данные с конца файла. Обычно новые данные добавляются в конец файла, поэтому команда tail — это быстрый и простой способ увидеть самые последние добавления к файлу. Он также может отслеживать файл и отображать каждую новую текстовую запись в этом файле по мере их появления. Это делает его отличным инструментом для мониторинга файлов журналов.
Многие современные дистрибутивы Linux приняли систему systemd и диспетчер служб. Это первый выполненный процесс, он ID процесса 1, и он является родительским для всех других процессов. Раньше эта роль была обрабатывается старшим система инициализации.
Вместе с этим изменением появился новый формат файлов системного журнала. Больше не создаются в виде обычного текста, в systemd они записываются в двоичном формате. Чтобы прочтите эти файлы журнала, вы должны использовать Утилита journactl. Команда tail работает с текстовыми форматами. Он не читает двоичные файлы. Значит ли это, что команда tail — это решение в поисках проблемы? Есть ли еще что-нибудь предложить?
Команда tail — это больше, чем просто отображение обновлений в реальном времени. И в этом отношении по-прежнему существует множество файлов журнала, которые не генерируются системой и по-прежнему создаются как простые текстовые файлы. Например, файлы журнала, созданные приложениями, не изменили свой формат.
Использование хвоста
Передайте имя файла в tail, и он покажет вам последние десять строк из этого файла. Используемые нами файлы примеров содержат списки отсортированных слов. Каждая строка пронумерована, поэтому будет легко следовать примерам и видеть, какой эффект оказывают различные параметры.
tail word-list.txt
Чтобы увидеть другое количество строк, используйте параметр -n (количество строк):
tail -n 15 word-list.txt
Фактически, вы можете обойтись без «-n» и просто использовать дефис «-» и число. Убедитесь, что между ними нет пробелов. Технически, это устаревшая форма команды, но он все еще в страница руководства, и он все еще работает.
tail -12 word-list.txt
Использование хвоста с несколькими файлами
Вы можете работать с несколькими файлами одновременно. Просто передайте имена файлов в командной строке:
tail -n 4 list-1.txt list-2.txt list-3.txt
Для каждого файла отображается небольшой заголовок, чтобы вы знали, к какому файлу принадлежат строки.
Отображение строк с начала файла
Модификатор + (отсчет с начала) заставляет концевые строки отображать от начала файла, начиная с определенного номера строки. Если ваш файл очень длинный и вы выбираете строку, близкую к его началу, вы получите много вывода, отправленного в окно терминала. В этом случае имеет смысл направить вывод от tail в less.
tail +440 list-1.txt
Вы можете листать текст контролируемым образом.
Поскольку в этом файле 20 445 строк, эта команда эквивалентна использованию опции «-6»:
tail +20440 list-1.txt
Использование байтов с хвостом
Вы можете указать tail использовать смещения в байтах вместо строк, используя параметр -c (bytes). Это может быть полезно, если у вас есть текстовый файл, отформатированный в записи обычного размера. Обратите внимание, что символ новой строки считается одним байтом. Эта команда отобразит последние 93 байта в файле:
tail -c 93 list-2.txt
Вы можете комбинировать опцию -c (байты) с модификатором + (отсчет от начала файла) и указать смещение в байтах, отсчитываемое от начала файла:
tail -c +351053 list-e.txt
Трубка в хвост
Раньше мы делали вывод из хвоста на less. Мы также можем передать вывод других команд в tail.
Чтобы определить пять файлов или папок с самым старым временем модификации, используйте опцию -t (сортировать по времени модификации) с ls и направьте вывод в tail.
ls -tl | tail -5
Головная команда перечисляет строки текста с начала файла. Мы можем объединить это с хвостом, чтобы извлечь раздел файла. Здесь мы используем команду head для извлечения первых 200 строк из файла. Это передается в хвост, который извлекает последние десять строк. Это дает нам строки с 191 по 200. То есть последние десять строк из первых 200 строк:
head -n 200 list-1.txt | tail -10
Эта команда перечисляет пять процессов, наиболее требовательных к памяти.
ps aux | sort -nk +4 | tail -5
Давайте разберемся с этим.
Команда ps отображает информацию о запущенных процессах. Используются следующие параметры:
a: Список всех процессов, а не только для текущего пользователя.
u: отображение ориентированного на пользователя вывода.
x: список всех процессов, включая те, которые не выполняются в TTY.
Команда сортировки сортирует вывод из пс. Параметры, которые мы используем с сортировкой:
n: числовая сортировка.
k +4: сортировка по четвертому столбцу.
Команда tail -5 отображает последние пять процессов из отсортированного вывода. Это пять процессов, наиболее требовательных к памяти.
Использование tail для отслеживания файлов в реальном времени
Отслеживать новые текстовые записи, поступающие в файл — обычно файл журнала — легко с помощью tail. Передайте имя файла в командной строке и используйте параметр -f (следовать).
tail -f geek-1.log
По мере добавления каждой новой записи журнала в файл журнала, tail обновляет свое отображение в окне терминала.
Вы можете уточнить вывод, включив только строки, представляющие особую актуальность или интерес. Здесь мы используем grep для показывать только строки, содержащие слово «средний»:
tail -f geek-1.log | grep average
Чтобы отслеживать изменения в двух или более файлах, передайте имена файлов в командной строке:
tail -f -n 5 geek-1.log geek-2.log
Каждая запись помечена заголовком, который показывает, из какого файла взят текст.
Дисплей обновляется каждый раз, когда появляется новая запись в файле, за которым следуют. Чтобы указать период обновления, используйте параметр -s (период ожидания). Это говорит tail подождать несколько секунд, в данном примере пять, между проверками файлов.
tail -f -s 5 geek-1.log
По общему признанию, вы не можете сказать, глядя на снимок экрана, но обновления файла происходят каждые две секунды. Новые записи файлов отображаются в окне терминала каждые пять секунд.
Когда вы следите за добавлением текста к более чем одному файлу, вы можете подавить заголовки, указывающие, из какого файла журнала взят текст. Для этого используйте параметр -q (тихо):
tail -f -q geek-1.log geek-2.log
Вывод из файлов отображается в виде бесшовного текста. Нет указания, из какого файла журнала была получена каждая запись.
хвост все еще имеет ценность
Хотя доступ к файлам системного журнала теперь предоставляется journalctl, у tail есть что предложить. Это особенно верно, когда он используется в сочетании с другими командами, встраиваясь в хвост или из него.
systemd, возможно, изменил ситуацию, но все же есть место для традиционных утилит, которые соответствуют философии Unix: делать одно и делать это хорошо.