dmesg comando viene utilizzato per visualizzare i messaggi relativi al kernel su sistemi simili a Unix. dmesg sta per "visualizza messaggio o display driver “. Il comando dmesg recupera i suoi dati leggendo il buffer dell'anello del kernel. Durante la risoluzione dei problemi sui sistemi Linux, il comando dmesg diventa molto utile, può aiutarci a identificare errori e avvisi relativi all'hardware, oltre a questo può stampare messaggi relativi ai daemon sullo schermo.
In questo articolo tratteremo 10 suggerimenti utili sul comando dmesg per amministratori Linux o fanatici, Di seguito è riportata la sintassi del comando dmesg,
# dmesg {opzioni}
Di seguito sono elencate le opzioni che possono essere utilizzate nel comando dmesg
Passiamo ora alla parte dei suggerimenti,
1. Visualizza tutti i messaggi dal buffer dell'anello del kernel
Apri il terminale e digita il comando 'dmesg', quindi premi invio. Sul tuo schermo riceverai tutti i messaggi dal buffer dell'anello del kernel.
~]# dmesg
Il comando dmesg stamperà tutti i messaggi ma vedrai solo l'ultimo messaggio che si adatta allo schermo, se vuoi eseguire l'analisi di tutti i registri e visualizzarli come pagina saggia, usa il comando less o more,
~]# dmesg | less
L'output del comando dmesg sarebbe qualcosa come di seguito,
2. Visualizza messaggi relativi a RAM, disco rigido, unità USB e porte seriali
Nell'output del comando dmesg possiamo cercare i messaggi relativi a RAM, Hard disk, unità USB e porte seriali.
~]# dmesg | grep -i memory ~]# dmesg | grep -i dma ~]# dmesg | grep -i usb ~]# dmesg | grep -i tty
Questi comandi sopra possono essere uniti in un unico comando usando più opzioni grep (-E), gli esempi sono mostrati di seguito,
~]# dmesg | grep -E "memory|dma|usb|tty"
L'output sarebbe simile al seguente:
[ 4.100608] usb 4-1: SerialNumber: serial [ 4.102288] [TTM] Zone kernel: Available graphics memory: 49438090 kiB [ 4.102294] [TTM] Zone dma32: Available graphics memory: 2097152 kiB [ 4.102891] input: Logitech USB Keyboard as \ /devices/pci0000:00/0000:00:1d.2/usb8/8-1/8-1:1.0/input/input2 [ 4.109905] input: American Megatrends Inc. \ Virtual Keyboard and Mouse as \ /devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.0/input/input3 [ 4.153575] hid-generic 0003:046D:C31C.0001: \ input,hidraw0: USB HID v1.10 Keyboard [Logitech USB Keyboard] \ on usb-0000:00:1d.2-1/input0 [ 4.199642] input: Logitech USB Keyboard as \ /devices/pci0000:00/0000:00:1d.2/usb8/8-1/8-1:1.1/input/input4 [ 4.204832] hid-generic 0003:046B:FF10.0002: \ input,hidraw1: USB HID v1.10 Keyboard [American Megatrends Inc. \ Virtual Keyboard and Mouse] on usb-0000:00:1a.1-1/input0 [ 4.211855] input: American Megatrends Inc. Virtual Keyboard and \ Mouse as /devices/pci0000:00/0000:00:1a.1/usb4/4-1/4-1:1.1/input/input5 [ 4.239313] ata1: SATA max UDMA/133 cmd 0x8138 ctl 0x814c bmdma 0x8110 irq 19 [ 4.239317] ata2: SATA max UDMA/133 cmd 0x8130 ctl 0x8148 bmdma 0x8118 irq 19 [ 4.255839] hid-generic 0003:046D:C31C.0003: input,hidraw2: \ USB HID v1.10 Device [Logitech USB Keyboard] on usb-0000:00:1d.2-1/input1 [ 4.256191] hid-generic 0003:046B:FF10.0004: input,hidraw3:\ USB HID v1.10 Mouse [American Megatrends Inc. Virtual Keyboard and \ Mouse] on usb-0000:00:1a.1-1/input1 [ 4.392050] ata3: SATA max UDMA/133 cmd 0x8128 ctl 0x8144 bmdma 0x80f0 irq 21 [ 4.392051] ata4: SATA max UDMA/133 cmd 0x8120 ctl 0x8140 bmdma 0x80f8 irq 21 [ 19.125903] ioatdma: Intel(R) QuickData Technology Driver 4.00 [ 19.126493] ioatdma 0000:00:16.0: irq 140 for MSI/MSI-X [ 19.128248] ioatdma 0000:00:16.1: irq 142 for MSI/MSI-X [ 19.129953] ioatdma 0000:00:16.2: irq 144 for MSI/MSI-X [ 19.131926] ioatdma 0000:00:16.3: irq 146 for MSI/MSI-X [ 19.134235] ioatdma 0000:00:16.4: irq 147 for MSI/MSI-X [ 19.135688] ioatdma 0000:00:16.5: irq 148 for MSI/MSI-X [ 19.137522] ioatdma 0000:00:16.6: irq 149 for MSI/MSI-X [ 19.140174] ioatdma 0000:00:16.7: irq 150 for MSI/MSI-X [ 19.141931] ioatdma 0000:80:16.0: irq 152 for MSI/MSI-X [ 19.161974] ioatdma 0000:80:16.1: irq 154 for MSI/MSI-X [ 19.167511] ioatdma 0000:80:16.2: irq 156 for MSI/MSI-X [ 19.169293] ioatdma 0000:80:16.3: irq 158 for MSI/MSI-X [ 19.170821] ioatdma 0000:80:16.4: irq 159 for MSI/MSI-X [ 19.174764] ioatdma 0000:80:16.5: irq 160 for MSI/MSI-X [ 19.176360] ioatdma 0000:80:16.6: irq 161 for MSI/MSI-X [ 19.177984] ioatdma 0000:80:16.7: irq 162 for MSI/MSI-X [ 4519.415988] usb 8-1: USB disconnect, device number 2 ~]#
3. Leggi e cancella i registri dmesg usando l'opzione (-C)
Se vuoi cancellare i log di dmesg dopo averli letti, puoi usare l'opzione -C nel comando dmesg,
~]# dmesg -C
4. Visualizza messaggi colorati (output del comando dmesg)
Usa l'opzione '-L' nel comando dmesg se vuoi stampare i messaggi colorati,
~]# dmesg -L
5. Limita l'output di dmesg a una struttura specifica come il demone
Se desideri limitare l'output di dmesg a una struttura specifica come il demone, utilizza l'opzione "–facility=daemon ” nel comando dmesg,
~]# dmesg --facility=daemon
L'output del comando precedente sarebbe qualcosa di simile al seguente,
[ 3.680902] systemd[1]: systemd 219 running in system mode. \ \ (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP \ +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN) [ 3.682017] systemd[1]: Detected architecture x86-64. [ 3.682022] systemd[1]: Running in initial RAM disk. [ 3.682060] systemd[1]: Set hostname to <controller01.egi.ericsson.com>. [ 3.734025] systemd[1]: Reached target Timers. [ 3.734041] systemd[1]: Starting Timers. [ 3.734219] systemd[1]: Created slice -.slice. [ 3.734231] systemd[1]: Starting -.slice. [ 3.736741] systemd[1]: Starting Apply Kernel Variables... [ 3.736792] systemd[1]: Listening on udev Kernel Socket. [ 3.736807] systemd[1]: Starting udev Kernel Socket. [ 3.736823] systemd[1]: Reached target Sockets. [ 3.736832] systemd[1]: Starting Sockets. [ 3.737418] systemd[1]: Starting Setup Virtual Console... [ 3.737488] systemd[1]: Started dracut ask for additional cmdline parameters. [ 3.738211] systemd[1]: Starting dracut cmdline hook... [ 3.738736] systemd[1]: Started Create list of required static \ device nodes for the current kernel. [ 3.740196] systemd[1]: Started Apply Kernel Variables. [ 3.743253] systemd[1]: Starting Create Static Device Nodes in /dev... [ 3.746693] systemd[1]: Started Create Static Device Nodes in /dev. [ 3.814248] systemd[1]: Started Setup Virtual Console. [ 3.822146] systemd[1]: Started Journal Service. [ 16.072365] systemd[1]: Inserted module 'ip_tables' [[email protected] ~]#
Di seguito sono riportate le funzionalità di registro supportate nel comando dmesg,
- nocciolo
- utente
- posta
- demone
- autorizzazione
- registro di sistema
- lpr
- notizie
6. Limita l'output del comando dmesg a un elenco di livelli specifico
Di seguito sono riportati livelli di registro specifici supportati dal comando dmesg,
- emerge
- avviso
- critico
- err
- avviso
- avviso
- informazioni
- debug
Supponiamo di voler visualizzare i log relativi a errori e avvisi, quindi utilizzare l'opzione "–level" seguita da livelli come err &warning, l'esempio è mostrato di seguito
~]# dmesg --level=err,warn ---------------------------------- [1341929.334323] iSCSI Login negotiation failed. [1491798.215987] rx_data returned 0, expecting 48. [1491798.217027] iSCSI Login negotiation failed. [1494278.360062] rx_data returned 0, expecting 48. [1494278.361265] iSCSI Login negotiation failed. [1557620.564093] blk_update_request: critical target error, dev dm-6, \ sector 2153 [1557620.565432] dm-23: WRITE SAME failed. Manually zeroing. [1558518.963985] Unable to load target_core_user [1559841.691841] TARGET_CORE[iSCSI]: Expected Transfer Length: \ 264 does not match SCSI CDB Length: 8 for SAM Opcode: 0x12 [1559841.691953] scsi 10:0:0:0: alua: not attached [1559860.013693] kvm [72955]: vcpu0 unhandled rdmsr: 0x1ad [1560386.614083] TARGET_CORE[iSCSI]: Expected Transfer Length: \ 264 does not match SCSI CDB Length: 8 for SAM Opcode: 0x12 [1560386.614172] scsi 11:0:0:0: alua: not attached [1608828.924794] rx_data returned 0, expecting 48. [1608828.925904] iSCSI Login negotiation failed. [1787664.206542] rx_data returned 0, expecting 48. [1787664.207809] iSCSI Login negotiation failed. [1800235.169914] rx_data returned 0, expecting 48. [1800235.171012] iSCSI Login negotiation failed. [2051176.431584] ata1.01: failed to resume link (SControl 0) [2051858.493155] ata1.01: failed to resume link (SControl 0) ……………………………………………………………………………… #
7. Abilita timestamp nei log di dmesg
Possono esserci alcuni scenari in cui vogliamo abilitare i timestamp in dmesg, questo può essere facilmente ottenuto utilizzando l'opzione "-T" nel comando dmesg.
~]# dmesg -T …………………………………………… Wed May 9 12:20:36 2018] rx_data returned 0, expecting 48. [Wed May 9 12:20:36 2018] iSCSI Login negotiation failed. [Thu May 10 03:31:36 2018] httpd[63827]: segfault at 8 ip \ 00007f1ef7166c50 sp 00007f1eee417db0 error 4 in \ libpython2.7.so.1.0[7f1ef706c000+178000] [Thu May 10 03:31:37 2018] httpd[57146]: segfault at 8 ip \ 00007f1ef7166c50 sp 00007f1eee417db0 error 4 in \ libpython2.7.so.1.0[7f1ef706c000+178000] [Sat May 12 10:02:56 2018] ata1.00: hard resetting link [Sat May 12 10:02:56 2018] ata1.01: hard resetting link [Sat May 12 10:02:57 2018] ata1.01: failed to resume link (SControl 0) [Sat May 12 10:02:57 2018] ata1.00: SATA link up 1.5 Gbps \ (SStatus 113 SControl 300) [Sat May 12 10:02:57 2018] ata1.01: SATA link down (SStatus 0 SControl 0) [Sat May 12 10:02:57 2018] ata1.01: link offline, clearing class 3 to NONE [Sat May 12 10:02:57 2018] ata1.00: configured for UDMA/100 [Sat May 12 10:02:57 2018] ata1: EH complete [Sat May 12 10:14:18 2018] ata1.00: hard resetting link [Sat May 12 10:14:18 2018] ata1.01: hard resetting link [Sat May 12 10:14:19 2018] ata1.01: failed to resume link (SControl 0) [Sat May 12 10:14:19 2018] ata1.00: SATA link up 1.5 Gbps \ (SStatus 113 SControl 300) [Sat May 12 10:14:19 2018] ata1.01: SATA link down (SStatus 0 SControl 0) [Sat May 12 10:14:19 2018] ata1.01: link offline, clearing class 3 to NONE [Sat May 12 10:14:19 2018] ata1.00: configured for UDMA/100 [Sat May 12 10:14:19 2018] ata1: EH complete …………………………………………………
Nel caso, se desideri mappe orarie insieme alla funzione di decodifica e ai livelli nell'output del comando dmesg, usa "-Tx ” opzione,
~]# dmesg -Tx
8. Monitora i registri dmesg in tempo reale utilizzando l'opzione '–follow'
Usa l'opzione '–follow' nel comando dmesg per visualizzare i registri dmesg in tempo reale, l'esempio è mostrato di seguito,
~]# dmesg --follow
Se vuoi abilitare i timestamp lungo il monitoraggio in tempo reale di dmesg, usa il comando seguente,
~]# dmesg -Tx --follow
9. Visualizza il buffer dei messaggi non elaborati utilizzando l'opzione '-r'
Usa l'opzione '-r' nel comando dmesg per visualizzare il buffer dei messaggi non elaborati, l'esempio è mostrato di seguito,
~]# dmesg -r
10.Forza il comando dmesg per utilizzare syslog
Ci possono essere alcune situazioni in cui vogliamo che dmesg ottenga i suoi dati da syslog piuttosto che da /dev/kmsg. Questo può essere ottenuto facilmente utilizzando l'opzione "-S “, l'esempio è mostrato di seguito:
~]# dmesg -S
I log dei comandi dmesg sono archiviati nel file “/var/log/dmesg”
Questo è tutto da questo tutorial, spero che questi suggerimenti ti aiutino a capire il comando dmesg in un modo migliore.
Leggi anche :Esempi di comando da 20 ps per monitorare i processi Linux