GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Linux dmesg - Stampa il buffer dell'anello del kernel

Comando Dmesg stampa il buffer dei messaggi del kernel. Il comando Dmesg viene utilizzato principalmente per identificare i dispositivi guasti, i dispositivi hot plug come USB, gli errori dei dispositivi I/O.

Quando il sistema avvia i driver di dispositivo presenti nella configurazione del kernel con i dispositivi hardware pertinenti. In quel momento i driver e altri elementi con il kernel producono messaggi. Questi messaggi sono archiviati in un spazio buffer ridotto e sovrascritti ciascuno quando arrivano nuovi messaggi. La maggior parte delle distribuzioni Linux memorizza questi messaggi in /var/log/dmesg. Dmesg letto direttamente dal buffer dell'anello del kernel, non da /var/log/dmesg. Syslog per impostazione predefinita (dipende dalle distribuzioni Linux) o configurato per acquisire messaggi.

Negozi Dmesg messaggi del kernel durante l'avvio e dopo l'avvio. Dopo l'avvio, occasionalmente il kernel produce messaggi quando ci sono errori io, dispositivi collegati, ecc. Questi sono messaggi che vengono inviati anche alla console di sistema. L'output di Dmesg è spesso grande, può essere filtrato usando i comandi more, tail o grep.

Come usare il comando dmesg

Il comando Dmesg per impostazione predefinita stampa N numero di messaggi dal buffer dell'anello del kernel.

$ dmesg

Esempio di output:

[    1.230638] kernel: Run /init as init process
 [    1.336492] kernel: scsi host0: Virtio SCSI HBA
 [    1.338612] kernel: scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.338727] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
 [    1.342266] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
 [    1.345242] kernel: lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
 [    1.346920] kernel: ahci 0000:00:1f.2: version 3.0
 [    1.350864] kernel: scsi host1: Virtio SCSI HBA
 [    1.358377] kernel: scsi host2: Virtio SCSI HBA
 [    1.359317] kernel: PCI Interrupt Link [GSIA] enabled at IRQ 16
 [    1.359718] kernel: scsi 1:0:1:2: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.361478] kernel: ahci 0000:00:1f.2: AHCI 0001.0000 32 slots 6 ports 1.5 Gbps 0x3f impl SATA mode
 [    1.363039] kernel: i801_smbus 0000:00:1f.3: SMBus using PCI interrupt

L'output di Dmesg è principalmente diviso in 3 parti:

  • Tempo: Mostra il numero di secondi dall'avvio. Se trovi 20.091730. Significa che il messaggio viene creato 20 secondi dopo l'avvio.
  • Nome_dispositivo: Mostra il nome del dispositivo
  • Messaggi: Il messaggio vero e proprio. Da qui, possiamo analizzare cosa è successo.

1) Come leggere dmesg

Il comando Dmesg senza alcuna opzione produce un output di grandi dimensioni. Per semplificare la lettura, utilizzare il comando grep o less per filtrare l'output. Diamo un'occhiata ad alcuni esempi.

Stampa output dmesg per pagina

$ dmesg | less

Esempio di output:

[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.8.0-31-generic (buildd@aatxe) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 (Ubuntu 3.8.0-31.46-generic 3.8.13.8)
[ 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

Stampa le informazioni relative a eth

$ dmesg | grep eth

Esempio di output:

[ 1.972418] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:d2:c1:16
[ 1.972430] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 18.867656] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.733138] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 21.737967] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.738052] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Stampa le informazioni relative all'USB

$ dmesg | grep usb

Esempio di output:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0

Tieni presente che il comando grep è case-sensitive . cioè dall'esempio sopra "usb" e "USB" danno risultati diversi. Per ignorare la funzione di distinzione tra maiuscole e minuscole, utilizza il parametro -i dopo il comando grep . Confronta questo output di comando con la custodia USB sopra.

$ dmesg | grep -i usb

Esempio di output:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 0.997759] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.997783] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.997929] ohci_hcd 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
[ 1.091856] hub 1-0:1.0: USB hub found
[ 1.093110] uhci_hcd: USB Universal Host Controller Interface driver

Visualizzazione dell'output desiderato utilizzando testa/coda

Ad esempio, hai inserito un dispositivo rimovibile o hai apportato modifiche a qualsiasi volume del disco. Per controllare le ultime voci di dmesg utilizzando la coda comando.

Per visualizzare le ultime N righe del registro dmesg:

$ dmesg | tail -15

Allo stesso modo, per trovare le prime righe da dmesg log usa il comando head. Questo sarà utile per trovare le modifiche avvenute subito dopo l'avvio.

$ dmesg | head -15

Monitoraggio in tempo reale

Per il monitoraggio continuo in tempo reale usa l'opzione -f .

$ tail -f /var/log/dmesg

In alternativa, usa watch dmesg:

$ watch "dmesg | tail -15"

Alcuni sistemi Linux supportano l'utilizzo di dmesg -w, che attende nuovi messaggi.

2) Stampa in formato leggibile dall'uomo

Per stampare l'output di dmesg in un formato leggibile dall'uomo, usa l'opzione -H.

$ dmesg -H

