Per una qualche ragione c'e' bisogno di sbirciare il kernel log per vedere che cosa e' successo nel sistema recentemente. Il modo piu' rapido e ricorrere al comando dmesg, il cui output appare cosi':
$ dmesg | tail [ 164.752163] domain 1: span 0-3 level CPU [ 164.752165] groups: 2-3 (cpu_power = 2048) 0-1 (cpu_power = 2048) [ 1232.845461] usb 1-2: USB disconnect, address 3 [51142.172013] usb 1-2: new high speed USB device using ehci_hcd and address 5 [51142.304387] usb 1-2: New USB device found, idVendor=0424, idProduct=2504 [51142.304390] usb 1-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [51142.304493] usb 1-2: configuration #1 chosen from 1 choice [51142.304701] hub 1-2:1.0: USB hub found [51142.304765] hub 1-2:1.0: 4 ports detected [51396.836588] lo: Disabled Privacy Extensions
Un grosso problema di dmesg (che prima non era cosi'!) e' il timestamp che riporta il tempo come secondi.millisecondi che separano ciascun evento dall'avvio del sistema.
Precisione fino al sesto decimale, ma praticamente inutile a meno di essere in grado di soddisfare le seguenti condizioni :
- conoscere l'ora esatta al momento dell'avvio;
- essere in grado di convertire il tempo Unix (o Epoc) in tempo convenzionale
- sommare e sottrarre numeri virgola mobile realtime.
Pensavo fosse colpa mia, ma sbirciando in rete mi sono accorto con sollievo che non sono l'unico che non sa sommare numeri a virgola mobile a mente.
L'ennesima scocciatura con un disco farlocco e un po' di tempo libero si sono concretizzati in uno script in Python che puo' essere usato al posto di dmesg per ottenere il seguente output:
$ dmessy | tail [2011-07-12 20:24:53] domain 1: span 0-3 level CPU [2011-07-12 20:24:53] groups: 2-3 (cpu_power = 2048) 0-1 (cpu_power = 2048) [2011-07-12 20:42:41] usb 1-2: USB disconnect, address 3 [2011-07-13 10:34:31] usb 1-2: new high speed USB device using ehci_hcd and address 5 [2011-07-13 10:34:31] usb 1-2: New USB device found, idVendor=0424, idProduct=2504 [2011-07-13 10:34:31] usb 1-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 [2011-07-13 10:34:31] usb 1-2: configuration #1 chosen from 1 choice [2011-07-13 10:34:31] hub 1-2:1.0: USB hub found [2011-07-13 10:34:31] hub 1-2:1.0: 4 ports detected [2011-07-13 10:38:45] lo: Disabled Privacy Extensions
Lo script e' il piuttosto scarno[1], poco elegante (cattura barbaramente l'output di dmesg senza lanciare un sottoprocesso) ma fa il suo lavoro.
Per farlo funzionare basta salvare il seguente codice in un file (io l'ho chiamato "dmessy"), copiarlo in una directory che sia presente nel PATH (/usr/bin/, per esempio), e usarlo esattamente come 'dmesg'.
#!/usr/bin/env python import time from commands import getoutput def getLines(f): fp = open(f, 'r') lines = fp.readlines() fp.close() return lines dmesg = getoutput('dmesg').split("\n") uptime = float( getLines('/proc/uptime')[0].split()[0]) uptime_epoch = time.time()-uptime uptime_date = time.localtime(uptime_epoch) for l in dmesg: try: l = l.split("]", 1) l_epoch = float(l[0][1:]) string = l[1] l_time = time.localtime(uptime_epoch+l_epoch) print "[%d-%02d-%02d %02d:%02d:%02d] %s" % (l_time.tm_year, l_time.tm_mon, l_time.tm_mday, l_time.tm_hour, l_time.tm_min, l_time.tm_sec, string.strip() ) except: pass
Lo riporto nelle guide, magari e' utile anche a qualcun altro.
eNjoy
[1] Personalmente trovo difficolta' a capire chi scrive tutto "ad oggetti" anche quando bisogna fare uno script di due righe...
Commenti
Inviato da ntropia il Mer, 13/07/2011 - 21:12.
Re: Dmesg: mostare il tempo in format "human readable"
EDIT: la formattazione della guida e il codice hanno qualche problemino ma non li modifico per permettere agli Amministratori di risolvere gli eventuali bugs. Il codice python, in particolare, cosi' com'e' non funziona, perche' l'ultima riga e' sbagliata.
eNjoy
Chi ha intendimento conti il numero della Bestia, perché è un numero d'uomo; e il suo numero è...
rw-rw-rw-
Inviato da ntropia il Gio, 14/07/2011 - 20:17.
Re: Dmesg: mostare il tempo in format "human readable"
La guida e' ora funzionale (grazie Paolo!), un paio di bugs sono stati schiacciati e tutto sembra funzionare alla perfezione.
eNjoy
Chi ha intendimento conti il numero della Bestia, perché è un numero d'uomo; e il suo numero è...
rw-rw-rw-
Inviato da marcosan il Lun, 18/07/2011 - 17:45.
Re: Dmesg: mostare il tempo in format "human readable"
Grande ntropia! Uno script semplice ed utile!
Marco
"La matematica e' l'arte di dare lo stesso nome a cose diverse."
H.Poincare (1854-1912).
Inviato da paolo il Lun, 25/07/2011 - 12:42.
Re: Dmesg: mostare il tempo in format "human readable"
Grazie ntropia, guida utilissima!
PS: Il bug sul codice ora e' totalmente risolto.
Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network
Inviato da mcortese il Mar, 08/11/2011 - 12:28.
Re: Dmesg: mostare il tempo in format "human readable"
Lo stesso filtro è realizzabile con due righe di awk (d'altra parte è fatto apposta!):