Door mensen leesbare dmesg-tijdstempels op OpenWRT
Geplaatst op februari 17, 2021 door adminDe uitvoer van dmesg toont het aantal seconden + milliseconden sinds het opstarten van het systeem.
[ 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
V: Hoe zet ik de seconden + milliseconden in een leesbaar formaat?
Mijn 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
Het is niet mogelijk util-Linux te installeren, omdat er niet veel beschikbare ruimte is:
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
Reacties
Antwoord
Ik denk dat wat je “zoekt is -T
zoals gedocumenteerd in man dmesg
:
-T, –ctime
Afdrukken door mensen leesbare tijdstempels. Het tijdstempel kan onnauwkeurig zijn!
De tijdbron die voor de logboeken wordt gebruikt, wordt niet bijgewerkt nadat het systeem is onderbroken / hervat.
Dus bijvoorbeeld:
[ 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
Wordt:
[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
Ik vond een coole truc hier . De sed
-expressie die daar werd gebruikt, was verkeerd omdat deze mislukte als er meer dan één ]
in de dmesg
regel Ik heb het aangepast om te werken met alle gevallen die ik in mijn eigen gevallen heb gevonden dmesg
uitvoer. Dit zou dus moeten werken ervan uitgaande dat uw date
zich gedraagt zoals verwacht:
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
Uitvoer ziet er als volgt uit:
[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
Reacties
- we kunnen ook
-T
alleen vlaggen toevoegen ondersteuning voorutil-linux-ng-2.20.x
en hoger, dus het ondersteunt Ubuntu 12.04 en hoger en niet in CentOS / RHEL 6.3 en lager - I ‘ gebruik
dmesg
al jaren en ik hoorde nu pas over deze vlag. Waarom heeft niemand me dat verteld? : D - @MartinvonWittich hier hetzelfde, ik heb de man-pagina vandaag voor het eerst gelezen 🙂
- sorry, ‘ t zei dit van tevoren dat ik openwrt gebruik.
- Voor de goede orde: net zoals
dmesg -T
doet, toont het script in het antwoord ook de verkeerde tijd tijdens de winterslaap.
Antwoord
jouw versie van dmesg
is duidelijk niet de volledige -volledige versie van util-linux
maar wordt in plaats daarvan geleverd door busybox
.
busybox
biedt de basis van een veelvoud aan hulpprogrammas, maar het biedt niet “al hun handige functies.
als je de vlag zoals (terecht) voorgesteld door terdon, moet u het dmesg
binaire bestand gebruiken dat wordt geleverd door 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 $
/var/log/syslog
op Debian-systemen, controleer dan dat logboek; het kan dezelfde informatie bevatten maar met leesbare tijdstempels .date
commando ondersteunt de-d
vlag niet, toch? En ook geen python denk ik? Welkeawk
implementatie is dit? Is hetGNU awk
tenminste?date -d
hebt, zou mijn bijgewerkte antwoord moeten werken.