Wie man prüft, ob ein Kernel-Ringpuffer in Linux aktiv ist

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie überprüfen können, ob der Kernel-Ringpuffer (kernel ring buffer) in Linux aktiv ist. Der Kernel-Ringpuffer ist eine wichtige Komponente für das Verständnis von Systemereignissen und die Fehlerbehebung. Sie werden drei Methoden zur Zugriff auf und Prüfung seines Inhalts erkunden: die Verwendung des Befehls dmesg, um den Puffer direkt anzuzeigen, die Überprüfung seiner Existenz und seines Inhalts über die Datei /proc/kmsg und schließlich die Nutzung von journalctl, um die vom systemd-Journal verwalteten Kernellogs zu untersuchen. Diese Schritte vermitteln Ihnen praktische Fähigkeiten zur Überwachung und Analyse von Kernel-Nachrichten auf Ihrem Linux-System.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/less("File Paging") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/cat -.-> lab-558723{{"Wie man prüft, ob ein Kernel-Ringpuffer in Linux aktiv ist"}} linux/less -.-> lab-558723{{"Wie man prüft, ob ein Kernel-Ringpuffer in Linux aktiv ist"}} linux/grep -.-> lab-558723{{"Wie man prüft, ob ein Kernel-Ringpuffer in Linux aktiv ist"}} end

Puffer mit dmesg überprüfen

In diesem Schritt lernen Sie, wie Sie den Befehl dmesg verwenden, um den Kernel-Ringpuffer (kernel ring buffer) anzuzeigen. Der Kernel-Ringpuffer ist ein spezieller Bereich im Speicher, in dem der Linux-Kernel Nachrichten über Hardware, Gerätetreiber und Systemereignisse speichert. Diese Nachrichten sind für die Fehlerbehebung und das Verständnis dessen, was auf niedriger Ebene in Ihrem System passiert, von entscheidender Bedeutung.

Stellen Sie sich den Kernel-Ringpuffer als ein Logbuch für den Kernel vor. Wenn etwas Wichtiges passiert, wie die Erkennung eines Geräts oder das Auftreten eines Fehlers, schreibt der Kernel eine Nachricht in diesen Puffer. dmesg ist das Tool, mit dem Sie diese Nachrichten lesen können.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist. Sie können dies tun, indem Sie auf das Symbol Xfce Terminal auf der linken Seite Ihres Desktops klicken.

Geben Sie jetzt den folgenden Befehl ein und drücken Sie die Eingabetaste:

dmesg

Sie werden eine Vielzahl von Ausgaben in Ihrem Terminal sehen, die vorbei scrollen. Dies ist der Inhalt des Kernel-Ringpuffers. Die Ausgabe könnte in etwa so aussehen (der genaue Inhalt variiert je nach Ihrem System und der Laufzeit):

[    0.000000] Linux version 5.15.0-xx-generic (buildd@lcy02-amd64-xx) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #xx-Ubuntu SMP Tue Feb 20 15:48:58 UTC 2024
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-xx-generic root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro console=ttyS0,115200
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
...
[   10.123456] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[   10.567890] usb 1-1: New USB device found, idVendor=xxxx, idProduct=xxxx
[   10.567890] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
...

Die Zeitstempel am Anfang jeder Zeile geben die Zeit an, die seit dem Systemstart vergangen ist.

Da die Ausgabe sehr lang sein kann, ist es oft sinnvoll, die Ausgabe von dmesg an einen Pager wie less oder more weiterzuleiten. Dies ermöglicht es Ihnen, die Ausgabe seitenweise zu durchsuchen.

Versuchen Sie diesen Befehl:

dmesg | less

Jetzt können Sie die Pfeiltasten verwenden, um nach oben und unten zu scrollen, und q drücken, um less zu beenden.

Sie können auch die Ausgabe von dmesg mit grep filtern, um nach bestimmten Schlüsselwörtern zu suchen. Beispielsweise können Sie die folgenden Nachrichten zu USB-Geräten anzeigen:

dmesg | grep -i usb

Die Option -i macht die Suche unabhängig von der Groß- und Kleinschreibung.

Die Verwendung von dmesg ist eine grundlegende Fähigkeit zur Diagnose von Hardwareproblemen und zum Verständnis des Systemstartvorgangs in Linux.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.

Puffer in /proc/kmsg überprüfen

Im vorherigen Schritt haben Sie den Befehl dmesg verwendet, um den Kernel-Ringpuffer (kernel ring buffer) anzuzeigen. Jetzt wollen wir untersuchen, woher dmesg seine Informationen bezieht. Der Kernel-Ringpuffer wird als virtuelle Datei im /proc-Dateisystem, genauer gesagt unter /proc/kmsg, zugänglich gemacht.

Das /proc-Dateisystem ist ein spezielles Dateisystem in Linux, das Informationen über Prozesse und andere Systeminformationen bereitstellt. Es ist eine Möglichkeit für den Kernel, mit Benutzerspace-Programmen zu kommunizieren. Dateien in /proc sind keine echten Dateien auf der Festplatte; sie werden vom Kernel erst beim Zugriff dynamisch erzeugt.

Die Datei /proc/kmsg enthält dieselben Kernel-Nachrichten, die dmesg anzeigt. Allerdings ist das direkte Lesen aus /proc/kmsg etwas anders. dmesg verarbeitet und formatiert die Ausgabe für eine einfachere Lesbarkeit, während das direkte Lesen von /proc/kmsg Ihnen die Roh-Nachrichten liefert.

