Das dmesg (display message oder diagnostig message) wird verwendet, um Nachrichten aus dem Kernel-Ringpuffer anzuzeigen. Der Kernel-Ringpuffer ist ein spezieller Speicherbereich, in dem der Linux-Kernel Meldungen speichert, die während des Systemstarts und während des Betriebs generiert werden. Diese Meldungen umfassen Informationen zu Hardwareerkennung, Treibern, Fehlern, Warnungen und anderen wichtigen Systemereignissen.

Syntax

Bash
dmesg [OPTIONS]
dmesg --clear
dmesg --read-clear [OPTIONS]
dmesg --console-level level
dmesg --console-on
dmesg --console-off
Puffer- und Konsolensteuerung
-C, --clear

Löscht den Kernel-Ringpuffer.

-c, --read-clear

Gibt den Inhalt des Ringpuffers aus und löscht ihn danach.

-D, --console-off

Deaktiviert die Ausgabe von Nachrichten auf der Konsole.

-E, --console-on

Aktiviert die Ausgabe von Nachrichten auf der Konsole.

-n, --console-level level

Setzt das Konsolen-Nachrichtenlevel. Nur Nachrichten auf oder über diesem Level werden auf die Konsole ausgegeben.

-s, --buffer-size size

Verwendet eine bestimmte Puffergröße, um den Kernel-Ringpuffer abzufangen.

Zeit- und Formatoptionen
-d, --show-delta

Zeigt den Zeitstempel und die Zeitdifferenz zwischen Nachrichten an.

-e, --reltime

Zeigt die lokale Zeit und die Zeitdifferenz in einem menschenlesbaren Format an.

-T, --ctime

Zeigt Zeitstempel in menschenlesbaren Format an. Kann bei SUSPEND/RESUME ungenau sein.

--since time

Zeigt Nachrichten seit der angegebenen Zeit an.

--until time

Zeigt Nachrichten bis zu der angegebenen Zeit an.

-t, --notime

Unterdrückt die Anzeige von Zeitstempeln.

--time-format format

Zeigt Zeitstempel im angegebenen Format an, wie z.B. ctime, reltime, delta oder iso.

Filter- und Anzeigeoptionen
-f, --facility list

Filtert die Ausgabe nach einer Liste von Protokollquellen (z.B. daemon).

-l, --level list

Filter die Ausgabe nach einer Liste von Prioritätsstufen (z.B. err, warn).

-k, --kernel

Zeigt nur Kernel-Nachrichten an.

-u, --userspace

Zeigt nur Benutzernachrichten an.

-w, --follow

Wartet auf neue Nachrichten und zeigt sie an.

-W, --follow-new

Wartet und zeigt nur neue Nachrichten an.

-x, --decode

Dekodiert Facility- und Prioritätsnummern in menschenlesbare Präfixe.

Ausgabe- und Formatsteuerung
-H, --human

Aktiviert menschenlesbare Ausgabe.

-J, --json

Verwenden JSON als Ausgabeformat.

-L, --color[=when]

Färbt die Ausgabe. Kann auto, never oder always sein.

--noescape

Deaktiviert die Sicherung von nicht druckbaren Zeichen.

-P, --nopager

Leitet die Ausgabe nicht an einen Pager weiter.

-p, --force-prefix

Fügt Facility-, Level- oder Zeitstempelinformationen zu jeder Zeile hinzu.

-r, --raw

Zeigt den rohen Nachrichtenpuffer an, wobei alle unlesbaren Zeichen noch maskiert werden.

-S, --syslog

Erzwingt die Verwendung der syslog(2) Kernel-Schnittstelle zum Lesen von Kernel-Nachrichten.

Sonstige Optionen
-F, --file file

Liest Syslog-Nachrichten aus der angegebenen Datei (unterstützt das alte Syslog-Format).

--help

Zeigt die Hilfe an und beendet das Programm.

-V, --version

Zeigt die Versionsinformationen an und beendet das Programm.

Das dmesg ist ein unverzichtbares Werkzeug für Systemadministratoren und Entwickler, um Probleme mit der Hardware und dem Kernel zu diagnostizieren und zu beheben. Es ermöglicht eine tiefe Einsicht in den Zustand des Systems und liefert oft die ersten Hinweise auf Hardware- oder Treiberprobleme.

Verwendung von dmesg

Filtern und Sortieren mit grep

Das dmesg kann in Kombination mit grep verwendet werden, um bestimmte Schlüsselwörter oder Meldungstypen zu suchen.

Bash Beispiel
dmesg | grep -i error
Output
[   10.343435] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[   20.434523] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20200925/psargs-330)
[   20.434527] ACPI Error: Aborting method \_SB.PCI0.LPCB.EC0._Q66 due to previous error (AE_NOT_FOUND) (20200925/psparse-529)

Diese Ausgabe zeigt alle Kernel-Meldungen an, die das Wort „error“ enthalten. Dies ist nützlich, um schnell nach Fehlern zu suchen, die während des Systemstarts oder Betriebs aufgetreten sind.

Anzeigen in Echtzeit

Mit der Option -w (--follow) kann man neue Kernel-Nachrichten in Echtzeit anzeigen lassen, ähnlich wie bei tail -f.

Bash Beispiel
dmesg -w

Dieser Befehl wird weiterhin Kernel-Meldungen anzeigen, wenn sie auftreten, was besonders nützlich ist, wenn man ein Gerät anschließt oder eine Aktion ausführt, die eine Kernel-Meldung erzeugen könnte (z.B. das Laden eines Treibers).

