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
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.