OpenWRT पर मानव पठनीय dmesg समय टिकटों


21

सिस्टम शुरू होने के बाद से dmesg का आउटपुट दूसरे + मिलीसेकंड की संख्या दर्शाता है।

[   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

प्रश्न: सेकंड + मिलीसेकंड को एक पठनीय प्रारूप में कैसे रखा जाए?

मेरा धर्मगुरू:

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

उपयोग-लिनक्स स्थापित करने के लिए संभव नहीं होगा, क्योंकि बहुत अधिक स्थान उपलब्ध नहीं है:

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

आप 'पठनीय' प्रारूप के रूप में क्या उल्लेख करते हैं?
— यूवीवी

मुझे डर है कि तुम शायद भाग्य से बाहर हो। यदि आपका सिस्टम कर्नेल आउटपुट को किसी प्रकार के लॉग में लॉग करता है (उदाहरण के लिए /var/log/syslogडेबियन सिस्टम पर, तो उस लॉग की जांच करें; इसमें समान जानकारी हो सकती है लेकिन पठनीय टाइमस्टैम्प के साथ।
— मार्टिन वॉन विटिच

1
'पठनीय' मानव पठनीय तिथि समय स्टैम्प के रूप में, जैसे आपने '-T' आर्ग के लिए समझाया।

1
हम्म, यह बहुत जटिल होगा क्योंकि आप तारीख हेरफेर क्षमताओं के साथ किसी भी चीज तक पहुंच नहीं पाते हैं। आपकी dateआज्ञा -dध्वज का समर्थन नहीं करती है , है ना? और कोई अजगर मुझे लगता है? यह कौन सा awkकार्यान्वयन है? यह GNU awkकम से कम है?
— terdon

1
कूल, अगर आपके पास है date -d, तो मेरा अद्यतन जवाब काम करना चाहिए।
— terdon

जवाबों:


29

मुझे लगता है कि आप जिस चीज की तलाश कर रहे हैं, वह इस -Tप्रकार है man dmesg:

-टी, - समयसीमा

मानव पठनीय टाइमस्टैम्प प्रिंट करें। टाइमस्टैम्प गलत हो सकता है!

लॉग के लिए उपयोग किए जाने वाले समय स्रोत को सिस्टम SUSPEND / RESUME के ​​बाद अपडेट नहीं किया जाता है।

इसलिए, उदाहरण के लिए:

[  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

हो जाता है:

[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

मुझे यहां एक अच्छी चाल मिली । sedवहां उपयोग की गई अभिव्यक्ति गलत थी क्योंकि यह तब विफल होगी जब लाइन ]में एक से अधिक थे dmesg। मैंने इसे अपने स्वयं के dmesgआउटपुट में पाए गए सभी मामलों के साथ काम करने के लिए संशोधित किया है । तो, यह आपके dateव्यवहार को अपेक्षित मानकर काम करना चाहिए :

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 

आउटपुट जैसा दिखता है:

[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

हम जोड़ सकते हैं, -Tझंडे केवल util-linux-ng-2.20.xऔर अधिक के लिए समर्थन करते हैं , इसलिए यह उबंटू 12.04 और उच्चतर का समर्थन करेगा और CentOS / RHEL 6.3 और इससे कम में नहीं
— राहुल पाटिल

3
मैं dmesgवर्षों से उपयोग कर रहा हूं और मैंने केवल इस ध्वज के बारे में सीखा है। मुझे किसी ने क्यों नहीं बताया? : डी
— मार्टिन वॉन विटिच

1
@MartinvonWittich यहाँ एक ही है, मैं तो बस आदमी पेज पहली बार आज :) के लिए पढ़ा
— terdon

क्षमा करें, यह पहले से नहीं कहा था कि मैं ओपनर का उपयोग करता हूं।

सिर्फ रिकॉर्ड के लिए: बस के रूप dmesg -Tमें, जवाब में स्क्रिप्ट भी हाइबरनेट पर गलत समय दिखाता है।
— हाय-एंजेल

4

आपका संस्करण dmesgस्पष्ट रूप से पूर्ण-से-पूर्ण नहीं है, util-linuxबल्कि इसके द्वारा प्रदान किया गया है busybox।

busyboxउपयोगिताओं की एक भीड़ की मूल बातें प्रदान करता है , लेकिन यह उनके सभी निफ्टी सुविधाएँ प्रदान नहीं करता है।

यदि आप -Tटेर्डन द्वारा सुझाए गए (सही) ध्वज का उपयोग करना चाहते हैं , तो आपको दिए गए dmesgबाइनरी का उपयोग करना होगाutil-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 $
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.