পরিবর্তনের সাথে সাথে আমি কীভাবে ডেমস্যাগ আউটপুট দেখতে পারি?


141

আমি এমন একটি ডিভাইস ড্রাইভার লিখছি যা রিং বাফার dmesg আউটপুটে ত্রুটি বার্তা প্রিন্ট করে । আমি আউটপুট দেখতে চাই dmesgএটি পরিবর্তন হিসাবে।

কিভাবে আমি এটি করতে পারব?


উত্তর:


178

তুলনামূলকভাবে সাম্প্রতিক dmesgসংস্করণগুলি একটি ফলো বিকল্প ( -w, --follow) সরবরাহ করে যা আনুগত্যিকভাবে কাজ করে tail -f

সুতরাং, কেবল নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

$ dmesg -wH

( -H, --humanরঙ, আপেক্ষিক সময়ের মতো ব্যবহারকারী-বান্ধব বৈশিষ্ট্যগুলিকে সক্ষম করে)

এই বিকল্পগুলি ফেডোরা 19-তে উদাহরণস্বরূপ উপলব্ধ।


2
ভাল লাগছে! -H
জেন্টু কুঁকড়ে

ব্যবহারকারীর স্থান সরঞ্জামগুলির সংস্করণ 2.22+ হওয়া দরকার। উবুন্টু ব্যবহারকারীদের 14.10 সংস্করণ "ইউটিপিক" অপেক্ষা করতে হবে
ড্যানিয়েল অ্যাল্ডার

1
উবুন্টু কুঁচকে যায় না - ঘড়ি ব্যবহার করতে হবে (নীচে)
ব্রেন্ট ফাস্ট

2
বাহ্যিক সিসাদমিন উত্তর যা ক্রিপ্টিক একক-বর্ণচিহ্নযুক্ত পতাকাগুলির পরিবর্তে - বর্ণনামূলকভাবে নামযুক্ত-পতাকা ব্যবহার করে। ব্রাভো, স্যার সাবাস।
allyourcode

