So verwenden Sie den dmesg-Befehl unter Linux

Mit dem Befehl dmesg können Sie in die verborgene Welt der Linux-Startprozesse blicken. Überprüfen und überwachen Sie Hardwaregeräte- und Treibernachrichten aus dem eigenen Ringpuffer des Kernels mit dem „Freund des Fehlersuchers“.

So funktioniert der Ringpuffer von Linux

Bei Linux- und Unix-ähnlichen Computern sind Booten und Starten zwei unterschiedliche Phasen der Abfolge von Ereignissen, die beim Einschalten des Computers stattfinden.

Die Bootprozesse (BIOS oder UEFI, MBR, und RODEN) Führen Sie die Initialisierung des Systems bis zu dem Punkt durch, an dem der Kernel in den Speicher geladen und mit der ursprünglichen Ramdisk verbunden wird (initrd oder initramfs), und systemd ist gestartet.

Die Startup-Prozesse greifen dann zum Taktstock und schließen die Initialisierung des Betriebssystems ab. In den sehr frühen Stadien der Initialisierung werden Logging-Daemons wie z syslogd oder rsyslogd sind noch nicht in Betrieb. Um zu vermeiden, dass bemerkenswerte Fehlermeldungen und Warnungen aus dieser Phase der Initialisierung verloren gehen, enthält der Kernel a Ringpuffer die es als Nachrichtenspeicher verwendet.

Ein Ringpuffer ist ein für Nachrichten reservierter Speicherplatz. Es hat ein einfaches Design und eine feste Größe. Wenn es voll ist, überschreiben neuere Nachrichten die ältesten Nachrichten. Konzeptionell kann man es sich vorstellen als „Ringpuffer.“

Der Kernel-Ringpuffer speichert Informationen wie die Initialisierungsnachrichten von Gerätetreibern, Nachrichten von der Hardware und Nachrichten von Kernelmodulen. Da er diese Startmeldungen auf niedriger Ebene enthält, ist der Ringpuffer ein guter Ort, um eine Untersuchung von Hardwarefehlern oder anderen Startproblemen zu starten.

Aber gehen Sie nicht mit leeren Händen. Nehmen Sie dmesg mit.

Der dmesg-Befehl

Mit dem dmesg-Befehl können Sie um die im Ringpuffer gespeicherten Nachrichten zu überprüfen. Standardmäßig müssen Sie sudo verwenden, um dmesg zu verwenden.

sudo dmesg

Alle Meldungen im Ringpuffer werden im Terminalfenster angezeigt.

Das war eine Flut. Was wir natürlich tun müssen, ist, es durch weniger zu leiten:

sudo dmesg | less

Jetzt können wir durch die Nachrichten scrollen und nach interessanten Elementen suchen.

Sie können die Suchfunktion innerhalb von less verwenden, um die für Sie interessanten Artikel und Begriffe zu finden und hervorzuheben. Starten Sie die Suchfunktion, indem Sie die Schrägstrichtaste „/“ in less drücken.

Entfernen der Notwendigkeit von sudo

Wenn Sie vermeiden möchten, dass Sie sudo jedes Mal verwenden müssen, wenn Sie dmesg verwenden, können Sie diesen Befehl verwenden. Aber seien Sie sich bewusst: Es ermöglicht jedem mit einem Benutzerkonto auf Ihrem Computer, dmesg zu verwenden, ohne sudo verwenden zu müssen.

sudo sysctl -w kernel.dmesg_restrict=0

Farbausgabe erzwingen

Standardmäßig wird dmesg wahrscheinlich so konfiguriert sein, dass eine farbige Ausgabe erzeugt wird. Ist dies nicht der Fall, können Sie dmesg anweisen, seine Ausgabe mit der Option -L (Farbe) einzufärben.

sudo dmesg -L

Um zu erzwingen, dass dmesg standardmäßig immer eine farbige Anzeige verwendet, verwenden Sie diesen Befehl:

sudo dmesg --color=always

Menschliche Zeitstempel

Standardmäßig verwendet dmesg eine Zeitstempelnotation von Sekunden und Nanosekunden seit dem Kernel gestartet. Um dies in einem benutzerfreundlicheren Format zu rendern, verwenden Sie die Option -H (menschlich).

sudo dmesg -H

Dies führt dazu, dass zwei Dinge passieren.

  So fügen Sie Ihrem $PATH unter Linux ein Verzeichnis hinzu

Die Ausgabe wird automatisch in weniger angezeigt.
Die Zeitstempel zeigen einen Zeitstempel mit Datum und Uhrzeit in Minutenauflösung. Die Nachrichten, die in jeder Minute aufgetreten sind, sind mit den Sekunden und Nanosekunden seit Beginn dieser Minute gekennzeichnet.

