Dmesg ප්‍රතිදානය වෙනස් වන විට මා එය දකින්නේ කෙසේද?


156

මම උපාංග ධාවකයක් ලියන්නේ දෝෂ පණිවිඩය මුද්ද බෆර් dmesg ප්‍රතිදානයට මුද්‍රණය කරන බැවිනි. dmesgඑය වෙනස් වන විට එහි ප්‍රතිදානය දැකීමට මට අවශ්‍යය .

මට මෙය කළ හැක්කේ කෙසේද?


Answers:


198

සාපේක්ෂව මෑත dmesgසංස්කරණ වලට අනුරූපව ක්‍රියා කරන පසු විපරම් විකල්පයක් ( -w, --follow) සපයයි tail -f.

මේ අනුව, පහත දැක්වෙන විධානය භාවිතා කරන්න:

$ dmesg -wH

( -H, --humanවර්ණ, සාපේක්ෂ කාලය වැනි පරිශීලක-හිතකාමී විශේෂාංග සක්‍රීය කරයි)

එම විකල්පයන් උදාහරණයක් ලෙස ෆෙඩෝරා 19 හි ඇත.


2
සොයා ගැනීම සතුටක්! පිංතූරය අදහසත් මට නැත -Hනමුත් එසේ හඳුනා මත
nperson325681

පරිශීලක අභ්‍යවකාශ මෙවලම් 2.22+ අනුවාදය විය යුතුය. උබුන්ටු පරිශීලකයින්ට 14.10 "මනෝරාජික" අනුවාදය සඳහා රැඳී සිටිය යුතුය
ඩැනියෙල් ඇල්ඩර්

1
උබුන්ටු ග්‍රෝක් -w - ඔරලෝසුව භාවිතා කිරීමට අවශ්‍ය නැත (පහළ)
බ්‍රෙන්ට් ෆවුස්ට්

3
ගුප්ත තනි අකුරු ධජ වෙනුවට - විස්තරාත්මකව නම් කරන ලද ධජ භාවිතා කරන සිසැඩ්මින් පිළිතුරක්. බ්‍රාවෝ, සර්. බ්‍රාවෝ.
allyourcode

1
-wUtopic (14.10) සිට උබුන්ටු හි සෑම අනුවාදයකම වැඩ කළ යුතුය. ( launchpad.net/ubuntu/+source/util-linux/+publishinghistory යෝජනා කරන්නේ මුල් යුටොපික් පැකේජ 2.20 සඳහා වූ නමුත් එය නිකුත් වන විට 2.25 දක්වා ළඟා වූ බවයි.)
mwfearnley

57

watchමේ වගේ දේවල් සඳහා හරියටම අදහස් කරන විධානය ඔබට භාවිතා කළ හැකිය

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

මෙම $((LINES-6))කොටස එය ඔබගේ පර්යන්තය බවට අවසරයෙන් ගැලපෙන කළ යුතු ය.


3
ඔබ ද්විත්ව මිල ගණන් වෙනුවට තනි මිල ගණන් භාවිතා කරන්නේ නම් (හෝ ඩොලර් ලකුණෙන් ගැලවී යන්න), සෑම ආයාචනයක් සඳහාම ඔබට $ LINES නැවුම් අගයක් ලැබෙනු ඇත, එබැවින් ඔබ ඔබේ පර්යන්ත ප්‍රමාණය වෙනස් කළහොත් එය වෙනස් වේ.
පී ඩැඩි

තනි උපුටා දැක්වීම් විචල්‍ය ප්‍රසාරණය වළක්වයි. එපමණක් නොව, විචල්‍යය පුළුල් වන්නේ මෙම උදාහරණයේ එක් වරක් පමණි watch. මේ අනුව එය ආයාචනා අතර සැබවින්ම වෙනස් නොවේ dmesg. ටර්මිනල් තත්වය විමසීමට යමෙකුට එතීම භාවිතා කළ යුතුය.
peterph

