Vom Menschen lesbare dmesg-Zeitstempel unter OpenWRT


20

Die Ausgabe von dmesg zeigt die Anzahl der Sekunden + Millisekunden seit dem Systemstart.

[   10.470000] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[   14.610000] device eth0 entered promiscuous mode
[   18.750000] cfg80211: Calling CRDA for country: DE
[   18.750000] cfg80211: Regulatory domain changed to country: DE

F: Wie werden die Sekunden + Millisekunden in ein lesbares Format gebracht?

Mein dmesg:

root@OpenWrt:/tmp# dmesg -h
dmesg: invalid option -- h
BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) multi-call binary.

Usage: dmesg [-c] [-n LEVEL] [-s SIZE]

Print or control the kernel ring buffer

    -c      Clear ring buffer after printing
    -n LEVEL    Set console logging level
    -s SIZE     Buffer size

Eine Installation von util-Linux ist nicht möglich, da nicht viel Speicherplatz zur Verfügung steht:

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    1.1M    956.0K    132.0K  88% /
/dev/root                 2.0M      2.0M         0 100% /rom
tmpfs                    14.3M    688.0K     13.6M   5% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock3            1.1M    956.0K    132.0K  88% /overlay
overlayfs:/overlay        1.1M    956.0K    132.0K  88% /

.

root@OpenWrt:/tmp# which awk  perl sed bash sh shell tcsh
/usr/bin/awk
/bin/sed
/bin/sh


root@OpenWrt:~# date -h
date: invalid option -- h
BusyBox v1.19.4 (2013-03-14 11:28:31 UTC) multi-call binary.

Usage: date [OPTIONS] [+FMT] [TIME]

Display time (using +FMT), or set time

    [-s,--set] TIME Set time to TIME
    -u,--utc    Work in UTC (don't convert to local time)
    -R,--rfc-2822   Output RFC-2822 compliant date string
    -I[SPEC]    Output ISO-8601 compliant date string
            SPEC='date' (default) for date only,
            'hours', 'minutes', or 'seconds' for date and
            time to the indicated precision
    -r,--reference FILE Display last modification time of FILE
    -d,--date TIME  Display TIME, not 'now'
    -D FMT      Use FMT for -d TIME conversion
    -k      Set Kernel timezone from localtime and exit

Was bezeichnen Sie als "lesbares" Format?
UVV

Ich fürchte, Sie haben dann wahrscheinlich Pech. Wenn Ihr System die Kernel-Ausgabe in einer Art Protokoll protokolliert (z. B. /var/log/syslogauf Debian-Systemen, überprüfen Sie dieses Protokoll; es enthält möglicherweise dieselben Informationen, jedoch mit lesbaren Zeitstempeln.
Martin von Wittich

1
'lesbar' als vom Menschen lesbarer Datums- und Zeitstempel, wie Sie es für das Argument '-T' erklärt haben.

1
Hmm, das wird sehr komplex, da Sie scheinbar keinen Zugriff auf Daten haben, die manipuliert werden können. Ihr dateBefehl unterstützt die -dFlagge nicht, oder? Und auch keine Python? Welche awkImplementierung ist das? Ist es GNU awkzumindest
Terdon

1
Cool, wenn Sie haben date -d, sollte meine aktualisierte Antwort funktionieren.
Terdon

Antworten:


28

Ich denke, was Sie suchen, ist -Twie folgt dokumentiert man dmesg:

-T, --ctime

Vom Menschen lesbare Zeitstempel drucken. Der Zeitstempel könnte ungenau sein!

Die für die Protokolle verwendete Zeitquelle wird nach SUSPEND / RESUME des Systems nicht aktualisiert.

Also zum Beispiel:

[  518.511925] usb 2-1.1: new low-speed USB device number 7 using ehci-pci
[  518.615735] usb 2-1.1: New USB device found, idVendor=1c4f, idProduct=0002
[  518.615742] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  518.615747] usb 2-1.1: Product: USB Keykoard

Wird:

[Mon Jan 27 16:22:42 2014] hid-generic 0003:1C4F:0002.0007: input,hidraw0: USB HID v1.10 Keyboard [USB USB Keykoard] on usb-0000:00:1d.0-1.1/input0
[Mon Jan 27 16:22:42 2014] input: USB USB Keykoard as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.1/input/input24
[Mon Jan 27 16:22:42 2014] hid-generic 0003:1C4F:0002.0008: input,hidraw1: USB HID v1.10 Device [USB USB Keykoard] on usb-0000:00:1d.0-1.1/input1

Ich habe hier einen coolen Trick gefunden . Der dort verwendete sedAusdruck war falsch, da er fehlschlagen würde, wenn mehr als einer ]in der dmesgZeile wäre. Ich habe es so geändert, dass es mit allen Fällen funktioniert, die ich in meiner eigenen dmesgAusgabe gefunden habe. Das sollte also funktionieren, wenn Sie datesich wie erwartet verhalten:

base=$(cut -d '.' -f1 /proc/uptime); 
seconds=$(date +%s); 
dmesg | sed 's/\]//;s/\[//;s/\([^.]\)\.\([^ ]*\)\(.*\)/\1\n\3/' | 
while read first; do 
  read second; 
  first=`date +"%d/%m/%Y %H:%M:%S" --date="@$(($seconds - $base + $first))"`;
  printf "[%s] %s\n" "$first" "$second"; 
done 

Die Ausgabe sieht folgendermaßen aus:

[27/01/2014 16:14:45] usb 2-1.1: new low-speed USB device number 7 using ehci-pci
[27/01/2014 16:14:45] usb 2-1.1: New USB device found, idVendor=1c4f, idProduct=0002
[27/01/2014 16:14:45] usb 2-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[27/01/2014 16:14:45] usb 2-1.1: Product: USB Keykoard

Wir können auch hinzufügen, dass -TFlags nur für util-linux-ng-2.20.xund höher unterstützt werden, so dass Ubuntu 12.04 und höher unterstützt wird und nicht in CentOS / RHEL 6.3 und niedriger
Rahul Patil

3
Ich benutze es dmesgseit Jahren und habe erst jetzt von dieser Flagge erfahren. Warum hat mir das niemand gesagt? : D
Martin von Wittich

1
@MartinvonWittich gleich hier, ich habe heute gerade die Manpage zum ersten Mal gelesen :)
terdon

Entschuldigung, habe dies nicht im Voraus gesagt, dass ich openwrt benutze.

Nur zur Veranschaulichung: Genau wie das der dmesg -TFall ist, zeigt das Skript in der Antwort auch im Ruhezustand eine falsche Uhrzeit an.
Hi-Angel

4

Ihre Version von dmesgist offensichtlich nicht die Vollversion von, util-linuxsondern wird von bereitgestellt busybox.

busyboxstellt die Grundlagen einer Vielzahl von Dienstprogrammen bereit, bietet jedoch nicht alle nützlichen Funktionen.

Wenn Sie das -Tvon Terdon vorgeschlagene Flag verwenden möchten, müssen Sie dmesgdie von bereitgestellte Binärdatei verwendenutil-linux

me@server:/tmp$ busybox sh
BusyBox v1.21.1 (Debian 1:1.21.0-1) built-in shell (ash)
Enter 'help' for a list of built-in commands.

/tmp $ dmesg -T
dmesg: invalid option -- 'T'
BusyBox v1.21.1 (Debian 1:1.21.0-1) multi-call binary.

Usage: dmesg [-c] [-n LEVEL] [-s SIZE]

Print or control the kernel ring buffer

    -c      Clear ring buffer after printing
    -n LEVEL    Set console logging level
    -s SIZE     Buffer size

/tmp $ /bin/dmesg -T | tail -5
[Mon Jän 27 13:37:24 2014] hid-generic 0003:046D:C03E.0006: input,hidraw2: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-0000:00:1d.0-1.8/input0
[Mon Jän 27 15:59:32 2014] NVRM: API mismatch: the client has the version 304.117, but
[Mon Jän 27 15:59:32 2014] NVRM: this kernel module has the version 304.116.  Please
[Mon Jän 27 15:59:32 2014] NVRM: make sure that this kernel module and all NVIDIA driver
[Mon Jän 27 15:59:32 2014] NVRM: components have the same version.
/tmp $
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.