Der Linux-Kernel ist der Kern des Betriebssystems, der den Zugriff auf Systemressourcen wie CPU, E/A-Geräte, physischen Speicher und Dateisysteme steuert. Während des Bootvorgangs und wenn das System läuft, schreibt der Kernel verschiedene Meldungen in den Ringpuffer des Kernels. Diese Nachrichten enthalten verschiedene Informationen über den Betrieb des Systems.
Der Kernel-Ringpuffer ist ein Teil des physischen Speichers, der die Protokollmeldungen des Kernels enthält. Es hat eine feste Größe, was bedeutet, dass die älteren Protokolleinträge überschrieben werden, sobald der Puffer voll ist.
Die dmesg
Das Befehlszeilendienstprogramm wird zum Drucken und Steuern des Kernel-Ringpuffers in Linux und anderen Unix-ähnlichen Betriebssystemen verwendet. Es ist nützlich, um Kernel-Boot-Meldungen zu untersuchen und Hardware-bezogene Probleme zu debuggen.
In diesem Tutorial behandeln wir die Grundlagen von dmesg
Befehl.
Verwendung von dmesg
Befehl #
Die Syntax für dmesg
Befehl lautet wie folgt:
dmesg [OPTIONS]
Beim Aufruf ohne Optionen dmesg
schreibt alle Meldungen aus dem Ringpuffer des Kernels auf die Standardausgabe:
dmesg
Standardmäßig können alle Benutzer dmesg
ausführen Befehl. Allerdings ist auf manchen Systemen der Zugriff auf dmesg
kann für Nicht-Root-Benutzer eingeschränkt sein. In dieser Situation beim Aufruf von dmesg
Sie erhalten eine Fehlermeldung wie unten:
dmesg: read kernel buffer failed: Operation not permitted
Der Kernel-Parameter kernel.dmesg_restrict
gibt an, ob nicht privilegierte Benutzer dmesg
verwenden können um Meldungen aus dem Protokollpuffer des Kernels anzuzeigen. Um die Beschränkungen aufzuheben, setzen Sie es auf Null:
sudo sysctl -w kernel.dmesg_restrict=0
Normalerweise enthält die Ausgabe viele Informationszeilen, sodass nur der letzte Teil der Ausgabe sichtbar ist. Um jeweils nur eine Seite anzuzeigen, leiten Sie die Ausgabe an ein Pager-Dienstprogramm wie less
weiter oder more
:
dmesg --color=always | less
Der --color=always
wird verwendet, um die farbige Ausgabe beizubehalten.
Wenn Sie die Puffernachrichten filtern möchten, verwenden Sie grep
. Um beispielsweise nur die USB-bezogenen Meldungen anzuzeigen, würden Sie Folgendes eingeben:
dmesg | grep -i usb
dmesg
liest die vom Kernel generierten Nachrichten aus /proc/kmsg
virtuelle Datei. Diese Datei stellt eine Schnittstelle zum Ringpuffer des Kernels bereit und kann nur von einem Prozess geöffnet werden. Wenn syslog
auf Ihrem System läuft und Sie versuchen, die Datei mit cat
zu lesen , oder less
, wird der Befehl hängen bleiben.
Das syslog
Daemon gibt Kernel-Meldungen nach /var/log/dmesg
aus , sodass Sie auch diese Protokolldatei verwenden können:
cat /var/log/dmesg
Formatieren von dmesg
Ausgabe #
Die dmesg
Der Befehl bietet eine Reihe von Optionen, mit denen Sie die Ausgabe formatieren und filtern können.
Eine der am häufigsten verwendeten Optionen von dmesg
ist -H
(--human
), wodurch die menschenlesbare Ausgabe aktiviert wird. Diese Option leitet die Befehlsausgabe in einen Pager:
dmesg -H
Um menschenlesbare Zeitstempel zu drucken, verwenden Sie das -T
(--ctime
) Option:
dmesg -T
[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
Das Zeitstempelformat kann auch mit --time-format <format>
festgelegt werden Option, die ctime, reltime, delta, notime oder iso sein kann. Um beispielsweise das Delta-Format zu verwenden, würden Sie Folgendes eingeben:
dmesg --time-format=delta
Sie können auch zwei oder mehr Optionen kombinieren:
dmesg -H -T
Um die Ausgabe von dmesg
anzusehen Befehl in Echtzeit verwenden Sie das -w
(--follow
) Option:
dmesg --follow
Filterung von dmesg
Ausgabe #
Sie können dmesg
einschränken Ausgabe an bestimmte Einrichtungen und Ebenen.
Die Einrichtung stellt den Prozess dar, der die Nachricht erstellt hat. dmesg
unterstützt die folgenden Protokollfunktionen:
kern
- Kernel-Meldungenuser
- Nachrichten auf Benutzerebenemail
- Mailsystemdaemon
- System-Daemonsauth
- Sicherheits-/Autorisierungsmeldungensyslog
- interne syslogd-Meldungenlpr
- Zeilendrucker-Subsystemnews
- Netzwerknachrichten-Subsystem
Das -f
(--facility <list>
)-Option können Sie die Ausgabe auf bestimmte Einrichtungen beschränken. Die Option akzeptiert eine oder mehrere durch Kommas getrennte Einrichtungen.
Um beispielsweise nur die Meldungen der Kernel- und System-Daemons anzuzeigen, würden Sie Folgendes verwenden:
dmesg -f kern,daemon
Jede Protokollnachricht ist mit einer Protokollebene verknüpft, die die Wichtigkeit der Nachricht anzeigt. dmesg
unterstützt die folgenden Protokollebenen:
emerg
- System ist unbrauchbaralert
- Es muss sofort gehandelt werdencrit
- kritische Zuständeerr
- Fehlerbedingungenwarn
- Warnbedingungennotice
- normaler, aber signifikanter Zustandinfo
- informativdebug
- Meldungen auf Debug-Ebene
Das -l
(--level <list>
) schränkt die Ausgabe auf definierte Ebenen ein. Die Option akzeptiert eine oder mehrere durch Kommas getrennte Ebenen.
Der folgende Befehl zeigt nur die Fehler- und kritischen Meldungen an:
dmesg -l err,crit
Löschen des Ringpuffers #
Das -C
(--clear
)-Option können Sie den Ringpuffer löschen:
sudo dmesg -C
Nur root oder Benutzer mit sudo-Berechtigungen können den Puffer löschen.
Um den Inhalt des Puffers vor dem Löschen auszudrucken, verwenden Sie -c
(--read-clear
) Option:
sudo dmesg -c
Wenn Sie die aktuelle dmesg
speichern möchten sich in einer Datei anmeldet, bevor sie gelöscht wird, leiten Sie die Ausgabe in eine Datei um:
dmesg > dmesg_messages
Schlussfolgerung #
Die dmesg
Mit dem Befehl können Sie den Ringpuffer des Kernels anzeigen und steuern. Es kann sehr nützlich sein, wenn Kernel- oder Hardwareprobleme behoben werden.
Geben Sie man dmesg
ein in Ihrem Terminal für Informationen über alle verfügbaren dmesg
Optionen.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.