3
සමස්ත කාරණය එයයි. තනි උපුටා දැක්වීම් මඟින් කවචය තර්ක විස්තාරණය කරන විට විචල්ය ප්‍රසාරණය වීම තහනම් කරයි watch, එබැවින් ඔරලෝසුව එහි විචල්‍ය ප්‍රකාශනය සමඟ විධානය ක්‍රියාත්මක කරනු ඇත, එය ක්‍රියාත්මක කරන කවචය මඟින් එය පුළුල් වේ. සෑම අවස්ථාවකම. එය උත්සාහ කරන්න, එය ක්රියා කරයි.
පී ඩැඩි

හ්ම්, ඔබ නිවැරදියි - මම watchභාවිතයන් උපකල්පනය කරමි popen(), එයින් අදහස් කරන්නේ තවත් කවචයක් බිහි වී ඇති අතර පරිසර විචල්‍යය එය මඟින් සපයනු ලැබේ (එමඟින් සෑම ක්‍රියාත්මක ධාවනයේදී යාවත්කාලීන වේ). සොයා ගැනීම සතුටක්.
peterph

12

ඔබට dmesgකෙලින්ම ප්‍රතිදානය නිරීක්ෂණය කළ නොහැක .

කෙසේ වෙතත්, ඔබේ මොඩියුලය කෙලින්ම dmesg වල මුද්ද බෆරයට මුද්‍රණය නොකිරීමට ඇති ඉඩකඩ වැඩිය, නමුත් ඒ වෙනුවට කර්නල් ල ging ු-සටහන් පහසුකම් භාවිතා කරයි (එය පසුව දර්ශනය වේ dmesg). ඔබට හොඳ syslog(උදා: පෙරනිමි) සැකසුම් තිබේ නම්, මෙම පණිවිඩ බොහෝ විට kern.logලොග්ෆයිල් තුළ ද පෙන්වනු ඇත .

එබැවින් ඔබට මෙවැනි දෙයක් කළ හැකිය:

 tail -f /var/log/kern.log

/var/log/kern.logතරමක් ලිනක්ස් විශේෂිත වේ. OpenBSD සඳහා (සහ සමහර විට වෙනත් අය) dmesg දේවල් / var / log / messages තුළට ලොග් වේ. තවත් සමහර දේවල් එහි යන බව ඇත්තයි.
kurtm

2
tail -f /var/log/{messages,kernel,dmesg,syslog}සුපර් යූසර්
මෙන්න

10

ඔබ dmesgකර්නලයේ ලොග් පණිවිඩ ලබා ගැනීමට භාවිතා කරයි.

කර්නලය මුද්ද බෆරයකට ලොග් වේ, එනම් මතකයේ පමණි. දැන් සියල්ලම dmesgකරන්නේ එම මුදු බෆරයේ අන්තර්ගතය ප්‍රතිදානය කිරීමයි. ඔබ dmesg -cඑය කළහොත් පසුව මුද්ද බෆරයද මකා දැමෙනු ඇත.

එම නිසා while true; do dmesg -c; sleep 1; doneවැඩ නොකිරීමට සමාන දෙයක් ලබා ගැනීමට ඔබට යමක් කළ හැකිය dmesg|tail. නමුත් මෙය මුද්ද බෆරය මකා දමන අතර එබැවින් මූල බලයන් අවශ්‍ය වේ.

අනෙක් ක්‍රමය වන්නේ /proc/kmsgමුද්ද බෆරය බැලීමට ඉඩ දෙන ගොනුවයි. ඔබට කළ හැකිය tail -f /proc/kmsg, නමුත් මෙය එක් ක්‍රියාවලියකට පමණක් ඉඩ දී ඇති අතර මෙය සාමාන්‍යයෙන් ඔබේ ල ging ු-සටහන් ඩීමන් වේ. - එහි කාර්යය වන්නේ පණිවිඩ කියවා ඒවා කියවිය හැකි සැබෑ ලිපිගොනු වලට (සාමාන්‍යයෙන් / var / log වලින්) ලිවීමයි. සියලුම පණිවිඩ එකම ගොනුවකට හෝ විවිධ කොටස් විවිධ ගොනු වලට ප්‍රතිදානය කිරීමට එය වින්‍යාසගත කළ හැකිය. (නමුත් වින්‍යාසය ඔබගේ පද්ධතියේ ල ging ු-සටහන් ඩීමන් මත රඳා පවතී.)

