`Dmesg` এর আউটপুট" লেজু "করা সম্ভব?


137

এরকম কিছু করতে চাই

dmesg | tail -f

তবে এটি কার্যকর হয় না: আমি আউটপুট পর্যবেক্ষণের পরিবর্তে লেজটি বাইরে বেরিয়ে আসার জন্য ম্যাক ওএসএক্স 10.6.7 ব্যবহার করি।

আমি ভাবছি এটি করার কোনও উপায় আছে, বা কোনও সমতুল্য আদেশ আছে। পিএস, আমি মনে করি না একটি whileলুপ একটি ভাল যথেষ্ট ধারণা হবে।


এটি আমার উবুন্টু 10.04LTS বাক্সে দুর্দান্ত কাজ করে। সিসলগ কার্নেল বার্তাগুলির মধ্যে যে কোনও লগফাইলে রাখছে তা লেগেছে work

4
ম্যাক ওএসএক্স-এ, ফাইলটি /var/log/kernel.log

1
@ অজ্ঞাতনামা 2: দুর্ভাগ্যক্রমে, kernel.logএর মতো আউটপুট থাকে না dmesg। উদাহরণস্বরূপ, একটি ক্ষতিগ্রস্থ ড্রাইভের জন্য, ফাইলটি পড়ার ত্রুটিগুলি dmesgনির্দিষ্ট করে ঠিক কোন ফাইলটি পড়া যায়নি, এবং kernel.logদুর্ভাগ্যক্রমে কেবলমাত্র কম-সাহায্যকারী নোটিশ সরবরাহ করে:disk0s2: I/O error.
ইভান ভুইকা

3
লিনাক্স 3.5 যেহেতু, আপনি dmesg -w করতে পারেন।
ডগ রিচার্ডসন

উত্তর:


119

আপনি সম্ভবত বিভিন্ন লগ ফাইল থেকে বার্তাগুলির কিছু সংমিশ্রণের সন্ধান করছেন। চেষ্টা করুন:

tail -f /var/log/{messages,kernel,dmesg,syslog}

... সিস্টেমের একটি সুন্দর ভাল ওভারভিউ পেতে। আপনি যদি এর চেয়ে কম বা বেশি চান তবে আপনি যে বার্তাটি দেখতে চান তা কোন লগ ফাইলের মধ্যে স্থাপন করা হচ্ছে তা নিয়ে গবেষণা করুন।

multitailফাইল এবং কালার কোড ব্যবহার করে একবারে একবারে একাধিক লগ ফাইল ফিল্টার করে দেখুন।

সম্পাদনা করুন: আমি যখন এটির উত্তর দিয়েছিলাম তখন এটি খুব প্রাসঙ্গিক ছিল না, তবে এই পৃষ্ঠায় প্রচুর হিট লেগেছে বলে আমি মনে করি এটি উল্লেখ করা দরকার যে সিস্টেমডে চলমান নতুন সিস্টেমগুলির এটি রয়েছে।

dmesg -w

4
হেডস-আপ করার জন্য ধন্যবাদ Re: multitail। বেশ মজার তো. : OS X এর ক্ষেত্রে এটি ভালো কিছু হবেন tail -f /var/log/{system.log,kernel.log}
Boehj

2
system.logএবং ওএস এক্স-তে kernel.logসঠিক আউটপুট ধারণ করে না dmesgexample উদাহরণস্বরূপ, ক্ষতিগ্রস্থ ড্রাইভের জন্য, ফাইলটি পড়ার ত্রুটিগুলি dmesgনির্দিষ্ট করে কোন ফাইলটি পড়া যায়নি, এবং kernel.logদুর্ভাগ্যক্রমে কেবলমাত্র কম-সাহায্যকারী বিজ্ঞপ্তি সরবরাহ করে:disk0s2: I/O error.
ইভান ভুইকা

3
রেকর্ডের জন্য, এই উত্তরটি ওএস এক্স ম্যাভেরিক্স (10.9) বা আর্ক লিনাক্সে কাজ করে না।
এলে মুন্ডি

@ ডান অন আর্ট আপনার সম্ভবত সিসলোগ ডেমন ইনস্টল করা নেই বা এর পরিষেবা সক্ষম করা নেই। আমি লক্ষ্য করেছি যে এটি বেসিক প্যাকেজ সেটটির অংশ নয় যদিও এটি বেশ মৌলিক। ওএসএক্স বিএসডি ভিত্তিক এবং অনেক কিছুর জন্য আলাদা পথ রয়েছে। আপনার সিস্টেমটি কোথায় এবং কোথায় লগিং পরিচালনা করে এবং সামঞ্জস্য করে তা নির্ধারণ করতে হবে। আমার উত্তরটি বেশ জেনেরিক এবং সিসলোগ সক্ষমের সাথে বেশিরভাগ এফএইচএস ভিত্তিক ডিস্ট্রোসকে কভার করে, তবে প্রচুর বৈকল্পিক বাস্তবায়নও রয়েছে।
কালেব