Von Menschen lesbare Zeitstempel

Wenn Sie keine Nanosekunden-Genauigkeit benötigen, aber Zeitstempel möchten, die leichter zu lesen sind als die Standardeinstellungen, verwenden Sie die Option -T (menschlich lesbar). (Es ist ein wenig verwirrend. -H ist die „menschliche“ Option, -T ist die „menschlich lesbare“ Option.)

sudo dmesg -T

Die Zeitstempel werden als Standarddaten und -zeiten gerendert, die Auflösung ist jedoch auf eine Minute reduziert.

Alles, was innerhalb einer Minute passiert ist, hat denselben Zeitstempel. Wenn Sie sich nur um die Abfolge der Ereignisse kümmern, ist dies gut genug. Beachten Sie auch, dass Sie an der Eingabeaufforderung zurückgeladen werden. Diese Option ruft nicht automatisch less auf.

Live-Events ansehen

Um Nachrichten beim Eintreffen im Kernel-Ringpuffer anzuzeigen, verwenden Sie die Option –follow (auf Nachrichten warten). Dieser Satz mag ein wenig seltsam erscheinen. Wenn der Ringpuffer verwendet wird, um Meldungen von Ereignissen zu speichern, die während der Startsequenz stattfinden, wie können dann Live-Meldungen im Ringpuffer ankommen, wenn der Computer hochgefahren ist?

Alles, was eine Änderung der an Ihren Computer angeschlossenen Hardware verursacht, führt dazu, dass Nachrichten an den Kernel-Ringpuffer gesendet werden. Aktualisieren oder fügen Sie ein Kernel-Modul hinzu, und Sie sehen Ringpuffer-Meldungen zu diesen Änderungen. Wenn Sie ein USB-Laufwerk anschließen oder ein Bluetooth-Gerät anschließen oder trennen, werden Meldungen in der dmesg-Ausgabe angezeigt. Auch virtuelle Hardware führt dazu, dass neue Nachrichten im Ringpuffer erscheinen. Starten Sie eine virtuelle Maschine, und Sie sehen, wie neue Informationen im Ringpuffer ankommen.

sudo dmesg --follow

Beachten Sie, dass Sie nicht zur Eingabeaufforderung zurückkehren. Wenn neue Nachrichten erscheinen, werden diese von dmesg am unteren Rand des Terminalfensters angezeigt.

  Schatten des Krieges unter Linux

Sogar das Einhängen einer CD-ROM wird als Änderung angesehen, da Sie den Inhalt der CD-ROM in den Verzeichnisbaum gepfropft haben.

Um den Echtzeit-Feed zu verlassen, drücken Sie Strg+C.

Abrufen der letzten zehn Nachrichten

Verwenden Sie den Schwanzbefehl die letzten zehn abrufen Kernel-Ringpuffernachrichten. Natürlich können Sie beliebig viele Nachrichten abrufen. Zehn ist nur unser Beispiel.

sudo dmesg | last -10

Die letzten zehn Nachrichten werden abgerufen und im Terminalfenster aufgelistet.

Nach bestimmten Begriffen suchen

Leiten Sie die Ausgabe von dmesg durch grep nach bestimmten Zeichenfolgen oder Mustern suchen. Hier verwenden wir die Option -i (Groß-/Kleinschreibung ignorieren), damit die Groß-/Kleinschreibung von übereinstimmenden Zeichenfolgen nicht berücksichtigt wird. unsere Ergebnisse umfassen „usb“ und „USB“ und jede andere Kombination aus Klein- und Großbuchstaben.

sudo dmesg | grep -i usb

Die hervorgehobenen Suchergebnisse werden in Groß- und Kleinbuchstaben angezeigt.

Wir können die Nachrichten isolieren, die Verweise auf die erste enthalten SCSI Festplatte auf dem System sda. (Eigentlich wird sda heutzutage auch verwendet für die erste SATA-Festplatte, und für USB-Laufwerke.)

sudo dmesg | grep -i sda

Alle Nachrichten, die sda ​​erwähnen, werden abgerufen und im Terminalfenster aufgelistet.

Um grep nach mehreren Begriffen gleichzeitig suchen zu lassen, verwenden Sie die Option -E (regulären Ausdruck erweitern). Sie müssen die Suchbegriffe in einer Zeichenfolge in Anführungszeichen mit Pipe „|“ angeben. Trennzeichen zwischen den Suchbegriffen:

sudo dmesg | grep -E "memory|tty|dma"

sudo dmesg |  grep -E

