Jak korzystać z polecenia tail w systemie Linux

Photo of author

By maciekx

Polecenie tail w systemie Linux umożliwia przeglądanie końcowych danych z pliku. Dzięki temu można również śledzić na bieżąco aktualizacje, które są dodawane do pliku. W tym artykule przedstawimy, jak skutecznie korzystać z tej funkcji.

Czy systemd zrewolucjonizował tail?

Komenda tail służy do wyświetlania danych z końcowej części pliku. Zwykle nowe informacje pojawiają się na końcu, co sprawia, że tail jest prostym i efektywnym sposobem na monitorowanie świeżych danych. Ponadto, potrafi on na bieżąco śledzić plik, pokazując nowe wpisy, gdy tylko się pojawią. To czyni go idealnym narzędziem do analizy plików dziennika.

W ostatnich latach wiele dystrybucji Linuxa przyjęło system systemd, który działa jako menedżer usług. Jest to pierwszy proces, oznaczony jako PID 1, i stanowi rodzica dla wszystkich innych procesów. Wcześniej tę rolę pełnił tradycyjny system init.

W wyniku tej zmiany wprowadzono nowy format plików dziennika systemowego. Obecnie nie są one zapisywane jako zwykły tekst, lecz w formacie binarnym, co oznacza, że do odczytu tych plików dziennika należy użyć narzędzia journalctl. Ponieważ tail działa tylko z plikami tekstowymi, nie jest w stanie odczytać plików binarnych. Czy to oznacza, że nie jest już użyteczne? Czy ma nadal coś do zaoferowania?

Komenda tail to coś więcej niż tylko wyświetlanie na bieżąco. Nadal istnieje wiele plików dziennika, które nie są generowane przez system i pozostają w formacie tekstowym. Na przykład, logi aplikacji nadal są zapisywane jako zwykłe pliki tekstowe.

Zastosowanie polecenia tail

Aby wyświetlić ostatnie dziesięć wierszy z pliku, wystarczy podać jego nazwę:

tail word-list.txt

Aby zobaczyć inną liczbę wierszy, można użyć opcji -n (liczba wierszy):

tail -n 15 word-list.txt

Można także pominąć „-n” i użyć samego znaku „-” z liczbą, bez spacji. Choć technicznie jest to przestarzała forma, wciąż działa:

tail -12 word-list.txt

Użycie tail z wieloma plikami

Możliwe jest jednoczesne przetwarzanie wielu plików. Wystarczy podać ich nazwy w linii poleceń:

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

Dla każdego pliku wyświetlany jest krótki nagłówek, który wskazuje, do którego pliku odnoszą się linie.

Wyświetlanie wierszy z początku pliku

Opcja + (licz z początku) pozwala na wyświetlenie końcowych linii, zaczynając od określonego numeru. Jeśli plik jest długi, a wybierzesz linię w jego górnej części, możesz otrzymać dużą ilość danych wyjściowych w terminalu. W takim przypadku warto rozważyć przekierowanie wyników.

tail +440 list-1.txt

Można również przeglądać tekst w kontrolowany sposób.

Jeżeli plik ma 20 445 wierszy, to polecenie to jest równoważne użyciu opcji „-6”:

tail +20440 list-1.txt

Używanie bajtów z tail

Możesz nakazać poleceniu tail operować na bajtach zamiast na wierszach, stosując opcję -c (bajty). Może to być przydatne, jeśli plik tekstowy ma regularnie formatowane rekordy. Warto pamiętać, że znak nowego wiersza liczy się jako jeden bajt. To polecenie wyświetli ostatnie 93 bajty z pliku:

tail -c 93 list-2.txt

Można także połączyć opcję -c z modyfikatorem + (licząc od początku pliku), aby określić przesunięcie w bajtach od początku pliku:

tail -c +351053 list-e.txt

Łączenie poleceń z tail

Możemy również przesyłać wyjścia z innych poleceń do tail. Na przykład, aby znaleźć pięć plików lub katalogów z najstarszymi czasami modyfikacji, użyj polecenia ls z opcją -t (sortuj według czasu modyfikacji) i przekaż wynik do tail:

ls -tl | tail -5

Polecenie ps wyświetla informacje o uruchomionych procesach. Oto jak można to połączyć:

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

Aby wyjaśnić, polecenie ps z opcjami:

  • a: Wyświetl wszystkie procesy, nie tylko dla aktualnego użytkownika.
  • u: Zwróć wyjście zorientowane na użytkownika.
  • x: Wyświetl wszystkie procesy, w tym te, które nie działają w TTY.

Polecenie sort sortuje wynik, a użyte opcje to:

  • n: Sortuj numerycznie.
  • k +4: Sortuj według czwartej kolumny.

Na koniec, tail -5 pokazuje ostatnie pięć procesów z posortowanego zestawienia. W rezultacie uzyskujemy pięć procesów o najwyższym zużyciu pamięci.

Używanie tail do śledzenia plików w czasie rzeczywistym

Aby na bieżąco obserwować nowe wpisy w pliku (zazwyczaj w pliku dziennika), wystarczy podać nazwę pliku i skorzystać z opcji -f (follow):

tail -f geek-1.log

W miarę dodawania nowych wpisów do pliku, tail aktualizuje widok w terminalu.

Możesz także ograniczyć wyniki do linii zawierających określone słowa. W tym przypadku używamy grep, aby wyświetlić tylko linie z słowem „średnia”:

tail -f geek-1.log | grep average

Aby śledzić zmiany w dwóch lub więcej plikach, wystarczy podać ich nazwy w poleceniu:

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

Każdy wpis będzie oznaczony nagłówkiem pokazującym, z którego pliku pochodzi.

Ekran będzie aktualizowany za każdym razem, gdy nowy wpis pojawi się w śledzonym pliku. Aby dostosować częstotliwość aktualizacji, można użyć opcji -s (czas uśpienia), co pozwala na określenie liczby sekund, jakie tail ma odczekać między kolejnymi sprawdzeniami plików:

tail -f -s 5 geek-1.log

Choć nie widać tego na zrzucie ekranu, aktualizacje pliku odbywają się co dwie sekundy, a nowe wpisy są prezentowane co pięć sekund.

Jeśli śledzisz wiele plików, można pominąć nagłówki wskazujące źródło tekstu. Użyj opcji -q (cicho):

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

Wyniki z plików będą prezentowane jako jednolity ciąg tekstu, bez wskazania, z jakiego pliku pochodzi dany wpis.

Tail wciąż jest użyteczny

Mimo że dostęp do plików dziennika systemowego jest teraz realizowany przez journalctl, tail wciąż pozostaje niezwykle wartościowym narzędziem. Jego potencjał jest szczególnie widoczny, gdy łączy się go z innymi poleceniami, używając potoków do przesyłania danych wejściowych lub wyjściowych.

System systemd zmienił oblicze obsługi procesów, ale tradycyjne narzędzia, takie jak tail, wciąż mają swoje miejsce w filozofii Uniksa, która zakłada, że każde narzędzie powinno koncentrować się na jednej funkcji i robić to doskonale.


newsblog.pl