Prangko waktu dmesg yang dapat dibaca manusia di OpenWRT

21

Output dmesg menunjukkan jumlah milidetik + detik sejak sistem dimulai.

[   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

T: Bagaimana cara menempatkan detik + milidetik ke format yang dapat dibaca?

Dmesg saya:

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

Untuk menginstal util-Linux tidak akan mungkin, karena tidak ada banyak ruang yang tersedia:

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
sumber
Apa yang Anda rujuk sebagai format 'dapat dibaca'?
UVV
Saya khawatir Anda mungkin kurang beruntung. Jika sistem Anda mencatat output kernel ke beberapa jenis log (misalnya ke /var/log/syslogsistem Debian, periksa log itu; mungkin berisi informasi yang sama tetapi dengan cap waktu yang dapat dibaca.
Martin von Wittich
1
'terbaca' sebagai cap waktu tanggal yang dapat dibaca manusia, seperti yang Anda jelaskan untuk argumen '-T'.
1
Hmm, ini akan sangat kompleks karena Anda sepertinya tidak memiliki akses ke apa pun dengan kemampuan manipulasi tanggal. Anda dateperintah tidak mendukung -dbendera, kan? Dan kurasa juga tidak ada python? Yang awkimplementasi ini? Apakah itu GNU awksetidaknya?
terdon
1
Keren, jika sudah date -d, jawaban saya yang diperbarui harusnya berfungsi.
terdon

Jawaban:

29

Saya pikir apa yang Anda cari adalah -Tseperti yang didokumentasikan di man dmesg:

-T, - waktu

Cetak stempel waktu yang dapat dibaca manusia. Stempel waktu mungkin tidak akurat!

Sumber waktu yang digunakan untuk log tidak diperbarui setelah sistem SUSPEND / RESUME.

Jadi, misalnya:

[  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

Menjadi:

[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

Saya menemukan trik keren di sini . The sedekspresi yang digunakan ada yang salah karena akan gagal jika ada lebih dari satu ]di dmesgbaris. Saya telah memodifikasinya untuk bekerja dengan semua case yang saya temukan di dmesgoutput saya sendiri . Jadi, ini seharusnya berfungsi dengan asumsi Anda dateberperilaku seperti yang diharapkan:

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 

Outputnya seperti:

[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
sumber
kami juga dapat menambahkan, -Thanya flag yang mendukung util-linux-ng-2.20.xdan lebih tinggi, sehingga akan mendukung Ubuntu 12.04 dan lebih tinggi dan tidak di CentOS / RHEL 6.3 dan lebih rendah
Rahul Patil
3
Saya telah menggunakan dmesgselama bertahun-tahun dan saya hanya belajar tentang bendera ini sekarang. Kenapa tidak ada yang mengatakan itu padaku? : D
Martin von Wittich
1
@ Martinvon Sama di sini, saya baru saja membaca halaman manual untuk pertama kalinya hari ini :)
terdon
maaf, tidak mengatakan ini sebelumnya bahwa saya menggunakan openwrt.
Sekadar catatan: seperti dmesg -Thalnya script pada jawaban juga menunjukkan waktu yang salah saat hibernasi.
Hi-Angel
4

versi Anda dmesgjelas bukan versi lengkap util-linuxtetapi disediakan oleh busybox.

busyboxmenyediakan dasar - dasar banyak utilitas, tetapi tidak menyediakan semua fitur bagus mereka.

jika Anda ingin menggunakan -Tflag seperti yang disarankan oleh terdon, Anda harus menggunakan dmesgbiner yang disediakan olehutil-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
sumber