Если вы начинаете работать с Linux или хотите понять, как управлять файлами в командной строке, то команда tail — это очень полезный инструмент.
Она позволяет просматривать последние строки файла, что очень удобно для чтения логов, анализа данных и быстрого получения последней информации из файла.
Что такое команда tail в Linux?
Команда tail выводит последние строки заданного файла. По умолчанию она показывает 10 последних строк, но этот параметр можно изменить. Это похоже на то, как вы просматриваете последние новости в новостной ленте.
Основные функции команды tail:
Просмотр последних строк файла.
Постоянное отслеживание изменений в файле (например, логах).
Защита от необходимости открывать весь файл целиком.
Как работает команда tail в Linux: пошаговое объяснение
- 0. Подготовка тестового файла
- 1. Простое использование
- 2. Изменение количества отображаемых строк
- 3. Постоянное отслеживание изменений — режим -f
- 4. Ограничение вывода по байтам
0. Подготовка тестового файла
Если у вас есть файл логов (или любой другой), содержимое которого постоянно пополняется, можете пропустить данный шаг. Мы используем команду ping, и будем записывать результат в файл, это будет своего рода файл логов.
Выполним следующую команду:
waky@ubuntu:~$ ping google.com > ping.log &
[1] 1240
waky@ubuntu:~$
Мы в фоновом режиме (&) выполняем команду (ping google.com), результат которой записываем в файл (> ping.log). Процесс, в моем случае, запущен с идентификатором 1240 (у вас свой). После практики не забудьте прибить данный процесс командой kill:
kill 1240
1. Простое использование
Самый базовый вариант: вывести последние 10 строк файла. Для этого не нужны никакие дополнительные параметры, достаточно задать имя файла:
tail имя_файла
Это покажет последние 10 строк файла, например в нашем случае это:
waky@ubuntu:~$ tail ping.log
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=326 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=327 ttl=115 time=122 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=328 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=329 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=330 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=331 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=332 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=333 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=334 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=335 ttl=115 time=123 ms
waky@ubuntu:~$
Файл содержит результат исполнения команды, с помощью tail мы вывели 10 последних строк. Работая с другими файлами и логами принцип такой же.
2. Изменение количества отображаемых строк
Если нужно вывести другое число строк, отличное от значения по умолчанию, используйте параметр -n:
tail -n 5 имя_файла
Например, последние 5 строк:
waky@ubuntu:~$ tail -n 5 ping.log
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=494 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=495 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=496 ttl=115 time=125 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=497 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=498 ttl=115 time=123 ms
waky@ubuntu:~$
Подготовим еще один тестовый файл, на этот раз статичный. Простой файл где в каждой строке будет цифра с номером данной строки:
waky@ubuntu:~$ echo -e "1\n2\n3\n4\n5\n6\n7\n8\n9" > simple.txt
waky@ubuntu:~$
Проверим файл с помощью команды cat:
waky@ubuntu:~$ cat simple.txt
1
2
3
4
5
6
7
8
9
waky@ubuntu:~$
Попробуем вывести последние 4 строки:
waky@ubuntu:~$ tail -n 4 simple.txt
6
7
8
9
waky@ubuntu:~$
Все верно, это строки с 6 по 9. А теперь попробуем использовать аргумент со знаком плюс (+4):
waky@ubuntu:~$ tail -n +4 simple.txt
4
5
6
7
8
9
waky@ubuntu:~$
Это запустит вывод с 4 строки включительно.
3. Постоянное отслеживание изменений — режим -f
Одно из основных применений tail — отслеживать все новые записи в файле в реальном времени. Для этого есть опция -f:
tail -f имя_файла
Это запустит команду и будет показывать новые строки, добавляемые в файл, пока вы не остановите её (например, Ctrl+C):
waky@ubuntu:~$ tail -f ping.log
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1126 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1127 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1128 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1129 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1130 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1131 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1132 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1133 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1134 ttl=115 time=124 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1135 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1136 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1137 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1138 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1139 ttl=115 time=123 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1140 ttl=115 time=123 ms
^C
waky@ubuntu:~$
Мы увидели, как пополняется содержимое файла в реальном времени. Более нам не нужен процесс, запущенный на подготовительном этапе и можно его завершить:
waky@ubuntu:~$ kill 1240
waky@ubuntu:~$
4. Ограничение вывода по байтам
Кроме ограничения вывода числом строк, можно использовать ограничение по числу байт. За это отвечает опция -c:
tail -c 100 имя_файла
Например:
waky@ubuntu:~$ tail -c 100 ping.log
23 ms
64 bytes from lcarnb-ah-in-f14.1e100.net (142.251.142.238): icmp_seq=1361 ttl=115 time=122 ms
[1]+ Terminated ping google.com > ping.log
waky@ubuntu:~$
Вывод содержит ровно столько байт информации, сколько мы задали.
Полезные советы по использованию команды tail
| Параметр | Значение | Описание |
| -n | количество строк | Указывает сколько отображать строк. |
| -f | в реальном времени | Постоянно отслеживать изменения файла. |
| -c | байты | Показывать последние байты файла, а не строки. |
Почему команда tail так полезна?
- Быстрый просмотр последних событий в логах.
- Мониторинг процессов или приложений в реальном времени.
- Анализ данных или ошибок без необходимости открывать весь файл.
- Автоматизация задач, например, при написании скриптов.
Заключение
Команда tail — это незаменимый помощник для любого пользователя Linux. Она позволяет быстро смотреть последние строки файла и следить за происходящими изменениями.
Простая в использовании и очень полезная — она обязательно пригодится, если вы работаете с логами, файлами данных или просто хотите быстро проверить последние события.