මම උපාංග ධාවකයක් ලියන්නේ දෝෂ පණිවිඩය මුද්ද බෆර් dmesg ප්රතිදානයට මුද්රණය කරන බැවිනි. dmesgඑය වෙනස් වන විට එහි ප්රතිදානය දැකීමට මට අවශ්යය .
මට මෙය කළ හැක්කේ කෙසේද?
මම උපාංග ධාවකයක් ලියන්නේ දෝෂ පණිවිඩය මුද්ද බෆර් dmesg ප්රතිදානයට මුද්රණය කරන බැවිනි. dmesgඑය වෙනස් වන විට එහි ප්රතිදානය දැකීමට මට අවශ්යය .
මට මෙය කළ හැක්කේ කෙසේද?
Answers:
සාපේක්ෂව මෑත dmesgසංස්කරණ වලට අනුරූපව ක්රියා කරන පසු විපරම් විකල්පයක් ( -w, --follow) සපයයි tail -f.
මේ අනුව, පහත දැක්වෙන විධානය භාවිතා කරන්න:
$ dmesg -wH
( -H, --humanවර්ණ, සාපේක්ෂ කාලය වැනි පරිශීලක-හිතකාමී විශේෂාංග සක්රීය කරයි)
එම විකල්පයන් උදාහරණයක් ලෙස ෆෙඩෝරා 19 හි ඇත.
-Hනමුත් එසේ හඳුනා මත
-wUtopic (14.10) සිට උබුන්ටු හි සෑම අනුවාදයකම වැඩ කළ යුතුය. ( launchpad.net/ubuntu/+source/util-linux/+publishinghistory යෝජනා කරන්නේ මුල් යුටොපික් පැකේජ 2.20 සඳහා වූ නමුත් එය නිකුත් වන විට 2.25 දක්වා ළඟා වූ බවයි.)
watchමේ වගේ දේවල් සඳහා හරියටම අදහස් කරන විධානය ඔබට භාවිතා කළ හැකිය
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
මෙම $((LINES-6))කොටස එය ඔබගේ පර්යන්තය බවට අවසරයෙන් ගැලපෙන කළ යුතු ය.
watch. මේ අනුව එය ආයාචනා අතර සැබවින්ම වෙනස් නොවේ dmesg. ටර්මිනල් තත්වය විමසීමට යමෙකුට එතීම භාවිතා කළ යුතුය.
watch, එබැවින් ඔරලෝසුව එහි විචල්ය ප්රකාශනය සමඟ විධානය ක්රියාත්මක කරනු ඇත, එය ක්රියාත්මක කරන කවචය මඟින් එය පුළුල් වේ. සෑම අවස්ථාවකම. එය උත්සාහ කරන්න, එය ක්රියා කරයි.
watchභාවිතයන් උපකල්පනය කරමි popen(), එයින් අදහස් කරන්නේ තවත් කවචයක් බිහි වී ඇති අතර පරිසර විචල්යය එය මඟින් සපයනු ලැබේ (එමඟින් සෑම ක්රියාත්මක ධාවනයේදී යාවත්කාලීන වේ). සොයා ගැනීම සතුටක්.
ඔබට dmesgකෙලින්ම ප්රතිදානය නිරීක්ෂණය කළ නොහැක .
කෙසේ වෙතත්, ඔබේ මොඩියුලය කෙලින්ම dmesg වල මුද්ද බෆරයට මුද්රණය නොකිරීමට ඇති ඉඩකඩ වැඩිය, නමුත් ඒ වෙනුවට කර්නල් ල ging ු-සටහන් පහසුකම් භාවිතා කරයි (එය පසුව දර්ශනය වේ dmesg). ඔබට හොඳ syslog(උදා: පෙරනිමි) සැකසුම් තිබේ නම්, මෙම පණිවිඩ බොහෝ විට kern.logලොග්ෆයිල් තුළ ද පෙන්වනු ඇත .
එබැවින් ඔබට මෙවැනි දෙයක් කළ හැකිය:
tail -f /var/log/kern.log
/var/log/kern.logතරමක් ලිනක්ස් විශේෂිත වේ. OpenBSD සඳහා (සහ සමහර විට වෙනත් අය) dmesg දේවල් / var / log / messages තුළට ලොග් වේ. තවත් සමහර දේවල් එහි යන බව ඇත්තයි.
tail -f /var/log/{messages,kernel,dmesg,syslog}සුපර් යූසර්
ඔබ 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 ු-සටහන් ඩීමන් වෙනත් ආකාරයකින් වින්යාස කරන්න.
/dev/kmsgවඩා හොඳයි. unix.stackexchange.com/a/294206/5132
ඔබ OpenWrt වැනි පද්ධති වල බහුලව භාවිතා වන BusyBox වැනි කාවැද්දූ පද්ධතියක් භාවිතා කරන්නේ නම් , එය ඉතා සීමිත ක්රියාකාරීත්වයක් ඇති අතර සහය දක්වන්නේ කොඩි 2-3 ක් පමණි.
සිදුවීම් වෙනස් වන විට තිරය මත දිගින් දිගටම dmesg ප්රතිදානය මුද්රණය කිරීමට ඔබට අවශ්ය නම්, සරල Bash loop එකක් හොඳින් ක්රියාත්මක වේ. එය පරමාදර්ශී නොවේ, නමුත් මා සඳහන් කළ පරිදි BusyBox dmesg හි බොහෝ කාර්යයන් නොමැත. විධාන රේඛාවට ඇතුළු වූ විට පහත සඳහන් දේට සමාන බලපෑමක් ඇති බව මට පෙනේ:
$ while true; do dmesg -c ; sleep 1 ; done
ඔබට Ctrl+ සමඟ ලූපයෙන් ඉවත් විය හැකිය C. නින්ද 1 යනු එය අනවශ්ය ලෙස CPU වලට පහර දීම නැවැත්වීමයි. -C ධජය සෑම ඇමතුමකම බෆරය ඉවත් කරයි, එවිට සෑම තත්පරයකම නැවත නැවත ප්රතිදානය නොපෙනේ.
භාවිතා කරන පද්ධති systemdවලද ඔබට මෙය කළ හැකිය:
# journalctl -kf
වෙනම පර්යන්ත වලින් මෙම විධාන දෙක භාවිතා කරන්න:
while true; do dmesg -c >> test.txt;sleep 1; donetail -f test.txtඑය සමාන ප්රති .ලයක් ලබා ගනු ඇත.