එබැවින් /var/logඔබේ අවශ්‍යතාවන්ට ගැලපෙන ගොනුවක් තිබේදැයි සොයා බලා ඔබේ ල ging ු-සටහන් ඩීමන් වෙනත් ආකාරයකින් වින්‍යාස කරන්න.


//, මම භාවිතා කරන CEntOS 6 පද්ධතියේ, ටයිල් කිරීම සහ බැලීම / proc / kmsg කිසිදු ප්‍රතිදානයක් ලබා නොදේ. [~] $ Sudo වලිගය -f / proc / kmsg ♥% [~] $ sudo cat / proc / kmsg ♥% [~] $
නේදන් Basanese

/dev/kmsgවඩා හොඳයි. unix.stackexchange.com/a/294206/5132
JdeBP

8

ඔබ OpenWrt වැනි පද්ධති වල බහුලව භාවිතා වන BusyBox වැනි කාවැද්දූ පද්ධතියක් භාවිතා කරන්නේ නම් , එය ඉතා සීමිත ක්‍රියාකාරීත්වයක් ඇති අතර සහය දක්වන්නේ කොඩි 2-3 ක් පමණි.

සිදුවීම් වෙනස් වන විට තිරය මත දිගින් දිගටම dmesg ප්‍රතිදානය මුද්‍රණය කිරීමට ඔබට අවශ්‍ය නම්, සරල Bash loop එකක් හොඳින් ක්‍රියාත්මක වේ. එය පරමාදර්ශී නොවේ, නමුත් මා සඳහන් කළ පරිදි BusyBox dmesg හි බොහෝ කාර්යයන් නොමැත. විධාන රේඛාවට ඇතුළු වූ විට පහත සඳහන් දේට සමාන බලපෑමක් ඇති බව මට පෙනේ:

$ while true; do dmesg -c ; sleep 1 ; done

ඔබට Ctrl+ සමඟ ලූපයෙන් ඉවත් විය හැකිය C. නින්ද 1 යනු එය අනවශ්‍ය ලෙස CPU වලට පහර දීම නැවැත්වීමයි. -C ධජය සෑම ඇමතුමකම බෆරය ඉවත් කරයි, එවිට සෑම තත්පරයකම නැවත නැවත ප්‍රතිදානය නොපෙනේ.


1
ඇන්ඩ්‍රොයිඩ් නිදොස් කිරීම සඳහා සැබවින්ම ප්‍රයෝජනවත් වේ.
val පවසන්නේ නැවත


0

වෙනම පර්යන්ත වලින් මෙම විධාන දෙක භාවිතා කරන්න:

  1. while true; do dmesg -c >> test.txt;sleep 1; done
  2. tail -f test.txt

එය සමාන ප්‍රති .ලයක් ලබා ගනු ඇත.


//, මෙය මූලික වශයෙන් test.txt වෙත ප්‍රතිදානය එකතු කරන ලෙස dmesg ට උපදෙස් දෙයි, නේද? දෙවන විධානය මඟින් එම test.txt ගොනුව නරඹයිද?
නේතන් බසානිස්

ස්තූතියි .. ඔව් .. 2 වන විධානය dmesg හි වෙනස්කම් නිරීක්ෂණය කරයි. cat / proc / kmsg ට සමාන ප්‍රතිදානයක් ලබා ගත හැකි නමුත් එය ලොගයන් ගොනුවකට සුරකිනු නොලැබේ.
කේ_කේ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.