1
সম্পাদনা উপর ++।
pstanton

56

এটি কেবল # # $% আইং কাজ করুন make

  1. আপনি অবিলম্বে, তাত্ক্ষণিকভাবে ডেমস্যাগের আউটপুট মুদ্রণ করতে চান
  2. Dmesg কার্নেল রিং বাফার মুদ্রণ করছে (দেখুন man dmesg)
  3. কার্নেলের রিং বাফারটি একটি বিশেষ প্রকল্প ফাইল, /proc/kmsg(দেখুন man proc)
  4. /proc/kmsgসরাসরি পড়ুন , যেমন cat /proc/kmsg

এখন, আপনি বন্ধুত্বপূর্ণ প্রকল্পের ম্যানুয়ালটি পড়লে এটি আপনাকে দৃ one়ভাবে সতর্ক করবে যে /proc/kmsgএকবারে কেবলমাত্র একজন ব্যবহারকারী (যাকে অবশ্যই অধিকারী হতে হবে) পড়তে দিন। আপনার যা কিছু সিসলগ বাস্তবায়ন করা উচিত এটি করা উচিত এবং সম্ভবত এটি এর সাথে কাজ করে dmesg। আমি জানি না, আমি এখানে আমার লিগের বাইরে আছি, কেবল ম্যানুয়ালটি প্যারাফ্রেস করছি। সুতরাং এটি "কেবলমাত্র এটি @ # $% আইং কাজটি তৈরি করুন" এর পথে, প্রথমে পরবর্তী কয়েকটি পদ্ধতি বিবেচনা করুন।

ম্যান পৃষ্ঠা অনুমোদিত: ঘড়ি + ডিমেজ g

Systemd init * সহ আর্চ gnu / লিনাক্সে, dmesg.log খুব প্রায়শই লেখা হয় না, সম্ভবত একেবারেই নয়? কর্নেল লগ বাফারটি অবিচ্ছিন্নভাবে পড়তে পারা সবচেয়ে ভাল উপায় watch। এর মতো কিছু আপনাকে শুরু করা উচিত (আপনার টার্মিনালে কতগুলি লাইনের সাথে ফিট করে তার জন্য সামঞ্জস্য করুন):

watch 'dmesg | tail -50'

ঘড়ি + ডিমেজ + ডিমন + লেজ -ফ

আরও বিশৃঙ্খল সমাধান ফাইলটিতে dmesg আউটপুট লিখতে ঘড়ি ব্যবহার করতে পারে যা আপনি তখন করতে পারেন tail -f। আপনি সম্ভবত এটি ডিমন হিসাবে চলমান চান। একটি উপযুক্ত ডিমন লগগুলি জিপ এবং ঘোরান। নিম্নলিখিত বাশ কোডটি অনির্যুক্ত, অযৌক্তিক এবং কেবল একটি ধারণা দেওয়ার উদ্দেশ্যে to @ ব্রুকস মূসার উত্তরের একটি কার্যকরী সংস্করণ রয়েছে

watch 'dmesg >> /var/log/dmesg.log | tail -1'

* স্পর্শকাতর, কারণ এটি একটি ওক্স প্রশ্ন, তবে যখন সিস্টেমড চারপাশে থাকে তখন বিরক্ত করবেন না dmesg, ব্যবহার করুন journalctl -xf(সম্ভবত ডাব্লু / -n 100পূর্ববর্তী 100 লাইনগুলি দেখানোর জন্য)


1
ওএস এক্স এর নেই /proc, তবে আপনার বাকী উত্তর প্রযোজ্য। watchম্যাকপোর্টস থেকে ইনস্টল করা যেতে পারে: macport.org
ইভান

@ ইভান ভুইকা আহ, জেনে ভাল। আশ্চর্য যেখানে ওএসএক্স কার্নেল রিং বাফারকে উপস্থাপন করে ..
djeikyb

2
দেখে মনে হচ্ছে এটি সরাসরি কার্নেল স্মৃতিতে রয়েছে। অ্যাপলের dmesgবাস্তবায়নের জন্য সোর্স কোড : ওপেনসোর্স.এপল.
com

42

লিনাক্সে আগ্রহী তাদের জন্য, কার্নেল কার্নেল 3.5.0 থেকে:

# dmesg -w

systemdআপনার সিস্টেমে আপনি যা করতে পারেন:

# journalctl -kf

6
dmesg -wএকেবারে সর্বোত্তম সমাধান। দুর্ভাগ্যক্রমে, উবুন্টু 14.04 এমনকি এটির জন্য প্রস্তুত বলে মনে হচ্ছে না কারণ ব্যবহারকারী স্থান সরঞ্জাম এখনও এটি সমর্থন করে না।
ড্যানিয়েল অ্যাল্ডার

1
এই উত্তরটি অবশ্যই আরও অধিক সংস্থার দাবিদার।
m4tx

2
হ্যাঁ, এটি একটি দুর্দান্ত ছোট্ট নকশা। এর সাথে মানুষের পাঠযোগ্য করে তোলা যায়: dmesg -wH
faustus

21

ডিজেকিবের উত্তরে এখানে একটি বৈকল্পিক রয়েছে যা প্রকৃতপক্ষে পরীক্ষিত এবং কয়েকটি বাগ সংশোধন করে।

watch 'sudo dmesg -c >> /tmp/dmesg.log; tail -n 40 /tmp/dmesg.log'

গুরুত্বপূর্ণ কৌশলটি হ'ল আমরা করছি dmesg -cযা রিং বাফারটি প্রিন্ট করার পরে সাফ করে - সুতরাং প্রতিবারের মাধ্যমে আমরা কেবল শেষ সময়ের থেকে নতুন কী মুদ্রণ করি। এটি করতে আপনাকে মূল হতে হবে, এভাবে sudo। একটি বাগফিক্সও রয়েছে; উভয়ই কোনও ফাইলের আউটপুট ডাম্প করার চেষ্টা করে এবং এটি পুচ্ছতে পাইপ করা (যা কাজ করে না), আমরা কেবল সদ্য-লিখিত ফাইলটি থেকে পড়ছি।

আমরা dmesg > /tmp/dmesg.logপ্রতিটি আয়রণটি কেবল পুরো ফাইলটি ওভাররাইট করতে পারি , তবে এটি প্রচুর I / O এবং কম্পিউটারটি ওভাররাইটের মাঝখানে ক্র্যাশ হলে ফাইলটি হারাতে ঝুঁকিপূর্ণ risks

আপনি একই রকম কিছু করতে পারেন যা কিছুটা tail -fসময়ের সাথে আরও ঘনিষ্ঠভাবে কার্যকর হয় যা কার্যকর হয় dmesg -cএবং sleep 1চিরকাল (বেন হ্যারিসের উত্তর দেখুন)। তবে এটি যেহেতু কার্নেল বার্তা বাফারটি চলার সাথে সাথে এটি সাফ করছে তাই আপনি পরে সেগুলি চাইলে আপনি লগফাইলে জিনিসগুলি পাইপ করতেও পারেন।


6

এটি আপনার পক্ষে কাজ করতে পারে

while true;do sudo dmesg -c;done

মনে রাখবেন যে '-সি' পতাকাটি বার্তা বাফারকে স্টডআউটে সাফ করে দেয়। আপনি যদি মূল হন তবে 'সুডো' অপ্রয়োজনীয়। আপনি যদি মনে করেন এটি আপনার সিপিইউ রিসোর্সের খুব বেশি পরিমাণে খাচ্ছে, লুপটি শেষ হওয়ার আগে একটি 'ঘুম 1' যুক্ত করার চেষ্টা করুন।


ঘড়িটি সেখানে ভাল থাকতে পারে, আপনি যদি সমস্ত সময় স্ক্রিনটি দেখেন
শেঠ রবার্টসন

2
আপনার উত্স উদ্ধৃত নির্দ্বিধায়: linuxforums.org/forum/applications/…

2
দ্রুত এবং ময়লা. নোংরা কারণ এটি কেবল তখনই কাজ করে যদি আপনি একমাত্র ব্যবহারকারী এটি করেন। অন্যথায় প্রতিটি ব্যবহারকারীর কেবলমাত্র অর্ধেক বার্তা পাওয়া যায়
ড্যানিয়েল অল্ডার

আমার অ্যান্ড্রয়েড অ্যাডবি সমস্যা সমাধান করে।
প্যানটোইন

5

এই পোস্টটি দেখার আগে এটি করেছিলেন:

#!/usr/bin/env perl

use strict;
use warnings;

# "tail -f" for dmesg
# Keeps last printed line. Anything sorting "gt" will be newer

$|=1;

my $y = '';

while(1) {
    for my $k (`dmesg`) {
        if ($k gt $y) {
            print $k;
            $y = $k;
        }
    }        
    sleep 1;
}
exit;

3

আপনি করতে সক্ষম হতে পারে:

tail -f /var/log/messages

2
বেশিরভাগ সিস্টেমে, সিস্টেম বুট শেষ হওয়ার পরে ডেমসগ লগ ফাইলটি ডেমসগ বাফারের একটি স্ট্যাটিক ডাম্প। এর পরে, কোনও নতুন কার্নেল বার্তা সাধারণত অন্য লগ ফাইলে যায় এবং ডেমসগ ফাইলটি পুনরায় বুট না হওয়া পর্যন্ত অপরিবর্তিত থাকবে।

7
আমি "সর্বাধিক" সিস্টেমগুলি সম্পর্কে জানি না, তবে আমি পরিচালিত জিএনইউ লিনাক্স সিস্টেমগুলির মধ্যে কোনওটিই সেভাবে আচরণ করে না। dmesgকার্নেল থেকে সর্বশেষতম বার্তাগুলির একটি বর্তমান সেট প্রতিবেদন করে, সাধারণত হার্ডওয়্যার সাবসিস্টেমগুলির জন্য নির্দিষ্ট।
কালেব

3

যখন dmesg -c >> /tmp/dmesg.log; ঘুমাও 0.1; সম্পন্ন & লেজ -f /tmp/dmesg.log


কেন এটি সমাধান তা দয়া করে ব্যাখ্যা করতে পারেন।
ক্রিসএফ

পর্দার আড়ালে কিছু বিতরণ এটি করে। এটি কার্নেল রিংবফারটি পোল করে এবং প্রতি আউটপুট লেজ দেওয়ার সময় প্রতি 0.1 সেকেন্ডে এটি /tmp/dmesg.log এ লগ করে। এছাড়াও, এটি একমাত্র পদ্ধতি যা আপনার পটভূমিতে কোনও বিশেষ চলমান না থাকলে কাজ করবে - বা আপনি যদি সমস্ত পটভূমি প্রক্রিয়া এবং পরিষেবাগুলি মেরে ফেলেছেন এবং আপনি জরুরি সমস্যা সমাধান করছেন।
ডাজেলফ

1
ব্যবহার করা সহজ বলে মনে হচ্ছেwatch
পুলি

আপনার যদি এটি উপলব্ধ থাকে :-) কখনও কখনও আপনি এমন পরিবেশে থাকেন যেখানে আপনার লেজও থাকে না ... তবে আপনি বিড়াল /tmp/dmesg.log, বা ডিডি এমনকি ব্যবহার করতে পারেন ... আপনি যদি লিখতে না পারেন to / tmp, এবং মাউন্ট -t tmpfs - / tmp, বা ramfs, বা / dev / shm / এ লিখতে পারবেন না ... তবে আপনি ঠিক যখন dmesg -c করতে পারেন; ঘুম 0.1; প্রতিধ্বনি> / দেব / নাল; সম্পন্ন, যদি আপনার ঘুম না হয়, ঠিক যখন dmesg -c; প্রতিধ্বনি> / দেব / নাল; সম্পন্ন; কখনও কখনও আপনার কাছে
এলএসও থাকে

2

আমি এই উরফটি /root/.bashrc এ ব্যবহার করি;

alias dwatch='watch -n 0.1 "dmesg | tail -n $((LINES-6))"'

যা dmesg অনুসরণ করে এবং এটি যে কোনও টার্মিনাল ডেকেছে তার জন্য লাইনগুলিকে সামঞ্জস্য করে।


0

বর্তমান উবুন্টুর অধীনে (আমি উবুন্টু 12.04 ব্যবহার করছি),

tail -f /var/log/syslog

প্রয়োজন মেটাতে পারে


0

আমি একটি বিশেষ কার্নেল ইভেন্ট সন্ধান করতে এই কোডটি ব্যবহার করেছি এবং এটি একটি "কলব্যাক" প্রক্রিয়া পাইপ করেছি:

while true ; do dmesg -c ; sleep .1 ; done \
| grep --line-buffered  -o $pattern \
| ... 

-2

একটি পুরানো প্রশ্নের প্রতিক্রিয়া, কিন্তু কেউ এটি দরকারী মনে হতে পারে :)

dmesg | পুচ্ছ -

স্টেটআউটের শর্টকাট হিসাবে - অপারেটরটি ব্যবহার করে লেজ দিয়ে dmesg আউটপুট পাইপ দেয়


2
এটি প্রশ্ন থেকে কোড যা কাজ করে না।
পাবউক

2
এটি কাজ করে না কারণ dmesgএকবার বন্ধ হওয়ার পরে আউটপুট বন্ধ হয়। tail -fএটি আর পরিবর্তন করতে পারবেন না।
ড্যানিয়েল অ্যাল্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.