A dmesg parancs kimenetének értelmezhető idő formátumban történő kijelzése

kimarite képe

Időnként alábecsüljük a naplók olvasásának és értelmezésének fontosságát. A rendszergazda vagy a felhasználó számára számára a naplók igen fontosak lehetnek. A naplók olvasásával elemezhetjük, hogy mi okozza a hibát vagy hibákat. A dmesg egy olyan, sokak által kedvelt parancssoros alkalmazás, amely a rendszermag (kernel) üzeneteit kinyomtatja a terminál ablakába vagy a konzolra, bizonyos mélység (részletgazdagság) szerint. Ez általában minden Linux terjesztésnél ugyanolyan mélységű részletességet jelent, amely a szint szerint változtatható (nem szoktuk). A kimenetben éppen annyi információ látszik, mint, amennyi szükséges a rendszermag működésének elvárhatóan megfelelő elemzéséhez. A túlzott részletességű kimenet felesleges és olvasása időrabló lenne. A szegényes, azaz nem túl részletgazdag kimenetből nem tudnánk meg szinte semmit.

A /var/log/ elérési úton több naplófájl is létezik, mindnek feladata van, sőt grafikus napló olvasó alkalmazás is létezik. Ezekre most nem térek ki, de megéri utánanézned a témának, illetve találkozhatsz a fórumon is velük.

A dmesg parancs kimenetében közölt (megjelenő, látható) adatok, üzenetek információkat tartalmazhatnak a processzorról, a merevlemezről, a nyomtatóról, a billentyűzetről, a memóriáról és az illesztőprogramokról is. A dmesg az összes adatot a rendszermag gyűrűs pufferéből olvassa. Fontos tudni, hogy valós idejű adatokról van szó. A kimeneti üzenetek igen terjedelmesek is lehetnek.

A dmesg egy rövídítésből képzett mozaikszó: display and driver messages

Milyen kívánságunk lehetne még? Óhaj, sóhaj? Igen. Most, hogy szólsz, eszembe jutott az, hogy ...

A parancs kimenetében jellemzően nem az ember által könnyen értelmezhető időformátumban jelennek meg a dátumok.

Mutatok két lehetőséget a kellemesebb megjelenítésre:

dmesg --time-format iso \
| while read datestring rest; do \
  printf '%s\n' "$(date -d "$datestring" +%F-%T) $rest"; done
dmesg --time-format iso \
| gawk '{ printf (strftime("+%F-%T",mktime(gensub("[-+T:,]"," ","g",$1)))) ; $1 = ""; print $0}'

... bármelyiket használhatod.

Az értelmezhetőbb dátum és idő ismeretében a kimenetben megjelenő hibák kis gondolkodással könnyebben visszavezethetőek valamilyen okra és tevékenységre. Akár az is kideríthető, hogy egy eszköz használatban volt-e.

A kézikönyv

man dmesg

illetve a súgó

dmesg -h

tartalmaz más paramétereket is.

Listázom, ők azok (a grep paranccsal szűkítettem a time kifejezésre a kimenetet):

dmesg -h | grep time
 -p, --force-prefix          force timestamp output on each line of multi-line messages
 -d, --show-delta            show time delta between printed messages
 -e, --reltime               show local time and time delta in readable format
 -T, --ctime                 show human-readable timestamp (may be inaccurate!)
 -t, --notime                don't show any timestamp with messages
     --time-format <format>  show timestamp using the given format:
                               [delta|reltime|ctime|notime|iso]
Suspending/resume will make ctime and iso timestamps inaccurate.

Próbáld ki ezeket is.

Hasznos információk

Mennyi az idő most? Idő ellenőrzés módszerek és kimeneteik:

sudo hwclock --show
2020-01-14 18:05:03.717970+01:00
date
2020. jan. 14., kedd, 18:05:11 CET

Az általában megjelenő idő formátum átalakítása.

A példa (ne így használd!),

date -u -d @{DMESG TIME}

amit jobban megértesz, amikor egy dmesg kimenetből másolt időt fordítok le az ember által jobban érthető formára:

date -u -d @12285.168876
1970. jan. 1., csütörtök, 03:24:45 UTC

... az idő a rendszer időzóna beállításoknak megfelelő kinézet (a példában Magyarország).
A megjelenített „idő” csalóka. Valójában ugyanazt látod, mint amit az uptime kimenet mutat: 0 nap, 3 óra 24 perc
Az így megjelenített idő a rendszermag ébredésétől, vagyis a rendszer utolsó indításától számított idő. Nem ugyanaz, mint helyi idő (date).

A rendszer indítása óta eltelt idő (és néhány más információ), az uptime (felébredés ideje): 3 óra 4 perc

uptime
 18:51:00 up  3:04,  1 user,  load average: 0,91, 1,01, 0,89

A rendszermag „időszámítása” (a parancssor futtatásának időpontjában):

cat /proc/uptime
10978.68 36948.86

Az uptime parancs kézikönyve,

man uptime

és egy rövid részlet.

UPTIME(1)                  Linux Programmer's Manual                 UPTIME(1)

NÉV
       uptime - Kiírja mennyi ideje fut a rendszer.

LEÍRÁS

       Az  uptime  program  egysoros  leírást  ad az alábbi információkról.  A
       pillanatnyi idő, mennyi ideje fut  a  rendszer,  hány  felhasználó  van
       pillanatnyilag  belépve,  és rendszer átlagos loadja az elmúlt 1, 5, és
       15 percre.

       Ez ugyanaz az információ, amit a w(1)  parancs  által  kiírt  első  sor
       tartalmaz.

A kézikönyvekből a Q billentyű megnyomásával lehet kilépni.

Enjoy :-)

https://www.youtube.com/watch?v=Mbao_laqF8E

Forrás:
https://unix.stackexchange.com/questions/538384/dmesg-custom-time-format
https://www.incredigeek.com/home/show-human-readable-time-in-dmesg/
https://ubuntuforums.org/showthread.php?t=1499412