Das Programm dmesg ist ein Unix-Befehl, der Nachrichten aus dem Puffer des Kernels ausgibt. Der Befehl ist seit 4.0BSD[1] von 1980 in Unix enthalten, so auch in der UNIX 8th Edition[2] von 1985, sowie in einigen Unix-artigen Betriebssystemen wie beispielsweise Linux.[3] Dabei ist dmesg jedoch nicht Teil der POSIX-Spezifikation.

Funktionsweise Bearbeiten

dmesg, was u. a. für englisch display messages oder diagnostic messages stehen kann, liest die Systemnachrichten (system messages) direkt aus dem Kernel-Pufferspeicher und gibt sie als lesbaren Text aus. Unix folgt dem Prinzip „Alles ist eine Datei“, sodass auch der Kernelpuffer aus einer Datei im Unix-Dateisystem ausgelesen werden kann. Unter Linux liest dmesg beispielsweise standardmäßig /proc/kmsg aus.[3] Je nach System oder Konfiguration ist diese Datei jedoch privilegiert, sodass auch dmesg nur mit den nötigen Berechtigungen oder als Benutzer „root“ ausgeführt werden kann.[4][5]

Da der Kernelpufferspeicher eine begrenzte Größe hat, können eventuell nicht alle Systemnachrichten vorgehalten werden. Wird der Speicher voll, werden ältere Nachrichten verworfen (Ringpuffer), wodurch diese auch bei der Ausgabe mit dmesg fehlen.

Verwendung Bearbeiten

dmesg wird gerne von Systemadministratoren[6] und manchmal auch von Benutzern[7] zur Fehleranalyse verwendet. Nicht selten ist die Ausgabe von dmesg auch ein wesentlicher Teil für Fehlerberichte (englisch bug reports) bei Linux.[8][9]

Beispiel, bei dem das Kernel-Log auf einer Unix-Shell unter Linux in die Datei dmesg.log (im aktuellen Verzeichnis) gespeichert wird:

# dmesg > dmesg.log

Beispiel für eine spezifische Fehleranalyse (die Zeichenkette „i915“ als Suchfilter soll Meldungen des gleichnamigen Kernel-Moduls isoliert zeigen):

# dmesg | grep i915
[    5.552078] i915 0000:00:02.0: [drm] VT-d active for gfx access 
[    5.553821] i915 0000:00:02.0: vgaarb: deactivate vga console 
[    5.553881] i915 0000:00:02.0: [drm] DMAR active, disabling use of stolen memory 
[    5.555138] i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem 
[    5.604661] [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0 
[    5.803113] fbcon: i915drmfb (fb0) is primary device 
[    6.691361] i915 0000:00:02.0: [drm] *ERROR* uncleared fifo underrun on pipe A 
[    6.691368] i915 0000:00:02.0: [drm] *ERROR* CPU pipe A FIFO underrun 
[    6.693280] i915 0000:00:02.0: [drm] *ERROR* uncleared pch fifo underrun on pch transcoder A 
[    6.693287] i915 0000:00:02.0: [drm] *ERROR* PCH transcoder A FIFO underrun 
[    6.707693] snd_hda_intel 0000:00:1b.0: bound 0000:00:02.0 (ops i915_audio_component_bind_ops) 
[    7.369510] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device

Alternativen Bearbeiten

Einige Unix- und Unix-artige Betriebssysteme führen eigene bzw. erweiterte Logs, die Teile der Kernel-Systemnachrichten enthalten. So kann unter Linux die Datei /var/log/messages ausgegeben werden, die von syslogd geführt wird. Unter macOS finden sich die Nachrichten unter /var/log/kernel.log und /var/log/system.log.[10]

Moderne init-Systeme wie systemd integrieren die Funktionalität von dmesg ebenfalls.

Siehe auch Bearbeiten

  • syslogd(8) – siehe syslog
  • util-linuxdmesg ist in diesem Standardpaket für das Betriebssystem Linux enthalten

Weblinks Bearbeiten

Anmerkungen Bearbeiten

  1. dmesg(8) – display the system message buffer. (Manpage) In: OpenBSD 6.0. 13. März 2015, abgerufen am 30. Juni 2021 (englisch): „HISTORY – The dmesg command appeared in 4.0BSD.“
  2. dmesg(8) – system diagnostic messages. (Manpage) In: UNIX 8th Edition Manual. Abgerufen am 30. Juni 2021 (englisch).
  3. a b dmesg(1) – den Kernel-Ringpuffer anzeigen und steuern. (Manpage) In: Debian. Juni 2012, abgerufen am 30. Juni 2021.
  4. Michael Larabel: In 2019, Most Linux Distributions Still Aren't Restricting Dmesg Access. In: Phoronix.com. 20. April 2019, abgerufen am 8. August 2023 (englisch): „Going back to the late Linux 2.6 kernel days has been …[a]… Kconfig option to restrict access to dmesg in the name of security and not allowing unprivileged users from accessing this system log. While it's been brought up from time to time, Linux distributions are still generally allowing any user access to dmesg even though it may contain information that could help bad actors exploit the system.“
  5. Michael Larabel: Ubuntu 20.10 Looking At Restricting Access To Kernel Logs With dmesg. In: Phoronix.com. 17. Juni 2020, abgerufen am 8. August 2023 (englisch).
  6. Ken Hess: Linux tools: Getting the message out with dmesg. Red Hat, 22. Januar 2020, abgerufen am 30. Juni 2021 (englisch): „The dmesg command is a sysadmin's best friend for troubleshooting.“
  7. David Wolski: Programm-Abstürzen in Linux auf die Spur kommen. In: PC-Welt. 23. Januar 2016, abgerufen am 30. Juni 2021.
  8. Filing Kernel Bug reports. In: Ubuntu Wiki. 23. Juli 2016, abgerufen am 30. Juni 2021 (englisch).
  9. Bug hunting. In: The Linux Kernel Docs. Abgerufen am 30. Juni 2021 (englisch).
  10. Follow System & Kernel Logs from Command Line in Mac OS X. OS X Daily, 20. April 2011, abgerufen am 30. Juni 2021 (englisch).