Jede Nachricht, die einen der Suchbegriffe erwähnt, wird im Terminalfenster aufgelistet.

Ausgabe von sudo dmesg |  grep -E

Verwenden von Protokollebenen

Jeder Nachricht, die im Kernel-Ringpuffer protokolliert wird, ist eine Ebene angehängt. Die Ebene stellt die Bedeutung der Informationen in der Nachricht dar. Die Level sind:

emerg: System ist unbrauchbar.
Achtung: Es müssen sofort Maßnahmen ergriffen werden.
crit: Kritische Bedingungen.
err: Fehlerbedingungen.
warnen: Warnbedingungen.
Hinweis: Normaler, aber signifikanter Zustand.
Infos: Information.
debug: Meldungen auf Debug-Ebene.

Wir können dmesg veranlassen, Nachrichten zu extrahieren, die einer bestimmten Ebene entsprechen, indem wir die Option -l (Ebene) verwenden und den Namen der Ebene als Befehlszeilenparameter übergeben. Verwenden Sie diesen Befehl, um nur Meldungen auf „Informationsebene“ anzuzeigen:

sudo dmesg -l info

Alle aufgelisteten Nachrichten sind Informationsnachrichten. Sie enthalten keine Fehler oder Warnungen, sondern nur nützliche Benachrichtigungen.

  So sichern Sie eine Linux-Installation: Die Grundlagen

Kombinieren Sie zwei oder mehr Protokollebenen in einem Befehl, um Nachrichten mehrerer Protokollebenen abzurufen:

sudo dmesg -l debug,notice

Die Ausgabe von dmesg ist eine Mischung aus Meldungen jeder Protokollebene:

Die Anlagenkategorien

Die dmesg-Nachrichten sind in Kategorien eingeteilt, die als „Einrichtungen“ bezeichnet werden. Die Liste der Einrichtungen lautet:

kern: Kernel-Nachrichten.
user: Nachrichten auf Benutzerebene.
mail: Mailsystem.
Dämon: System-Dämonen.
auth: Sicherheits-/Autorisierungsmeldungen.
syslog: Interne syslogd-Meldungen.
lpr: Zeilendrucker-Subsystem.
Nachrichten: Netzwerknachrichten-Subsystem.

Wir können dmesg bitten, seine Ausgabe so zu filtern, dass nur Nachrichten in einer bestimmten Einrichtung angezeigt werden. Dazu müssen wir die Option -f (Einrichtung) verwenden:

sudo dmesg -f daemon

dmesg listet alle Meldungen zu Daemons im Terminalfenster auf.

Wie bei den Ebenen können wir dmesg bitten, Nachrichten von mehr als einer Einrichtung gleichzeitig aufzulisten:

sudo dmesg -f syslog, daemon

Die Ausgabe ist eine Mischung aus Syslog- und Daemon-Log-Meldungen.

Kombination von Einrichtung und Ebene

Die Option -x (decode) bewirkt, dass dmesg die Einrichtung und Ebene als lesbare Präfixe für jede Zeile anzeigt.

sudo dmesg -x

Die Einrichtung und das Niveau sind am Anfang jeder Zeile zu sehen:

Der erste hervorgehobene Abschnitt ist eine Nachricht von der „Kernel“-Einrichtung mit einer „Benachrichtigungsebene“. Der zweite hervorgehobene Abschnitt ist eine Nachricht von der „Kernel“-Einrichtung mit einer Ebene von „Info“.

Das ist großartig, aber warum?

Kurz gesagt, Fehlersuche.

Wenn Sie Probleme damit haben, dass eine Hardware nicht erkannt wird oder sich nicht richtig verhält, kann dmesg etwas Licht in das Problem bringen.

Verwenden Sie dmesg, um Nachrichten von der höchsten Ebene nach unten durch jede niedrigere Ebene zu überprüfen und nach Fehlern oder Warnungen zu suchen, die das Hardwareelement erwähnen oder einen Einfluss auf das Problem haben könnten.
Verwenden Sie dmesg, um nach Erwähnungen der entsprechenden Einrichtung zu suchen, um zu sehen, ob sie nützliche Informationen enthalten.
Leiten Sie dmesg durch grep und suchen Sie nach verwandten Zeichenfolgen oder Kennungen wie Produkthersteller oder Modellnummern.
Leiten Sie dmesg durch grep und suchen Sie nach allgemeinen Begriffen wie „gpu“ oder „speicher“ oder nach Begriffen wie „ausgefallen“, „fehlgeschlagen“ oder „unfähig“.
Verwenden Sie die Option –follow und sehen Sie sich dmesg-Nachrichten in Echtzeit an.

Fröhliches Jagen.