Anzeigen im Klartextformat

Kernel-Meldungen sind standardmäßig im Klartext, aber dmesg bietet die Möglichkeit, Meldungen im traditionellen RFC-3164 Syslog-Format anzuzeigen, das Zeitstempel im Klartext statt Sekunden seit dem Start anzeigt.

Bash Beispiel
dmesg --ctime
Output
[Thu Jul  8 14:23:42 2021] Initializing cgroup subsys cpuset
[Thu Jul  8 14:23:42 2021] Initializing cgroup subsys cpu
[Thu Jul  8 14:23:42 2021] Initializing cgroup subsys cpuacct
...

Dies kann das Lesen und Interpretieren der Kernel-Meldungen erleichtern, insbesondere wenn man herausfinden möchte, wann genau eine bestimmte Meldung aufgetreten ist.

Nachrichten nach Schweregrad filtern

Mit der Option -l (–level) kann man die Kernel-Meldungen nach Schweregrad filtern.

Die möglichen Schweregrade sind:

  • emerg (emergency)
  • alert
  • crit (critical)
  • err (error)
  • warn (warning)
  • notice
  • info
  • debug

Um nur Fehlermeldungen und kritische Nachrichten anzuzeigen, kann man den folgenden Befehl verwenden.

Bash Beispiel
dmesg -l err,crit
Output
[20.434523] ACPI Error: AE_NOT_FOUND, During name lookup/catalog (20200925/psargs-330)
[20.434527] ACPI Error: Aborting method \_SB.PCI0.LPCB.EC0._Q66 due to previous error (AE_NOT_FOUND) (20200925/psparse-529)

Häufige Stolperfallen

dmesg vs. journalctl -k — zwei Wege zu den Kernel-Logs.

Auf systemd-Systemen gibt es zwei konkurrierende Zugänge zu Kernel-Meldungen: dmesg liest den Kernel-Ringpuffer direkt, journalctl -k (oder journalctl —dmesg) holt dieselben Meldungen aus dem systemd-Journal. Der entscheidende Unterschied: Der Ringpuffer hat eine feste, relativ kleine Grösse (typischerweise 128–512 KB) und alte Meldungen werden überschrieben. Das Journal persistiert auf der Festplatte und bewahrt Meldungen über Neustarts hinweg. Für die Analyse eines Problems, das vor Stunden oder Tagen auftrat, ist journalctl -k die bessere Wahl. dmesg glänzt bei Live-Debugging und auf minimalen Systemen ohne systemd.

Der Kernel-Ringpuffer läuft über — alte Meldungen gehen verloren.

Der Ringpuffer hat eine begrenzte Kapazität (einstellbar über den Kernel-Parameter log_buf_len). Bei sehr ausführlichen Kernel-Logs — etwa durch die Boot-Parameter debug oder ignore_loglevel, oder bei einem fehlerhaften Treiber, der tausende Meldungen pro Sekunde erzeugt — wird der Puffer in Sekunden mit neuen Meldungen überschrieben. Dann fehlen die Aufzeichnungen vom Systemstart, die du eigentlich untersuchen willst. Auf systemd-Systemen sind Boot-Meldungen im Journal erhalten; auf Nicht-systemd-Systemen hilft ein grösserer Puffer via Kernel-Bootparameter: log_buf_len=4M.

dmesg ohne Filter — zugemüllte Terminal-Ausgabe.

Ein einfaches dmesg kann hunderte oder tausende Zeilen ausgeben — die meisten davon harmlose info- und debug-Meldungen. Die relevanten Fehler gehen in der Flut unter. Gewöhne dir an, gezielt zu filtern: dmesg —level=err,warn zeigt nur Probleme, dmesg | grep -i usb nur USB-relevante Meldungen, dmesg —since “5 minutes ago” nur die jüngsten Ereignisse. Die Kombination dmesg —level=err,crit,alert,emerg ist oft der schnellste Weg, um akute Hardware- oder Treiberprobleme zu erkennen.

dmesg -w blockiert das Terminal — vergiss nicht, es zu beenden.

dmesg -w (follow) läuft im Vordergrund und zeigt kontinuierlich neue Kernel-Meldungen an, ähnlich wie tail -f. Es läuft unbegrenzt weiter, bis du es mit Strg + C beendest. In Skripten oder wenn du nur kurz testen willst, ist dmesg -W (—follow-new) oft praktischer — es zeigt nur Meldungen, die nach dem Start des Befehls erscheinen, und überspringt den bisherigen Pufferinhalt. So siehst du sofort, was deine Aktion (z. B. USB-Gerät einstecken) auslöst.

dmesg braucht root-Rechte — auf modernen Systemen manchmal nicht.

Traditionell war dmesg nur mit sudo lesbar. Seit Kernel 3.5 kann der Zugriff über /proc/sys/kernel/dmesg_restrict gesteuert werden: Der Wert 1 (Standard auf vielen Distros) beschränkt dmesg auf root, 0 erlaubt allen Benutzern den Zugriff. Auf manchen Systemen (Fedora, RHEL) ist dmesg_restrict=1 gesetzt und dmesg schlägt mit dmesg: read kernel buffer failed: Operation not permitted fehl. Mit cat /proc/sys/kernel/dmesg_restrict prüfst du die aktuelle Einstellung.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu systemd

Zur Übersicht