Як використовувати команду tail в Linux

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

Systemd Kill tail?

Команда tail показує дані з кінця файлу. Зазвичай нові дані додаються в кінець файлу, тому команда tail — це швидкий і простий спосіб побачити останні додані до файлу. Він також може контролювати файл і відображати кожен новий текстовий запис у цьому файлі в міру їх появи. Це робить його чудовим інструментом для моніторингу файлів журналів.

У багатьох сучасних дистрибутивах Linux використовується система systemd і менеджер служб. Це перший виконаний процес ID процесу 1, і він є батьківським для всіх інших процесів. Раніше ця роль була обробляється старшим система ініціації.

Разом із цією зміною з’явився новий формат файлів системного журналу. Більше не створюються у вигляді простого тексту, у системі systemd вони записуються у двійковому форматі. До прочитати ці файли журналу, які ви повинні використовувати утиліта journalactl. Команда tail працює з форматами звичайного тексту. Він не читає двійкові файли. То чи означає це, що команда tail є рішенням для пошуку проблеми? Чи все ще є що запропонувати?

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

  Як увімкнути автоматичний вхід в Linux

Використання хвоста

Передайте ім’я файлу в хвіст, і воно покаже вам останні десять рядків цього файлу. Приклади файлів, які ми використовуємо, містять списки відсортованих слів. Кожен рядок пронумерований, тому слід легко слідувати прикладам і бачити, який ефект мають різні варіанти.

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 +440 list-1.txt

Ти можеш керованою сторінкою тексту.

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

tail +20440 list-1.txt

Використання байтів з хвостом

Ви можете наказати хвосту використовувати зміщення в байтах замість рядків, використовуючи параметр -c (байти). Це може бути корисно, якщо у вас є текстовий файл, відформатований у записи звичайного розміру. Зверніть увагу, що символ нового рядка враховується як один байт. Ця команда відобразить останні 93 байти у файлі:

tail -c 93 list-2.txt

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

tail -c +351053 list-e.txt

Труби в хвіст

Раніше ми передали вихід із хвоста в менший . Ми також можемо передавати вихідні дані інших команд у хвіст.

  8 найкращих програм для Linux для спільного використання робочого столу

Щоб визначити п’ять файлів або папок із найстарішим часом модифікації, скористайтеся параметром -t (сортування за часом модифікації) за допомогою ls і передайте результат у хвіст.

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.

Команда сортування сортує вихід від ps . Параметри, які ми використовуємо для сортування:

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

Команда tail -5 відображає останні п’ять процесів із відсортованого виводу. Це п’ять процесів, які найбільше потребують пам’яті.

  Як створити резервну копію віртуальної машини на Linux за допомогою VirtualBox

Використання хвоста для відстеження файлів у режимі реального часу

Відстеження нових текстових записів, які надходять у файл (зазвичай у файл журналу), легко за допомогою хвоста. Передайте ім’я файлу в командному рядку та скористайтеся опцією -f (follow).

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: робити одну справу і робити це добре.