මම උපාංග ධාවකයක් ලියන්නේ දෝෂ පණිවිඩය මුද්ද බෆර් dmesg ප්රතිදානයට මුද්රණය කරන බැවිනි. dmesg
එය වෙනස් වන විට එහි ප්රතිදානය දැකීමට මට අවශ්යය .
මට මෙය කළ හැක්කේ කෙසේද?
මම උපාංග ධාවකයක් ලියන්නේ දෝෂ පණිවිඩය මුද්ද බෆර් dmesg ප්රතිදානයට මුද්රණය කරන බැවිනි. dmesg
එය වෙනස් වන විට එහි ප්රතිදානය දැකීමට මට අවශ්යය .
මට මෙය කළ හැක්කේ කෙසේද?
Answers:
සාපේක්ෂව මෑත dmesg
සංස්කරණ වලට අනුරූපව ක්රියා කරන පසු විපරම් විකල්පයක් ( -w
, --follow
) සපයයි tail -f
.
මේ අනුව, පහත දැක්වෙන විධානය භාවිතා කරන්න:
$ dmesg -wH
( -H
, --human
වර්ණ, සාපේක්ෂ කාලය වැනි පරිශීලක-හිතකාමී විශේෂාංග සක්රීය කරයි)
එම විකල්පයන් උදාහරණයක් ලෙස ෆෙඩෝරා 19 හි ඇත.
-H
නමුත් එසේ හඳුනා මත
-w
Utopic (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; done
tail -f test.txt
එය සමාන ප්රති .ලයක් ලබා ගනු ඇත.