Antworten:
Es sieht so aus, als ob es kürzlich für Quantal (12.10) implementiert wurde: siehe http://brainstorm.ubuntu.com/idea/17829/ .
Grundsätzlich dmesg
wird berichtet, einen neuen Schalter zu haben -T, --ctime
.
Bearbeiten. Als eine weitere Erweiterung von Ignacios Antwort sind hier einige Skripte zur Verbesserung der dmesg-Ausgabe auf älteren Systemen.
(Hinweis: Für die Python-Version des dort gezeigten Codes möchten Sie ersetzen <
und >
zurück zu <>
, um ihn wieder verwendbar zu machen.)
Schließlich für einen einzelnen Wert wie 600711.395348
man tun könnte
ut=`cut -d' ' -f1 </proc/uptime`
ts=`date +%s`
date -d"70-1-1 + $ts sec - $ut sec + 600711.395348 sec" +"%F %T"
und erhalte das Datum und die Uhrzeit des Ereignisses.
(Bitte beachten Sie, dass aufgrund von Rundungsfehlern die letzte zweite Ziffer möglicherweise nicht korrekt ist.)
Bearbeiten (2) : Bitte beachten Sie, dass - wie in Wombles Kommentar unten angegeben - dies nur funktioniert, wenn der Computer nicht in den Ruhezustand versetzt wurde usw. (In diesem Fall sollten Sie sich die syslog
Konfigurationsdateien genauer ansehen /etc/*syslog*
und die entsprechenden Dateien überprüfen. Siehe auch : dmesg vs / var / messages .)
date -d"1970-01-01 + $(date +%s) sec - $(cut -d' ' -f1 </proc/uptime) sec + 600711.395348 sec" +"%F %T.%N %Z"
%Z
sollte dies der Fall sein UTC
, da er date +%s
Sekunden nach UTC zurückgibt. Es müsste dann in die lokale Zeitzone umgerechnet werden.
Um die Antwort von Ignacio zu erweitern, werden die darin enthaltenen Einträge dmesg
normalerweise auch an anderer Stelle im System über syslog protokolliert, wodurch Sie einen "echten" Zeitstempel erhalten. Sofern Ubuntu die Debian-Standardeinstellung nicht geändert hat, sollten sich die Protokolleinträge in befinden /var/log/kern.log
.
Die in dmesg angegebene Zeit ist in Sekunden seit dem Start des Kernels angegeben. Fügen Sie einfach so viele Sekunden hinzu, bis der Kernel gestartet wurde (Hinweis: Betriebszeit).
Auf der Busybox hat der 3-Liner oben nicht funktioniert. Ich berechne ihn auf folgende Weise einmalig (ersetze ihn 1628880.0
durch deinen dmesg
Zeitstempel):
perl -e '@a=split(`/proc/uptime`);print scalar(localtime(time()+$a[0] - 1628880.0)."\n");'
Ich weiß, dass dies jetzt alt ist, aber dmesg hat jetzt eine eingebaute Option -e oder --reatime, um die Uhrzeit in der Ortszeit anzuzeigen.
root@bbs:/var/log# dmesg|tail -1
[50755952.379177] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB
root@bbs:/var/log# dmesg -e|tail -1
[Feb20 17:10] Out of memory in UB 1593: OOM killed process 3183 (sbbs) score 0 vm:747204kB, rss:242764kB, swap:88224kB