8.8 Logfájlok kezelése

Bár az előző fejezetben megismert journalctl a modern systemd-alapú naplózás királya, a Linux-rendszergazdák mindennapi munkája során kikerülhetetlen a hagyományos, szöveges logfájlok kezelése is. Számos kritikus szoftver – például az Apache vagy Nginx webszerverek, az adatbázisok, vagy a helyben futtatott nagy nyelvi modell (LLM) környezetek – a mai napig saját, dedikált szövegfájlokba írják a naplóikat (általában a /var/log/ könyvtárba).

Ha egy ilyen szöveges logfájl mérete eléri a több gigabájtot, a grafikus szövegszerkesztők (vagy akár egy meggondolatlanul kiadott cat parancs) teljesen megfektethetik a rendszert, mivel megpróbálják a teljes fájlt egyszerre betölteni a memóriába.

Ebben az alfejezetben megtanuljuk, hogyan fésülhetjük át a gigászi méretű naplófájlokat másodpercek alatt, memóriaigény nélkül, a head, tail és less parancsok segítségével, és hogyan találhatjuk meg a konkrét hibaüzeneteket a grep szűrővel kombinálva.


8.8.1 A fájlok eleje és vége: head és tail

Amikor egy hibát keresel, leggyakrabban a legfrissebb eseményekre vagy kíváncsi (amik a fájl legvégén vannak), vagy épp ellenkezőleg: egy logfájl fejlécére és struktúrájára (ami a legeslegelején található). A head (fej) és a tail (farok) parancsok pontosan erre szolgálnak: ahelyett, hogy megnyitnák a fájlt, csak egy meghatározott számú sort vágnak ki belőle.

A head parancs (a fájl eleje)

Alapértelmezés szerint a head parancs egy szövegfájl első 10 sorát mutatja meg.

head /var/log/nginx/access.log

Ha több vagy kevesebb sorra van szükséged, a -n kapcsoló után megadhatod a kívánt sorszámot:

head -n 5 /var/log/nginx/access.log

A tail parancs (a fájl vége)

A tail a head tökéletes ellentéte: alapértelmezetten a fájl utolsó 10 sorát vágja ki. Ez sokkal hasznosabb a hibakeresésnél, hiszen a legújabb logbejegyzések mindig a fájl végére fűződnek hozzá.

tail /var/log/nginx/error.log

A sorszámot itt is tetszőlegesen testre szabhatod:

tail -n 25 /var/log/nginx/error.log


8.8.2 Valós idejű logfigyelés: tail -f

A rendszergazdák egyik legtöbbet használt fegyvere a tail parancs -f (follow - követés) kapcsolója. Ez a parancs nem tér vissza a promptthoz, hanem nyitva hagyja a fájlt a terminálban, és élőben, valós időben írja ki a képernyőre az újonnan érkező sorokat.

tail -f /var/log/nginx/access.log

Amint egy látogató megnyitja a webáruházadat, vagy egy belső folyamat hibát generál, a hozzá tartozó sor a képernyődön terem. Ez felbecsülhetetlen segítség, amikor tesztelsz egy futó alkalmazást, és látni akarod, hogyan reagál a gombnyomásaidra. A követő módból a Ctrl + C billentyűkombinációval tudsz kilépni.

Profi tipp: Ha a logfájlt esetleg rotálja (újraírja, lecseréli) a rendszer a háttérben, a sima -f elveszítheti a fonalat. Ilyenkor a -F (nagy F) kapcsolót érdemes használni, ami akkor is tovább követi a fájlt, ha azt törölték és újra létrehozták.


8.8.3 Nagy logok gyors böngészése memóriaigény nélkül: less

Mi van akkor, ha nem csak az elejére vagy a végére vagy kíváncsi, hanem interaktívan bele akarsz lapozni egy 50 Gigabájtos logfájlba, keresni akarsz benne, de nem akarod, hogy a rendszered elfogyassza az összes RAM-ot?

Erre a célra fejlesztették ki a less parancsot. A less egy zseniális szövegmegjelenítő (pager). Titka abban rejlik, hogy nem tölti be a fájlt a memóriába. Ha megnyitsz vele egy óriási fájlt, az azonnal megnyílik, mert a less mindig csak azt a néhány tucat sort olvassa be a lemezről, ami éppen elfér a monitorodon.

sudo less /var/log/cron

Navigáció a less felületén:

  • Nyilak / Page Up / Page Down: Soronkénti vagy oldalinkénti görgetés.
  • G (nagy G): Azonnal a fájl végére ugrik (nagyon hasznos logoknál).
  • g (kis g): Azonnal a fájl elejére ugrik.
  • q: Kilépés a programból és visszatérés a terminálhoz.

Keresés a less-en belül:

Nem kell végiggörgetned a fájlt, ha egy konkrét kifejezést keresel. A less beépített keresővel rendelkezik:

  1. Nyomd meg a / (perjel) billentyűt. A képernyő alján megjelenik egy kurzor.
  2. Gépeld be a keresett szót (pl. error vagy vivid), majd nyomj Enter-t.
  3. A találatok között a n billentyűvel lépkedhetsz előre (Next), a N (Shift + n) billentyűvel pedig visszafelé.

8.8.4 Logok villámgyors szűrése grep-pel

Gyakran előfordul, hogy egy logfájlban percenként több ezer sor keletkezik, és téged ebből a tengerből kizárólag a kritikus hibák, vagy egy konkrét IP-címhez tartozó műveletek érdekelnek. A korábban (a 4. fejezetben) megismert grep parancs a csővezetékkel (|) kombinálva itt válik igazi szuperfegyverré.

1. Konkrét kifejezések kiszűrése fájlból

Keressük meg az összes olyan sort a rendszernaplóban, ami tartalmazza a "failed" (sikertelen) szót:

sudo grep "failed" /var/log/messages

Ha nem vagy biztos benne, hogy a hibaüzenet kis- vagy nagybetűvel lett írva (Failed, FAILED, failed), kényszerítsd a grep-et kis- és nagybetű független módra az -i kapcsolóval:

sudo grep -i "failed" /var/log/messages

2. Élő logfolyam szűrése

Összekapcsolhatjuk a valós idejű követést a grep szűrőjével. Ha elindítod az alábbi parancsot, a képernyőd tiszta marad, és kizárólag akkor villan fel egy új sor, ha abban felbukkan a "CRITICAL" vagy "ERROR" szó:

tail -f /var/log/myapp.log | grep --line-buffered -E "CRITICAL|ERROR"

(A --line-buffered kapcsoló biztosítja, hogy a grep azonnal kitegye a sort a képernyőre, amint az megérkezik, a -E pedig lehetővé teszi a több szavas | vagy-kapcsolat használatát).

3. Környezet megjelenítése: Mi történt a hiba előtt és után?

Egy hibaüzenet önmagában gyakran semmitmondó (pl. NullPointerException). A javításhoz látnod kell, hogy milyen műveletek vezettek el a hibáig. A grep képes kivágni a találat körüli sorokat is:

  • -B 3 (Before): Megmutatja a találat feletti (előtti) 3 sort is.
  • -A 5 (After): Megmutatja a találat alatti (utáni) 5 sort is.

grep -B 3 -A 5 "Database connection lost" /var/log/syslog

Ez a parancs tökéletes kontextust ad a kezedbe: pontosan látni fogod, mit csinált a rendszer közvetlenül azelőtt, hogy az adatbázis-kapcsolat megszakadt volna.

Utolsó frissítés: 2026. június 29. 18:33