tail

Wyświetla końcowe linie pliku, opcjonalnie śledzi przyrost w czasie rzeczywistym.

tail to komenda, która wyświetla końcowe linie pliku — domyślnie ostatnie 10. Jej odwrotnością jest head (początek pliku), ale prawdziwa gwiazda tail to tryb śledzenia: potrafi na bieżąco pokazywać nowe linie dopisywane do pliku. Dlatego pokochali ją adminzy i wszyscy, którzy gapią się w logi i czekają, aż coś się wysypie. Jeśli chcesz podglądać, co aplikacja pisze do logu w czasie rzeczywistym, tail jest twoim pierwszym odruchem.

Składnia i najważniejsze opcje

Podstawowa składnia wygląda tak: tail [OPCJE] [PLIK...]. Bez opcji dostajesz ostatnie 10 linii. Najczęściej używane flagi:

  • -n NUM — wyświetl ostatnie NUM linii zamiast domyślnych 10 (np. -n 50).
  • -n +NUM — zacznij od linii numer NUM i pokaż wszystko do końca (pomija NUM-1 początkowych linii).
  • -c NUM — wyświetl ostatnie NUM bajtów zamiast linii.
  • -f — śledź plik: po wypisaniu końcówki czekaj i pokazuj nowo dopisane linie.
  • -F — to samo co --follow=name --retry: śledzi po nazwie i wznawia, gdy plik zniknie i pojawi się ponownie (rotacja logów).
  • --retry — próbuj otwierać plik, nawet jeśli na starcie jest niedostępny.
  • --pid=PID — w trybie -f zakończ działanie, gdy proces o danym PID przestanie istnieć.
  • -q — nie wypisuj nagłówków z nazwami plików (przydatne przy wielu plikach naraz).

Przykłady użycia

  • tail -n 50 /var/log/syslog — pokazuje ostatnie 50 linii logu systemowego.
  • tail -f /var/log/nginx/access.log — śledzi log dostępowy Nginx na żywo; przerwiesz go przez Ctrl+C.
  • tail -F /var/log/app.log — śledzi log, który jest cyklicznie rotowany (logrotate) i przeżywa jego podmianę.
  • tail -n +2 dane.csv — pomija pierwszą linię (nagłówek CSV) i wypisuje resztę.
  • journalctl -u nginx | tail -n 20 — bierze ostatnie 20 linii z wyjścia innej komendy przez potok.

Częste błędy i pułapki

Najczęstsza wpadka to mylenie -f z -F. -f śledzi deskryptor otwartego pliku — po rotacji logu dalej patrzy na stary, już nieużywany plik i myślisz, że aplikacja umilkła. Do logów, które się rotują, używaj -F.

Druga pułapka: macOS to nie Linux. Systemowy tail na Macu pochodzi z BSD, a nie z GNU coreutils. Flagi -F, --retry, --pid czy -n +NUM mogą się zachować inaczej albo w ogóle nie istnieć. Za to BSD ma -r (odwrócona kolejność), którego GNU nie ma. Jeśli piszesz skrypt, który ma działać wszędzie tak samo, zainstaluj GNU coreutils (brew install coreutils, komenda jako gtail) albo trzymaj się flag wspólnych dla obu.

Pamiętaj też, że tail -f nie kończy się sam — wisi, dopóki go nie ubijesz Ctrl+C. W skrypcie, który ma coś zrobić i wyjść, to gotowy zakleszczony proces.

Powiązane komendy: head, cat, less, grep, journalctl, watch.