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

Команда Linux tail отображает данные с конца файла. Он даже может отображать обновления, добавленные к файлу, в режиме реального времени. Мы покажем вам, как его использовать.

Убил ли systemd хвост?

Команда tail показывает вам данные с конца файла. Обычно новые данные добавляются в конец файла, поэтому команда tail — это быстрый и простой способ увидеть самые последние добавления к файлу. Он также может отслеживать файл и отображать каждую новую текстовую запись в этом файле по мере их появления. Это делает его отличным инструментом для мониторинга файлов журналов.

Многие современные дистрибутивы Linux приняли систему systemd и диспетчер служб. Это первый выполненный процесс, он ID процесса 1, и он является родительским для всех других процессов. Раньше эта роль была обрабатывается старшим система инициализации.

Вместе с этим изменением появился новый формат файлов системного журнала. Больше не создаются в виде обычного текста, в systemd они записываются в двоичном формате. Чтобы прочтите эти файлы журнала, вы должны использовать Утилита journactl. Команда tail работает с текстовыми форматами. Он не читает двоичные файлы. Значит ли это, что команда tail — это решение в поисках проблемы? Есть ли еще что-нибудь предложить?

Команда tail — это больше, чем просто отображение обновлений в реальном времени. И в этом отношении по-прежнему существует множество файлов журнала, которые не генерируются системой и по-прежнему создаются как простые текстовые файлы. Например, файлы журнала, созданные приложениями, не изменили свой формат.

  Как играть в Battlefield 1 в Linux

Использование хвоста

Передайте имя файла в tail, и он покажет вам последние десять строк из этого файла. Используемые нами файлы примеров содержат списки отсортированных слов. Каждая строка пронумерована, поэтому будет легко следовать примерам и видеть, какой эффект оказывают различные параметры.

tail word-list.txt

tail word-list.txt в окне терминала

Чтобы увидеть другое количество строк, используйте параметр -n (количество строк):

tail -n 15 word-list.txt

tail -n 15 word-list.txt в окне терминала

Фактически, вы можете обойтись без «-n» и просто использовать дефис «-» и число. Убедитесь, что между ними нет пробелов. Технически, это устаревшая форма команды, но он все еще в страница руководства, и он все еще работает.

tail -12 word-list.txt

tail -12 word-list.txt в окне терминала

Использование хвоста с несколькими файлами

Вы можете работать с несколькими файлами одновременно. Просто передайте имена файлов в командной строке:

tail -n 4 list-1.txt list-2.txt list-3.txt

tail -n 4 list-1.txt list-2.txt list-3.txt в окне терминала

Для каждого файла отображается небольшой заголовок, чтобы вы знали, к какому файлу принадлежат строки.

Отображение строк с начала файла

Модификатор + (отсчет с начала) заставляет концевые строки отображать от начала файла, начиная с определенного номера строки. Если ваш файл очень длинный и вы выбираете строку, близкую к его началу, вы получите много вывода, отправленного в окно терминала. В этом случае имеет смысл направить вывод от tail в less.

tail +440 list-1.txt

tail +44 list-1.txt в окне терминала

Вы можете листать текст контролируемым образом.

Вывод из хвоста отображается меньше в окне терминала

Поскольку в этом файле 20 445 строк, эта команда эквивалентна использованию опции «-6»:

tail +20440 list-1.txt

tail +20440 list-1.txt в окне терминала

Использование байтов с хвостом

Вы можете указать tail использовать смещения в байтах вместо строк, используя параметр -c (bytes). Это может быть полезно, если у вас есть текстовый файл, отформатированный в записи обычного размера. Обратите внимание, что символ новой строки считается одним байтом. Эта команда отобразит последние 93 байта в файле:

tail -c 93 list-2.txt

tail -c 93 list-2.txt в окне терминала

Вы можете комбинировать опцию -c (байты) с модификатором + (отсчет от начала файла) и указать смещение в байтах, отсчитываемое от начала файла:

tail -c +351053 list-e.txt

tail -c +351053 list-e.txt в окне терминала

Трубка в хвост

