Dmesg
# Dmesg

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

## Funktionsweise

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. 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.
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

dmesg wird gerne von Systemadministratoren und manchmal auch von Benutzern zur Fehleranalyse verwendet. Nicht selten ist die Ausgabe von dmesg auch ein wesentlicher Teil für Fehlerberichte (englisch bug reports) bei Linux.
Beispiel, bei dem das Kernel-Log auf einer Unix-Shell unter Linux in die Datei dmesg.log (im aktuellen Verzeichnis) gespeichert wird:
Beispiel für eine spezifische Fehleranalyse (die Zeichenkette „i915“ als Suchfilter soll Meldungen des gleichnamigen Kernel-Moduls isoliert zeigen):

## Alternativen

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.
Moderne init-Systeme wie systemd integrieren die Funktionalität von dmesg ebenfalls.