Website-Suche

7 „dmesg“-Befehle zur Fehlerbehebung und zum Sammeln von Informationen von Linux-Systemen


Der Befehl „dmesg“ zeigt die Nachrichten aus dem Kernel-Ringpuffer an. Ein System durchläuft mehrere Runlevel, von denen wir viele Informationen wie Systemarchitektur, CPU, angeschlossenes Gerät, RAM usw. erhalten können. Beim Hochfahren des Computers wird ein Kernel (Kern eines Betriebssystems) in den Speicher geladen. Während dieses Zeitraums werden zahlreiche Meldungen angezeigt, in denen wir die vom Kernel erkannten Hardwaregeräte sehen können.

Lesen Sie auch: 10 Linux-Befehle zum Sammeln von System- und Hardwareinformationen

Die Meldungen sind für die Diagnose im Falle eines Geräteausfalls von großer Bedeutung. Wenn wir ein Hardwaregerät im System anschließen oder trennen, erfahren wir mithilfe des Befehls dmesg im Handumdrehen erkannte oder getrennte Informationen. Der Befehl dmesg ist auf den meisten Linux- und Unix-basierten Betriebssystemen verfügbar.

Lassen Sie uns anhand der unten erläuterten praktischen Beispiele etwas Licht auf das bekannteste Tool namens „dmesg“ werfen. Die genaue Syntax von dmesg lautet wie folgt.

dmseg [options...]

1. Listen Sie alle geladenen Treiber im Kernel auf

Wir können Textmanipulationstools verwenden, z. B. „more“, „tail“, „less“ oder „grep“. ' mit dmesg-Befehl. Da die Ausgabe des dmesg-Protokolls nicht auf eine einzelne Seite passt, werden die Protokolle bei Verwendung von dmesg mit dem Befehl „pipe more“ oder „less“ auf einer einzelnen Seite angezeigt.

