Поиск по сайту:

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


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

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

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

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

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

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

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

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

tail word-list.txt

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

tail -n 15 word-list.txt

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

tail -12 word-list.txt

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

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

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

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

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

Модификатор + (отсчет от начала) заставляет tail отображать строки с начала файла, начиная с определенного номера строки. Если ваш файл очень длинный и вы выбираете строку рядом с началом файла, вы получите много вывода, отправленного в окно терминала. В этом случае имеет смысл направить вывод из 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

Трубопровод в хвост

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

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

ls -tl | tail -5

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

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

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

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

Давайте сломаем это.

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

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

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

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

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

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

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

tail -f geek-1.log

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

Вы можете уточнить вывод, включив в него только строки, представляющие особую актуальность или интерес. Здесь мы используем 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 по-прежнему может многое предложить. Это особенно верно, когда он используется в сочетании с другими командами, путем передачи в или из tail.

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

RELATED: Best Linux Laptops for Developers and Enthusiasts