Il kernel Linux è il nucleo del sistema operativo che controlla l'accesso alle risorse di sistema, come CPU, dispositivi I/O, memoria fisica e file system. Il kernel scrive vari messaggi nel buffer ad anello del kernel durante il processo di avvio e quando il sistema è in esecuzione. Questi messaggi includono varie informazioni sul funzionamento del sistema.
Il buffer dell'anello del kernel è una parte della memoria fisica che contiene i messaggi di registro del kernel. Ha una dimensione fissa, il che significa che una volta che il buffer è pieno, i record di log più vecchi vengono sovrascritti.
Il dmesg
L'utilità della riga di comando viene utilizzata per stampare e controllare il buffer dell'anello del kernel in Linux e altri sistemi operativi simili a Unix. È utile per esaminare i messaggi di avvio del kernel e per il debug di problemi relativi all'hardware.
In questo tutorial tratteremo le basi di dmesg
comando.
Utilizzo di dmesg
Comando #
La sintassi per dmesg
il comando è il seguente:
dmesg [OPTIONS]
Quando viene invocato senza alcuna opzione dmesg
scrive tutti i messaggi dal buffer dell'anello del kernel nello standard output:
dmesg
Per impostazione predefinita, tutti gli utenti possono eseguire dmesg
comando. Tuttavia, su alcuni sistemi, l'accesso a dmesg
potrebbe essere limitato per utenti non root. In questa situazione, quando si invoca dmesg
riceverai un messaggio di errore come di seguito:
dmesg: read kernel buffer failed: Operation not permitted
Il parametro del kernel kernel.dmesg_restrict
specifica se gli utenti senza privilegi possono utilizzare dmesg
per visualizzare i messaggi dal buffer di log del kernel. Per rimuovere le restrizioni, impostalo a zero:
sudo sysctl -w kernel.dmesg_restrict=0
Di solito, l'output contiene molte righe di informazioni, quindi solo l'ultima parte dell'output è visualizzabile. Per visualizzare una pagina alla volta, reindirizza l'output a un'utilità cercapersone come less
o more
:
dmesg --color=always | less
Il --color=always
viene utilizzato per preservare l'output colorato.
Se vuoi filtrare i messaggi del buffer, usa grep
. Ad esempio, per visualizzare solo i messaggi relativi all'USB, digitare:
dmesg | grep -i usb
dmesg
legge i messaggi generati dal kernel da /proc/kmsg
file virtuale. Questo file fornisce un'interfaccia al buffer circolare del kernel e può essere aperto solo da un processo. Se syslog
processo è in esecuzione sul tuo sistema e provi a leggere il file con cat
o less
, il comando si bloccherà.
Il syslog
daemon scarica i messaggi del kernel in /var/log/dmesg
, quindi puoi anche usare quel file di registro:
cat /var/log/dmesg
Formattare dmesg
Uscita #
Il dmesg
Il comando fornisce una serie di opzioni che ti aiutano a formattare e filtrare l'output.
Una delle opzioni più utilizzate di dmesg
è -H
(--human
), che abilita l'output leggibile. Questa opzione reindirizza l'output del comando in un cercapersone:
dmesg -H
Per stampare timestamp leggibili dall'uomo, usa il -T
(--ctime
) opzione:
dmesg -T
[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready
Il formato dei timestamp può anche essere impostato utilizzando il --time-format <format>
opzione, che può essere ctime, reltime, delta, notime o iso. Ad esempio, per utilizzare il formato delta, digitare:
dmesg --time-format=delta
Puoi anche combinare due o più opzioni:
dmesg -H -T
Per guardare l'output di dmesg
comando in tempo reale usa il -w
(--follow
) opzione:
dmesg --follow
Filtraggio dmesg
Uscita #
Puoi limitare il dmesg
output a determinate strutture e livelli.
La struttura rappresenta il processo che ha creato il messaggio. dmesg
supporta le seguenti funzionalità di registro:
kern
- messaggi del kerneluser
- messaggi a livello di utentemail
- sistema di postadaemon
- demoni di sistemaauth
- messaggi di sicurezza/autorizzazionesyslog
- messaggi interni di syslogdlpr
- sottosistema stampante di lineanews
- sottosistema notizie di rete
Il -f
(--facility <list>
) consente di limitare l'output a strutture specifiche. L'opzione accetta uno o più servizi separati da virgole.
Ad esempio, per visualizzare solo i messaggi del kernel e dei demoni di sistema dovresti usare:
dmesg -f kern,daemon
Ogni messaggio di registro è associato a un livello di registro che mostra l'importanza del messaggio. dmesg
supporta i seguenti livelli di log:
emerg
- il sistema è inutilizzabilealert
- l'azione deve essere intrapresa immediatamentecrit
- condizioni criticheerr
- condizioni di errorealert
- condizioni di avvisoalert
- condizione normale ma significativainfo
- informativodebug
- messaggi a livello di debug
Il -l
(--level <list>
) l'opzione limita l'output a livelli definiti. L'opzione accetta uno o più livelli separati da virgole.
Il comando seguente visualizza solo i messaggi di errore e critici:
dmesg -l err,crit
Cancellazione del buffer dell'anello #
Il -C
(--clear
) consente di cancellare il buffer dell'anello:
sudo dmesg -C
Solo root o utenti con privilegi sudo possono cancellare il buffer.
Per stampare il contenuto del buffer prima di cancellare, usa -c
(--read-clear
) opzione:
sudo dmesg -c
Se vuoi salvare il dmesg
corrente accede a un file prima di cancellarlo, reindirizza l'output a un file:
dmesg > dmesg_messages
Conclusione #
Il dmesg
Il comando consente di visualizzare e controllare il buffer dell'anello del kernel. Può essere molto utile durante la risoluzione dei problemi del kernel o dell'hardware.
Digita man dmesg
nel tuo terminale per informazioni su tutti i dmesg
disponibili opzioni.
Se hai domande o feedback, sentiti libero di lasciare un commento.