Раньше мы делали вывод из хвоста на less. Мы также можем передать вывод других команд в tail.

  Как найти тексты песен в Linux с помощью Lyrics Finder

Чтобы определить пять файлов или папок с самым старым временем модификации, используйте опцию -t (сортировать по времени модификации) с ls и направьте вывод в tail.

ls -tl | tail -5

ls -lt |  хвост -5 в окне терминала

Головная команда перечисляет строки текста с начала файла. Мы можем объединить это с хвостом, чтобы извлечь раздел файла. Здесь мы используем команду head для извлечения первых 200 строк из файла. Это передается в хвост, который извлекает последние десять строк. Это дает нам строки с 191 по 200. То есть последние десять строк из первых 200 строк:

head -n 200 list-1.txt | tail -10

head -n 200 list-1.txt |  хвост -10 в окне терминала

Эта команда перечисляет пять процессов, наиболее требовательных к памяти.

ps aux | sort -nk +4 | tail -5

ps aux |  sort -nk +4 |  хвост -5 в окне терминала

Давайте разберемся с этим.

Команда ps отображает информацию о запущенных процессах. Используются следующие параметры:

a: Список всех процессов, а не только для текущего пользователя.
u: отображение ориентированного на пользователя вывода.
x: список всех процессов, включая те, которые не выполняются в TTY.

Команда сортировки сортирует вывод из пс. Параметры, которые мы используем с сортировкой:

n: числовая сортировка.
k +4: сортировка по четвертому столбцу.

Команда tail -5 отображает последние пять процессов из отсортированного вывода. Это пять процессов, наиболее требовательных к памяти.

Использование tail для отслеживания файлов в реальном времени

Отслеживать новые текстовые записи, поступающие в файл — обычно файл журнала — легко с помощью tail. Передайте имя файла в командной строке и используйте параметр -f (следовать).

tail -f geek-1.log

tail -f geek-1.log в окне терминала

По мере добавления каждой новой записи журнала в файл журнала, tail обновляет свое отображение в окне терминала.

  Как использовать блокировку портов в Linux (и почему этого не следует)

Вывод из tail -f geek-1.log в окне терминала

Вы можете уточнить вывод, включив только строки, представляющие особую актуальность или интерес. Здесь мы используем grep для показывать только строки, содержащие слово «средний»:

tail -f geek-1.log | grep average

хвост -f geek-1.log |  среднее значение grep в окне терминала

Чтобы отслеживать изменения в двух или более файлах, передайте имена файлов в командной строке:

tail -f -n 5 geek-1.log geek-2.log

tail -f -n 5 geek-1.log geek-2.log в окне терминала

Каждая запись помечена заголовком, который показывает, из какого файла взят текст.

Вывод из tail -f -n 5 geek-1.log geek-2.log

Дисплей обновляется каждый раз, когда появляется новая запись в файле, за которым следуют. Чтобы указать период обновления, используйте параметр -s (период ожидания). Это говорит tail подождать несколько секунд, в данном примере пять, между проверками файлов.

tail -f -s 5 geek-1.log

tail -f -s 5 geek-1.log в окне терминала

По общему признанию, вы не можете сказать, глядя на снимок экрана, но обновления файла происходят каждые две секунды. Новые записи файлов отображаются в окне терминала каждые пять секунд.

Вывод из tail -f -s 5 geek-1.log

Когда вы следите за добавлением текста к более чем одному файлу, вы можете подавить заголовки, указывающие, из какого файла журнала взят текст. Для этого используйте параметр -q (тихо):

tail -f -q geek-1.log geek-2.log

tail -f -q geek-1.log geek-2.log в окне терминала

Вывод из файлов отображается в виде бесшовного текста. Нет указания, из какого файла журнала была получена каждая запись.

Вывод из tail -f -q geek-1.log geek-2.log в окне терминала

хвост все еще имеет ценность

Хотя доступ к файлам системного журнала теперь предоставляется journalctl, у tail есть что предложить. Это особенно верно, когда он используется в сочетании с другими командами, встраиваясь в хвост или из него.

systemd, возможно, изменил ситуацию, но все же есть место для традиционных утилит, которые соответствуют философии Unix: делать одно и делать это хорошо.