3) Converti timestamp in formato data personalizzato

Per impostazione predefinita, il timestamp dall'output di dmesg non è leggibile dall'uomo. Per modificare il timestamp in un formato di data personalizzato, utilizzare l'opzione - -ctime o -T.

$ dmesg  --ctime

Esempio di output:

[Tue Dec 10 16:34:33 2013] 131MB HIGHMEM available.
[Tue Dec 10 16:34:33 2013] 891MB LOWMEM available.
[Tue Dec 10 16:34:33 2013] mapped low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] Zone ranges:
[Tue Dec 10 16:34:33 2013] DMA [mem 0x00010000-0x00ffffff]
[Tue Dec 10 16:34:33 2013] Normal [mem 0x01000000-0x37bfdfff]
[Tue Dec 10 16:34:33 2013] HighMem [mem 0x37bfe000-0x3ffeffff]
[Tue Dec 10 16:34:33 2013] Movable zone start for each node
[Tue Dec 10 16:34:33 2013] Early memory node ranges
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00010000-0x0009efff]
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00100000-0x3ffeffff

Puoi anche usare --time-format per stampare timestamp usando il formato indicato, che può essere ctime, reltime, delta o iso.

Se timestamp non è abilitato quindi il comando dmesg potrebbe non mostrare il timestamp nell'output.

Per verificare che i timestamp siano abilitati o meno, apri il file /sys/module/printk/parameters/time:

$ cat /sys/module/printk/parameters/time
N

Se il contenuto del file è N, il timestamp non è abilitato. Puoi eseguire il comando seguente per abilitare il timestamp:

$ echo Y > /sys/module/printk/parameters/time

4) Cancella dmesg

Per cancellare i messaggi dal buffer dell'anello del kernel, usa l'opzione -C.

$ dmesg -C

Per cancellare il buffer dell'anello dopo aver stampato il suo contenuto, usa l'opzione -c.

$ dmesg -c

Anche se cancelli dmesg usando i parametri -c o -C, puoi comunque visualizzare i log in /var/log/kern.log o /var/log/dmesg.

5) Impedisci a Dmesg di accedere alla console

Per disabilitare la stampa dei messaggi sulla console usa l'opzione -D.

$ dmesg -D

Un'opzione alternativa consiste nell'usare -n 1 per impedire che tutti i messaggi, tranne quelli di emergenza (panico), vengano visualizzati sulla console.

Per abilitare la stampa dei messaggi sulla console usa -E.

$ dmesg -E

6) Visualizza messaggi specifici per struttura

Per stampare messaggi da una specifica categoria o struttura. Per raggiungere questo scopo, usa l'opzione --Facility.

Dall'esempio per stampare un messaggio specifico per la posta, digitare:

$ dmesg --facility=daemon

Strutture di registro supportate sono:

kern - messaggi del kernel
utente - messaggi casuali a livello di utente
posta - sistema di posta
demone - demoni di sistema
auth - messaggi di sicurezza/autorizzazione
syslog - messaggi generati internamente da syslogd
lpr - sottosistema della stampante di linea
notizie - sottosistema di notizie di rete

7) Stampa livello registro

Per stampare messaggi specifici a livello di registro, utilizzare l'opzione --level. Ad esempio, per stampare tutti i messaggi di avviso, eseguire il comando seguente:

$ dmesg --level=warn

Esempio di output:

[ 0.000000] tsc: Fast TSC calibration failed
[ 19.595760] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr

Livelli di registro supportati sono:

emerg - il sistema è inutilizzabile
avviso - l'azione deve essere intrapresa immediatamente
crit - condizioni critiche
err - condizioni di errore
avvertire - condizioni di avviso
avviso - condizione normale ma significativa
info - informativo
debug - messaggi a livello di debug

8) Visualizzazione della struttura e del livello in leggibile dall'uomo

Per stampare la struttura e il livello di registro in un formato leggibile dall'uomo, utilizzare l'opzione -x.

$ dmesg -x

Esempio di output:

kern :debug : [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
kern :info : [ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x1000000
kern :debug : [ 0.000000] MTRR default type: uncachable
kern :debug : [ 0.000000] MTRR variable ranges disabled:
kern :info : [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
kern :info : [ 0.000000] CPU MTRRs all blank - virtualized system.

9) Stampa il messaggio del kernel

Per stampare messaggi specifici del kernel usa l'opzione -k.

$ dmesg -k

10) Ignora timestamp

Se non vuoi stampare il timestamp del kernel, usa l'opzione -t.

$ dmesg -t

Conclusione

Dmesg può essere molto utile per diagnosticare problemi relativi al sistema. In questo tutorial, abbiamo imparato come usare il comando dmesg in Linux.


Linux
  1. Comando Linux mv

  2. Linux du comando

  3. comando IP Linux

  4. comando cd di Linux

  5. Esempi di comandi lpr in Linux

Comando Modprobe in Linux

Comando Sysctl in Linux

Linux dmesg Command Tutorial per principianti (5 esempi)

Comando Linux id - Stampa le informazioni sull'ID utente e sull'ID gruppo

comando sysctl in Linux

3 modi per controllare la versione del kernel Linux nella riga di comando