Horodatage lisible par l'homme sur OpenWRT

21

La sortie de dmesg indique le nombre de secondes + millisecondes depuis le démarrage du système.

[   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

Q: Comment mettre les secondes + millisecondes dans un format lisible?

Mon 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

Installer util-Linux ne sera pas possible, car il n'y a pas beaucoup d'espace disponible:

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
Jeff Schaller
la source
À quoi vous référez-vous en tant que format «lisible»?
UVV
Je crains que vous n'ayez probablement pas de chance alors. Si votre système enregistre la sortie du noyau dans une sorte de journal (par exemple /var/log/syslogsur les systèmes Debian, vérifiez ce journal; il peut contenir les mêmes informations mais avec des horodatages lisibles.
Martin von Wittich
1
«lisible» comme horodatage lisible par l'homme, comme vous l'avez expliqué pour l'argument «-T».
1
Hmm, ce sera très complexe car vous ne semblez avoir accès à rien avec des capacités de manipulation de date. Votre datecommande ne prend pas en charge le -ddrapeau, non? Et pas de python non plus je suppose? De quelle awkmise en œuvre s'agit-il? Est-ce GNU awkau moins?
terdon
1
Cool, si vous en avez date -d, ma réponse mise à jour devrait fonctionner.
terdon

Réponses:

29

Je pense que ce que vous recherchez est -Tcomme documenté dans man dmesg:

-T, --ctime

Imprimez des horodatages lisibles par l'homme. L'horodatage pourrait être inexact!

La source de temps utilisée pour les journaux n'est pas mise à jour après la suspension / reprise du système.

Ainsi, par exemple:

[  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

Devient:

[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

J'ai trouvé un truc sympa ici . L' sedexpression utilisée à cet endroit était erronée car elle échouerait s'il y en avait plusieurs ]dans la dmesgligne. Je l'ai modifié pour fonctionner avec tous les cas que j'ai trouvés dans ma propre dmesgsortie. Donc, cela devrait fonctionner en supposant que votre datecomportement se déroule comme prévu:

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 

La sortie ressemble à:

[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
terdon
la source
nous pouvons également ajouter, -Tdrapeaux prennent en charge que pour util-linux-ng-2.20.xet plus, il soutiendra Ubuntu 12.04 et plus et non dans CentOS / RHEL 6.3 et inférieur
Rahul Patil
3
J'utilise depuis dmesgdes années et je ne connais ce drapeau que maintenant. Pourquoi personne ne m'a dit ça? : D
Martin von Wittich
1
@MartinvonWittich même ici, je viens de lire la page de manuel pour la première fois aujourd'hui :)
terdon
désolé, je n'ai pas dit à l'avance que j'utilisais openwrt.
Juste pour mémoire: tout comme le dmesg -Tfait le script de la réponse, il montre également le mauvais moment en hibernation.
Hi-Angel
4

votre version de dmesgn'est évidemment pas celle à part entière de util-linuxmais est plutôt fournie par busybox.

busyboxfournit les bases d'une multitude d'utilitaires, mais il ne fournit pas toutes leurs fonctionnalités astucieuses.

si vous voulez utiliser le -Tdrapeau comme le suggère (à juste titre) terdon, vous devrez utiliser le dmesgbinaire fourni parutil-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 $
umläute
la source