[[email  ~]# dmesg | more
[[email  ~]# dmesg | less
Beispielausgabe
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 
(Ubuntu 3.11.0-13.20-generic 3.11.6)
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   NSC Geode by NSC
[    0.000000]   Cyrix CyrixInstead
[    0.000000]   Centaur CentaurHauls
[    0.000000]   Transmeta GenuineTMx86
[    0.000000]   Transmeta TransmetaCPU
[    0.000000]   UMC UMC UMC UMC
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
[    0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
.....

Lesen Sie auch: Verwalten Sie Linux-Dateien effektiv mit den Befehlen head, tail und cat

2. Listen Sie alle erkannten Geräte auf

Um herauszufinden, welche Festplatten vom Kernel erkannt wurden, können Sie nach dem Schlüsselwort „sda“ zusammen mit „grep“ suchen, wie unten gezeigt.

[[email  ~]# dmesg | grep sda

[    1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB)
[    1.281014] sd 2:0:0:0: [sda] Write Protect is off
[    1.281016] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00
[    1.281039] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    1.359585]  sda: sda1 sda2 < sda5 sda6 sda7 sda8 >
[    1.360052] sd 2:0:0:0: [sda] Attached SCSI disk
[    2.347887] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[   22.928440] Adding 3905532k swap on /dev/sda6.  Priority:-1 extents:1 across:3905532k FS
[   23.950543] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro
[   24.134016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null)
[   24.330762] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null)
[   24.561015] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null)

HINWEIS: „sda“ ist die erste SATA-Festplatte, „sdb“ ist die zweite SATA-Festplatte und so weiter. Suchen Sie mit „hda“ oder „hdb“, wenn es sich um eine IDE-Festplatte handelt.

3. Drucken Sie nur die ersten 20 Zeilen der Ausgabe

Der „Kopf“ zeigt zusammen mit dmesg die Startzeilen an, d. h. „dmesg |“. head -20’ druckt nur 20 Zeilen ab dem Startpunkt.

[[email  ~]# dmesg | head  -20

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6)
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   NSC Geode by NSC
[    0.000000]   Cyrix CyrixInstead
[    0.000000]   Centaur CentaurHauls
[    0.000000]   Transmeta GenuineTMx86
[    0.000000]   Transmeta TransmetaCPU
[    0.000000]   UMC UMC UMC UMC
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable
[    0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved

4. Drucken Sie nur die letzten 20 Zeilen der Ausgabe

Der Befehl „tail“ zusammen mit dem Befehl dmesg gibt nur die letzten 20 Zeilen aus. Dies ist nützlich, wenn wir ein Wechseldatenträger einlegen.

[[email  ~]# dmesg | tail -20

parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE]
ppdev: user-space parallel port driver
EXT4-fs (sda1): mounted filesystem with ordered data mode
Adding 2097144k swap on /dev/sda2.  Priority:-1 extents:1 across:2097144k
readahead-disable-service: delaying service auditd
ip_tables: (C) 2000-2006 Netfilter Core Team
nf_conntrack version 0.5.0 (16384 buckets, 65536 max)
NET: Registered protocol family 10
lo: Disabled Privacy Extensions
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
Slow work thread pool: Starting up
Slow work thread pool: Ready
FS-Cache: Loaded
CacheFiles: Loaded
CacheFiles: Security denies permission to nominate security context: error -95
eth0: no IPv6 routers present
type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1
readahead-collector: starting delayed service auditd
readahead-collector: sorting
readahead-collector: finished

5. Suchen Sie nach dem erkannten Gerät oder einer bestimmten Zeichenfolge

Aufgrund der Länge der dmesg-Ausgabe ist es schwierig, nach einer bestimmten Zeichenfolge zu suchen. Filtern Sie also die Zeilen, die Zeichenfolgen wie „usb“, „dma“, „tty“ und „memory“ enthalten ' usw. Die Option '-i' weist den grep-Befehl an, die Groß- und Kleinschreibung zu ignorieren.

[[email  log]# dmesg | grep -i usb
[[email  log]# dmesg | grep -i dma
[[email  log]# dmesg | grep -i tty
[[email  log]# dmesg | grep -i memory
Beispielausgabe
[    0.000000] Scanning 1 areas for low memory corruption
[    0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff]
[    0.000000] Base memory trampoline at [c009b000] 9b000 size 16384
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff]
[    0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff]
[    0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff]
[    0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff]
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.000000] Memory: 2003288K/2059928K available (6352K kernel code, 607K rwdata, 2640K rodata, 880K init, 908K bss, 56640K reserved, 1146920K highmem)
[    0.000000] virtual kernel memory layout:
[    0.004291] Initializing cgroup subsys memory
[    0.004609] Freeing SMP alternatives memory: 28K (c1a3e000 - c1a45000)
[    0.899622] Freeing initrd memory: 23616K (f51d0000 - f68e0000)
[    0.899813] Scanning for low memory corruption every 60 seconds
[    0.946323] agpgart-intel 0000:00:00.0: detected 32768K stolen memory
[    1.360318] Freeing unused kernel memory: 880K (c1962000 - c1a3e000)
[    1.429066] [drm] Memory usable by graphics device = 2048M

6. Löschen Sie die dmesg-Pufferprotokolle

Ja, wir können dmesg-Protokolle bei Bedarf mit dem folgenden Befehl löschen. Die Nachrichtenprotokolle des Dmesg-Ringpuffers werden gelöscht, bis Sie den folgenden Befehl ausgeführt haben. Sie können jedoch weiterhin Protokolle anzeigen, die in den Dateien „/var/log/dmesg“ gespeichert sind. Wenn Sie ein Gerät anschließen, wird eine DMESG-Ausgabe generiert.

[[email  log]# dmesg -c

7. Überwachung von dmesg in Echtzeit

Einige Distributionen erlauben auch den Befehl „tail -f /var/log/dmesg“ für die Dmesg-Überwachung in Echtzeit.

[[email  log]# watch "dmesg | tail -20"

Schlussfolgerung: Der Befehl dmesg ist nützlich, da dmesg alle durchgeführten oder auftretenden Systemänderungen in Echtzeit aufzeichnet. Wie immer können Sie man dmesg verwenden, um weitere Informationen zu erhalten.