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
dmesg [OPTIONS]
dmesg --clear
dmesg --read-clear [OPTIONS]
dmesg --console-level level
dmesg --console-on
dmesg --console-off-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.
-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.
-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.
-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.
-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.
dmesg | grep -i error[ 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.
dmesg -wDieser 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.
dmesg --ctime[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)alertcrit(critical)err(error)warn(warning)noticeinfodebug
Um nur Fehlermeldungen und kritische Nachrichten anzuzeigen, kann man den folgenden Befehl verwenden.
dmesg -l err,crit[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
- dmesg(1) – Linux manual page (man7.org) — Offizielle Dokumentation aller dmesg-Optionen
- kernel.org: Kernel Log Buffer — Technische Dokumentation des Kernel-Logging-Systems
- Arch Wiki: dmesg — Praxisnahe Tipps und Tricks
Verwandte Artikel
- Linux Shell — Pipes, Filter und Umleitungen
- cat – Dateien anzeigen und verbinden — Textdateien ausgeben
- cut – Spalten aus Text extrahieren — Gezielte Textausschnitte
- Manpages – Hilfe auf der Kommandozeile — So liest du eingebaute Dokumentation