Versuchen wir, den Inhalt von /proc/kmsg mit dem Befehl cat zu lesen.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist.

Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

cat /proc/kmsg

Sie sehen möglicherweise eine Ausgabe, aber diese ist möglicherweise nicht so einfach zu lesen wie die dmesg-Ausgabe. Außerdem kann das Lesen von /proc/kmsg manchmal blockieren, wenn es keine neuen Nachrichten gibt, oder es können Nachrichten angezeigt werden, die bereits gelesen wurden.

<level>message
<level>message
...

Der <level>-Teil gibt die Log-Ebene der Nachricht an (z. B. kritisch, Fehler, Warnung, Info, Debug).

Obwohl Sie /proc/kmsg direkt lesen können, ist dmesg das Standard- und empfohlene Tool zum Anzeigen des Kernel-Ringpuffers, da es bessere Formatierungs- und Filteroptionen bietet. Das Verständnis, dass /proc/kmsg die Quelle ist, hilft Ihnen zu verstehen, wie dmesg im Hintergrund funktioniert.

Für die meisten praktischen Zwecke werden Sie dmesg verwenden, anstatt direkt aus /proc/kmsg zu lesen. Dieser Schritt dient hauptsächlich dazu, Ihnen die zugrunde liegende Quelle der dmesg-Ausgabe aufzuzeigen.

Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren, in dem wir uns ein moderneres Logging-System ansehen.

Protokolle mit journalctl untersuchen

In den vorherigen Schritten haben Sie über den Kernel-Ringpuffer (kernel ring buffer) und die Anzeige seines Inhalts mit dmesg gelernt. Während dmesg hervorragend für Kernel-Nachrichten geeignet ist, verwenden moderne Linux-Systeme ein umfassenderes Protokollierungssystem namens systemd-journald. Der Befehl journalctl ist das primäre Tool zur Interaktion mit dem systemd-journald-Journal.

systemd-journald sammelt Protokollnachrichten aus verschiedenen Quellen, einschließlich des Kernels (wie die Nachrichten, die Sie mit dmesg gesehen haben), Systemdiensten, Anwendungen und sogar der Standardausgabe und des Standardfehlers von Prozessen. Es speichert diese Protokolle in einem strukturierten, indizierten Format, was die Suche und Filterung von Nachrichten erleichtert.

Lassen Sie uns den journalctl-Befehl erkunden.

Öffnen Sie Ihr Terminal, wenn es noch nicht geöffnet ist.

Geben Sie den folgenden Befehl ein und drücken Sie die Eingabetaste:

journalctl

Dieser Befehl zeigt alle von systemd-journald gesammelten Protokollnachrichten an. Ähnlich wie bei dmesg kann die Ausgabe sehr lang sein und wird normalerweise automatisch an einen Pager wie less weitergeleitet.

-- Journal begins at Tue 2024-07-23 10:00:00 UTC, ends at Tue 2024-07-23 10:30:00 UTC. --
Jul 23 10:00:01 hostname systemd[1]: Starting Network Manager...
Jul 23 10:00:02 hostname kernel: Linux version 5.15.0-xx-generic (...)
Jul 23 10:00:03 hostname systemd[1]: Started Network Manager.
Jul 23 10:00:04 hostname systemd[1]: Starting OpenSSH server daemon...
...

Sie können die Pfeiltasten verwenden, um zu scrollen, und q drücken, um den Pager zu verlassen.

journalctl verfügt über viele Optionen zur Filterung von Protokollen. Hier sind einige Beispiele:

Um nur Kernel-Nachrichten anzuzeigen (ähnlich wie dmesg):

journalctl -k

Um Protokolle eines bestimmten Dienstes anzuzeigen, beispielsweise des SSH-Dienstes:

journalctl -u ssh.service

Um Protokolle seit einem bestimmten Zeitpunkt anzuzeigen, beispielsweise seit "heute":

journalctl --since "today"

Um die neuesten Protokolle anzuzeigen und neue Nachrichten sofort zu verfolgen (ähnlich wie tail -f):

journalctl -f

Drücken Sie Ctrl+C, um den journalctl -f-Befehl zu beenden.

journalctl ist ein leistungsstarkes Tool für die Systemadministration und die Fehlerbehebung. Es bietet einen zentralen Ort für Protokolle und flexible Optionen für die Anzeige und Filterung dieser Protokolle.

Experimentieren Sie in Ihrem Terminal mit einigen der journalctl-Optionen, um zu sehen, wie sie die Ausgabe beeinflussen.

Klicken Sie auf Weiter, um dieses Lab abzuschließen.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie überprüfen können, ob der Kernel-Ringpuffer (kernel ring buffer) in Linux aktiv ist. Sie haben begonnen, indem Sie den Befehl dmesg verwendet haben, um den Inhalt des Kernel-Ringpuffers anzuzeigen. Dieser Puffer speichert wichtige Nachrichten über Hardware, Gerätetreiber und Systemereignisse. Sie haben gesehen, wie dmesg diese Nachrichten mit Zeitstempeln anzeigt und so ein Low-Level-Log der Systemaktivität liefert.

Sie haben auch gelernt, dass die Ausgabe von dmesg umfangreich sein kann und dass es nützlich ist, diese Ausgabe an einen Pager wie less oder more weiterzuleiten, um die Ausgabe zu navigieren. Dieser erste Schritt hat die primäre Methode zur Zugriff auf den Inhalt des Kernel-Ringpuffers gezeigt und dessen Rolle bei der Systemüberwachung und -fehlerbehebung verdeutlicht.