Dấu thời gian dmesg có thể đọc được của con người trên OpenWRT


21

Đầu ra của dmesg hiển thị số giây + mili giây kể từ khi hệ thống khởi động.

[   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: Làm thế nào để đặt giây + mili giây vào định dạng có thể đọc được?

Dmesg của tôi:

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

Để cài đặt, không thể sử dụng Linux, vì không có nhiều dung lượng trống:

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

Bạn nói đến định dạng 'có thể đọc được' là gì?
UVV

Tôi sợ bạn có lẽ đã hết may mắn rồi. Nếu hệ thống của bạn ghi nhật ký đầu ra kernel vào một loại nhật ký nào đó (ví dụ như /var/log/syslogtrên các hệ thống Debian, hãy kiểm tra nhật ký đó; nó có thể chứa thông tin tương tự nhưng với dấu thời gian có thể đọc được.
Martin von Wittich

1
'có thể đọc được' dưới dạng dấu thời gian ngày có thể đọc được của con người, như bạn đã giải thích cho đối số '-T'.

1
Hmm, điều này sẽ rất phức tạp vì dường như bạn không có quyền truy cập vào bất cứ điều gì có khả năng thao tác ngày. dateLệnh của bạn không hỗ trợ -dcờ, phải không? Và tôi đoán không có con trăn nào? Việc awkthực hiện này là gì? Là nó GNU awkít nhất?
terdon

1
Thật tuyệt, nếu bạn có date -d, câu trả lời cập nhật của tôi sẽ hoạt động.
terdon

Câu trả lời:


29

Tôi nghĩ rằng những gì bạn đang tìm kiếm được -Tghi lại trong man dmesg:

-T, - giờ

In dấu thời gian có thể đọc được của con người. Dấu thời gian có thể không chính xác!

Nguồn thời gian được sử dụng cho các bản ghi không được cập nhật sau khi hệ thống SUSPEND / RESUME.

Ví dụ:

[  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

Trở thành:

[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

Tôi tìm thấy một mẹo hay ở đây . Các sedbiểu hiện sử dụng có sai vì nó sẽ thất bại khi có nhiều hơn một ]trong dmesgdòng. Tôi đã sửa đổi nó để làm việc với tất cả các trường hợp tôi tìm thấy trong dmesgđầu ra của riêng tôi . Vì vậy, điều này sẽ làm việc giả định datehành vi của bạn như mong đợi:

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 

Đầu ra trông như:

[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

chúng tôi cũng có thể thêm, các -Tcờ chỉ hỗ trợ cho util-linux-ng-2.20.xvà cao hơn, vì vậy nó sẽ hỗ trợ Ubuntu 12.04 trở lên và không có trong CentOS / RHEL 6.3 và thấp hơn
Rahul Patil

3
Tôi đã sử dụng dmesgtrong nhiều năm và tôi chỉ tìm hiểu về lá cờ này bây giờ. Tại sao không ai nói với tôi điều đó? : D
Martin von Wittich

1
@MartinvonWittich tương tự ở đây, tôi mới đọc trang người đàn ông lần đầu tiên hôm nay :)
terdon

xin lỗi, tôi đã không nói điều này trước rằng tôi sử dụng openwrt.

Chỉ dành cho bản ghi: cũng như dmesg -Tvậy, kịch bản trong câu trả lời cũng hiển thị sai thời gian khi ngủ đông.
Hi-Angel

4

phiên bản của bạn dmesgrõ ràng không phải là phiên bản chính thức util-linuxmà thay vào đó được cung cấp bởi busybox.

busyboxcung cấp những điều cơ bản của vô số tiện ích, nhưng nó không cung cấp tất cả các tính năng tiện lợi của chúng.

nếu bạn muốn sử dụng -Tcờ như (đúng) được đề xuất bởi terdon, bạn sẽ cần sử dụng dmesgnhị phân được cung cấp bởiutil-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 $
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.