Articles
OpenWRTで人間が読める形式のdmesgタイムスタンプ
On 2月 17, 2021 by admindmesgの出力には、システムが起動してからの秒数とミリ秒数が表示されます。
[ 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:秒+ミリ秒を読み取り可能な形式にするにはどうすればよいですか?
私の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
利用可能なスペースがあまりないため、util-Linuxをインストールすることはできません:
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
コメント
回答
あなたが探しているのは-T
man dmesg
に記載されているとおり:
-T、-ctime
印刷人間が読めるタイムスタンプ。タイムスタンプが不正確である可能性があります!
ログに使用されるタイムソースはシステム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
ここでクールなトリックを見つけました。iv dmesg
divに複数の]
があると失敗するため、そこで使用されているid = “032e33b7f4″>
式が間違っていました>行。自分で見つけたすべてのケースで機能するように変更しました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
以降をサポートするため、Ubuntu 12.04以降をサポートし、CentOS / RHEL6.3以下ではサポートしません - I '
dmesg
を何年も使用していて、今はこのフラグについてしか知りませんでした。なぜ誰も私にそれを言わなかったのですか? :D - @MartinvonWittich同じです。今日初めてmanページを読みました:)
- 申し訳ありませんが、' tこれは、私がopenwrtを使用することを事前に述べています。
- 記録のために:
dmesg -T
と同じように、回答のスクリプトも休止状態のときに間違った時間を示しています。
回答
お使いのバージョンのdmesg
は明らかに完全ではありません-util-linux
から提供されたものですが、代わりにbusybox
によって提供されます。
busybox
は、多数のユーティリティの基本を提供しますが、すべての優れた機能を提供するわけではありません。
フラグは(正しく)terdonによって提案されているため、util-linux
pによって提供されるdmesg
バイナリを使用する必要があります。 >
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 $
形式ですか?
/var/log/syslog
)に記録する場合は、そのログを確認してください。同じ情報が含まれている可能性がありますが、タイムスタンプは読み取り可能です。 。date
コマンドは-d
フラグをサポートしていませんよね?そして、Pythonもありませんか?これはどのawk
実装ですか?少なくともGNU awk
ですか?date -d
をお持ちの場合は、更新された回答が機能するはずです。