Spielereien mit Logdateien

Unter Linux gibt es je nach Einstellung mehr oder weniger viele Logs, die im Supportfall schnell interessant werden können und (falls man z.B. in einem Forum um Hilfe bittet) auch abgefragt werden.
Aber: wie und wo finde ich die? Wie kann ich reinschauen oder einen Ausschnitt kopieren? Änderungen live verfolgen – und nur diese Änderungen in eine Datei sichern?

WAS sind Logdateien?

Das System und manche Programme halten Ereignisse in Dateien, sogenannten Logdateien, fest. Ob und was geloggt wird, hängt von den Einstellungen ab1.

WO sind die Logdateien?

Normalerweise liegen die Logdateien in /var/log/ oder einem Unterverzeichnis davon, außer bei Programmen, die mit entsprechenden Optionen selber kompiliert und/oder gestartet wurden.

Wie schaue ich in die Logdateien rein?

Meist sind die Logdateien reine Textdateien, die sich mit mit jedem Texteditor wie vim oder Programmen wie cat, more, tail und less anzeigen oder direkt mit grep nach bestimmten Stichworten durchsuchen lassen.

Beispiele:

  • vim /var/log/messages # /var/log/messages mit vim öffnen
  • cat /var/log/wpa_supplicant.log # /var/log/wpa_supplicant.log mit cat anzeigen lassen
  • tail -n 300 /var/log/messages # die letzten 300 Zeilen von /var/log/messages anzeigen lassen
  • tail -f /var/log/messages # zeigt die letzten 10 Zeilen der /var/log/messages sowie alle neu hinzukommenden Zeilen
  • grep cron /var/log/messages # aus der /var/log/messages nur die Zeilen anzeigen lassen, die die Zeichenkette “cron” enthalten

Das Problem hierbei: man muß diese Befehle mit root-Rechten ausführen, weil dem User meist die Leserechte fehlen.

Mit Einführung von systemd sucht man die /var/log/messages vergeblich, es sei denn, man hat entsprechende Pakete nachinstalliert und konfiguriert. Hier kommt journalctl ins Spiel.

  • journalctl -a # zeigt alle Logs an, die vorher in /var/log/messages zu finden waren
  • journalctl --user # zeigt alle Logs den User betreffend an
  • journalctl --system # zeigt alle Systemlogs an
  • journalctl -f # zeigt die letzten 10 Zeilen aller Logs sowie alle neu hinzukommenden Einträge an

Wie bekomme ich einen Auszugs des Logs, um ihn in ein Forum zu kopieren?

Eines der größten Probleme besteht in den fehlenden Rechten des Users, die Logs zu lesen.

Eine einfache Lösung sieht so aus:

  • sudo tail -n 200 /var/log/messages > ~/messages.log

Damit wird tail -n 200 /var/log/messages mit root-Rechten aufgerufen und die Ausgabe mit User-Rechten(!) in die Datei messages.log des Users geschrieben2.

Mit journalctl wird das etwas einfacher:

  • journalctl -a > ~/messages.log # das geht als User

Sollen z.B. Informationen zu einem USB-Gerät zum Zeitpunkt des Einstöpselns eingeholt werden, gibt es je System eine der folgenden Möglichkeiten:

  • sudo tail -f /var/log/messages > ~/messages.log
  • journalctl -f > ~/messages.log

und dann das Gerät einstöpseln. Danach kurz warten und das zuvor gestartete Programm mit STRG-c beenden.

Nun kann man die Datei ~/messages.log in einen Editor laden und unwichtiges Zeugs herauslöschen.

1 Es können nur Fehler geloggt werden oder teilweise auch jede Aktion, jeder Klick etc.

2 Vorsicht! Wenn die Datei schon existiert, wird sie mit diesem Befehl überschrieben! Soll an eine vorhandene Datei etwas angehängt werden, muß >> anstelle von > verwendet werden.