1
-wইউটোপিক (14.10) এর পরে উবুন্টুর প্রতিটি সংস্করণে কাজ করা উচিত। ( লঞ্চপ্যাড.এন.উবুন্টু
++সোর্স

54

আপনি watchঠিক কমনটি ব্যবহার করতে পারেন যা ঠিক এই জাতীয় জিনিসগুলির জন্য উদ্দেশ্যে করা হয়

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

$((LINES-6))অংশ এটি আপনার টার্মিনাল মধ্যে চমত্কারভাবে মাপসই করা উচিত।


2
আপনি যদি ডাবল উদ্ধৃতিগুলির পরিবর্তে একক উদ্ধৃতি ব্যবহার করেন (বা ডলার চিহ্ন থেকে রেহাই পেয়েছেন), আপনি প্রতিটি অনুরোধের জন্য $ লাইনগুলির একটি নতুন মান পাবেন, তাই আপনি যদি আপনার টার্মিনালের আকার পরিবর্তন করেন তবে এটি সামঞ্জস্য হবে।
পি ড্যাডি

একক উদ্ধৃতি পরিবর্তনশীল প্রসারিত বাধা দেবে। তদতিরিক্ত, ভেরিয়েবলটি এই উদাহরণে কেবল একবার প্রসারিত হয় - এর অনুরোধের পরে watch। সুতরাং এটি আমন্ত্রণের মধ্যে সত্যই পরিবর্তন হবে না dmesg। একজনকে এমন একটি মোড়ক ব্যবহার করা দরকার যা টার্মিনাল অবস্থার প্রশ্ন করবে।
পিটার্ফ

2
এটাই আসল ব্যাপার. শেলটি আর্গুমেন্টগুলিতে প্রেরণ করার সময় একক উদ্ধৃতিগুলি পরিবর্তনশীল সম্প্রসারণ নিষিদ্ধ করে watch, সুতরাং ঘড়িটি সেখানে ভেরিয়েবল এক্সপ্রেশন সহ কমান্ডটি কার্যকর করবে, যা শেলটি চালিত করে এটি প্রসারিত হবে। প্রতি বার. এটি চেষ্টা করুন, এটি কাজ করে।
পি বাবা 14

হুম, আপনি ঠিক বলেছেন - আমি ধরে নিই watchব্যবহারগুলি popen(), যার অর্থ অন্য শেল তৈরি হয়েছে এবং পরিবেশের পরিবর্তনশীল তার পরে সরবরাহ করা হবে (এবং এভাবে প্রতিটি এক্সিকিউটিভ রানের উপর আপডেট হয়)। ভাল লাগছে।
পিটার্ফ

12

আপনি সত্যই dmesgসরাসরি আউটপুট নিরীক্ষণ করতে পারবেন না ।

তবে, সম্ভাবনা বেশি যে আপনার মডিউলটি সরাসরি ডেমসগের রিং-বাফারে মুদ্রণ করছে না, তবে পরিবর্তে কার্নেল লগিং সুবিধাগুলি ব্যবহার করে (যা পরে প্রদর্শিত হবে dmesg)। যদি আপনার syslogকিছু বুদ্ধিমান (যেমন ডিফল্ট) সেটিংস থাকে তবে সম্ভবত এই বার্তাগুলি kern.logলগফাইলে প্রদর্শিত হবে।

সুতরাং আপনি যেমন কিছু করতে পারেন:

 tail -f /var/log/kern.log

/var/log/kern.logমোটামুটি লিনাক্স-নির্দিষ্ট। ওপেনবিএসডি (এবং সম্ভবত অন্যদের) জন্য ডেমসগ স্টাফগুলি / var / লগ / বার্তাগুলিতে লগ ইন হয়। মঞ্জুর, অন্য কিছু জিনিস সেখানে যায় goes
কুর্তম

2
tail -f /var/log/{messages,kernel,dmesg,syslog}সুপারউজারের
এখানে

9

আপনি dmesgকার্নেলের লগ বার্তা পেতে ব্যবহার করেন।

কার্নেল নিজেই একটি রিং বাফারে লগইন করে, যেমন কেবল স্মৃতিতে। এখন সমস্ত dmesgকিছুই সেই রিং বাফারের সামগ্রীর আউটপুট। আপনি যদি dmesg -cএটি করেন তবে পরে রিং বাফারটিও মুছবেন।

সুতরাং আপনি while true; do dmesg -c; sleep 1; doneকাজ না করার সমতুল্য মতো কিছু পাওয়ার মতো কিছু করতে পারেন dmesg|tail। তবে এটি রিং বাফারটিকে মুছে ফেলে এবং সুতরাং মূল শক্তির প্রয়োজন।

অন্য উপায়টি হ'ল ফাইল /proc/kmsgযা রিং বাফারে একটি ভিউকে অনুমতি দেয়। আপনি করতে পারেন tail -f /proc/kmsg, তবে এটি কেবলমাত্র একটি প্রক্রিয়ার জন্য অনুমোদিত এবং এটি সাধারণত আপনার লগিং ডেমন। - এটি বার্তাটি পড়ার এবং এটিকে আসল ফাইলগুলিতে (সাধারণত / var / লগতে) লিখতে হয় যেখানে সেগুলি পড়তে পারে। এটি সমস্ত বার্তাকে একটি ফাইলে বা বিভিন্ন অংশে বিভিন্ন ফাইলে আউটপুট করার জন্য কনফিগার করা যেতে পারে। (তবে কনফিগারেশন আপনার সিস্টেমের লগিং ডেমনের উপর নির্ভর করে))

সুতরাং /var/logআপনার প্রয়োজন অনুসারে এমন কোনও ফাইল রয়েছে কিনা তা একবার দেখুন এবং অন্যথায় আপনার লগিং ডেমনটি কনফিগার করেছেন।


//, সিইএনটিওএস 6 সিস্টেমে আমি ব্যবহার করছি, টেলিং করছি এবং দেখছি / প্রোক / কেএমজি কোনও আউটপুট তৈরি করে না। [~] do সুডোর টেইল -f / প্রোক / কেএমএসজি ♥% [~] $ সুডো ক্যাট / প্রোক / কেএমএসজি ♥% [~] $
নাথন বাসানিজ 4'15

8

আপনি যদি এমবেডেড সিস্টেম ব্যবহার করেন তবে ওপেনডব্লিউআরটি-র মতো সিস্টেমে ব্যস্তবক্সে খুব সীমিত কার্যকারিতা রয়েছে এবং কেবল ২-৩ টি ফ্ল্যাগ সমর্থিত।

ইভেন্টগুলি পরিবর্তনের সাথে সাথে আপনি যদি স্ক্রিনে ডেমসগ আউটপুট ক্রমাগত মুদ্রণের একটি দ্রুত এবং নোংরা উপায় চান, তবে একটি সরল বাশ লুপ কাজ করে। এটি আদর্শ নয় তবে আমি যেমন উল্লেখ করেছি ব্যাসিবক্স ডেমসগে প্রচুর ফাংশন অনুপস্থিত। কমান্ড লাইনে প্রবেশ করার পরে আমি নিম্নলিখিতগুলির একই প্রভাব পেয়েছি:

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

আপনি সিআরটিএল-সি দিয়ে লুপটি ছাড়তে পারেন স্লিপ 1 হ'ল এটি অকারণে সিপিইউতে ব্যাটারি থামানো, এবং -সি পতাকা প্রতিটি কলটিতে বাফার সাফ করে দেয় যাতে আপনি প্রতি সেকেন্ডে বারবার আউটপুট দেখতে না পান,


1
অ্যান্ড্রয়েড ডিবাগিংয়ের জন্য সত্যই দরকারী।
Val

5

যে সিস্টেমে systemdআপনি ব্যবহার করেন সেগুলিতে আপনি এটিও করতে পারেন:

# journalctl -kf

1
উবুন্টু 14.10: ~ ~ জর্জেন্টাল-কেএফএফ কোনও জার্নাল ফাইল পাওয়া যায় নি।
নাথান বাসানিজ

0

পৃথক টার্মিনালগুলি থেকে এই 2 টি কমান্ড ব্যবহার করুন:

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

এটি অনুরূপ ফলাফল অর্জন করবে।


//, এটি মূলত ডেসমেজকে আউটপুট টেস্ট.টেক্সট সংযুক্ত করার নির্দেশ দেয়, তাই না? এবং দ্বিতীয় কমান্ড কেবল সেই টেস্ট.টেক্সট ফাইলটি দেখে?
নাথান বাসানিজ

ধন্যবাদ .. হ্যাঁ .. ২ য় কমান্ড dmesg এ পরিবর্তনগুলি পর্যবেক্ষণ করছে। cat / proc / kmsg অনুরূপ আউটপুট অর্জন করতে পারে তবে এটি কোনও ফাইলে লগগুলি সংরক্ষণ করে না।
কে_কে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.