سؤال هل من الممكن أن `tail -f` إخراج` dmesg`؟


تريد أن تفعل شيء من هذا القبيل

dmesg | tail -f

لكنها لا تعمل: أستخدم Mac OSX 10.6.7 ، من خلال عمل ذلك الذيل سيخرج ، بدلاً من مراقبة الإخراج.

أتساءل عما إذا كان هناك أي طريقة للقيام بذلك ، أو أي أمر معادل. ملاحظة: لا أعتقد ذلك while حلقة ستكون فكرة جيدة بما فيه الكفاية.


123
2018-05-26 21:55


الأصل


يعمل بشكل جيد في صندوق أوبونتو 10.04LTS. سيكون الحل البديل ذيل ملف السجل الذي يقوم syslog بوضع رسائل kernel به.
في نظام التشغيل Mac OSX ، يكون هذا الملف هو /var/log/kernel.log
Marc آسف لقد أضفت مواصفات الجهاز الآن. bobDevil هذا رائع ، ولكن يبدو أن الإخراج مختلف عن dmesg. لكن هذا واحد يبدو أجمل - Ivan Z. G. Xiao
منذ لينكس 3.5 ، يمكنك القيام به dmesg -w. - Doug Richardson
unix.stackexchange.com/questions/95842/... - Ciro Santilli 新疆改造中心 六四事件 法轮功


الأجوبة:


ربما كنت تبحث عن بعض مزيج من الرسائل من ملفات السجل المختلفة. محاولة:

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

... للحصول على نظرة عامة جيدة على النظام. إذا كنت تريد أكثر أو أقل من ذلك ، فقم بالبحث عن ملف السجل الذي تريد أن تراه.

النظر أيضا في استخدام multitail إلى ملف ولون رمز وتصفية ملفات السجل متعددة في وقت واحد.

تصحيح: لم يكن هذا الأمر ملائمًا جدًا عندما أجبت على هذا ، ولكن بما أن هذه الصفحة تحصل على الكثير من النتائج ، أعتقد أنه من الجدير بالذكر أن الأنظمة الجديدة التي تعمل بنظام systemd لها هذا.

dmesg -w

106
2018-05-26 22:04



شكرا لرؤساء متابعة إعادة: multitail. يبدوا مثيرا للأهتمام. في حالة OS X ، سيكون الأمر كالتالي: tail -f /var/log/{system.log,kernel.log}. - boehj
system.log و kernel.log لا تحتوي على الناتج الدقيق لل dmesg على OS X. على سبيل المثال ، لمحرك تالف ، ملف قراءة الأخطاء في dmesg تحديد بالضبط أي ملف لا يمكن قراءته ، في حين kernel.log لسوء الحظ لا يقدم سوى إشعار أقل من المفيد: disk0s2: I/O error. - Ivan Vučica
للسجل ، لا تعمل هذه الإجابة على OS X Mavericks (10.9) أو Arch Linux. - Elle Mundy
Dan On Arch ربما لا يكون لديك برنامج syslog مثبت أو تم تمكين الخدمة الخاصة به. لقد لاحظت أن هذا ليس جزءًا من مجموعة الحزم الأساسية على الرغم من أنها أساسية جدًا. يعتمد OSX على BSD ولديه مسارات مختلفة للكثير من الأشياء. ستحتاج إلى معرفة كيف وأين يعالج نظامك التسجيل وضبطه. إجابتي عامة جدًا وتغطي معظم توزيعات FHS القائمة مع تمكين سجل النظام ، ولكن هناك أيضًا الكثير من التطبيقات المتنوعة. - Caleb
++ على التحرير. - pstanton


ما عليك سوى جعله يعمل على # @ $٪

  1. تريد طباعة إخراج dmesg ، باستمرار ، على الفور
  2. Dmesg هو طباعة العازلة حلقة النواة (انظر man dmesg)
  3. المخزن المؤقت لحلقة النواة هو ملف خاص بـ proc ، /proc/kmsg (نرى man proc)
  4. اقرأ /proc/kmsg مباشرة ، أي cat /proc/kmsg.

الآن ، إذا كنت تقرأ دليل بروك ودية ، فإنه سيتم تحذيرك بشدة للسماح لمستخدم واحد فقط (الذي يجب أن يكون امتياز) قراءة /proc/kmsg في الوقت. أيًا كان تطبيق سجل النظام لديك ، يجب أن يفعل هذا ، ويفترض أنه يعمل معه dmesg. أنا dunno ، أنا خارج دوري هنا ، فقط إعادة صياغة الدليل. لذلك في حين أن هذا هو "جعله فقط @ # $٪ جي العمل" الطريقة ، والنظر في الطرق القليلة المقبلة أولا.

تمت الموافقة على صفحة المستخدم: شاهد + dmesg

على Arch gnu / linux with systemd init * ، لا يتم كتابة dmesg.log إلى كثير من الأحيان ، ربما لا يحدث على الإطلاق؟ أفضل طريقة وجدت لقراءة مخزن مؤقت kernel باستمرار مع watch. شيء من هذا القبيل يجب أن يساعدك على البدء (ضبط عدد الخطوط التي تناسب جهازك):

watch 'dmesg | tail -50'

ساعة + dmesg + daemon + tail -f

قد يستخدم حل أكثر تعقيدا ووتش لكتابة إخراج dmesg إلى الملف ، والتي يمكنك بعد ذلك tail -f. ربما كنت تريد هذا يعمل بمثابة خفي. فإن الخفي السليم أيضا gzip وتدوير السجلات. كود باش التالي لم يتم اختباره ، ولم يعمل ، وكان يهدف فقط إلى نقل فكرة. @ بروكس إجابة موسى لديه نسخة العمل.

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

* ظل ، يسبب هذا سؤال osx ، ولكن عندما يكون systemd حولها ، لا تهتم بها dmesg، استعمال journalctl -xf (ربما ث / -n 100 لإظهار الخطوط المائة السابقة أيضًا)


52
2018-06-11 22:42



OS X لم يكن لديك /proc، لكن بقية إجابتك قابلة للتطبيق. watch يمكن تثبيته من MacPorts: macports.org - Ivan Vučica
@ إيفان Vučica آه ، جيد أن تعرف. أتساءل أين يمثل OSX المخزن المؤقت لحلقة النواة .. - djeikyb
يبدو أنه موجود مباشرة في ذاكرة kernel. كود المصدر لابل dmesg التنفيذ: opensource.apple.com/source/system_cmds/system_cmds-230.7/... لا يذكر Googling السريع أي شيء حوله يتم تمثيله في نظام الملفات: / - Ivan Vučica


للراغبين في linux ، منذ kernel kernel 3.5.0:

# dmesg -w

أيضا على أنظمة مع systemd يمكنك:

# journalctl -kf

36
2018-03-28 14:27



dmesg -wهو حل أجمل على الإطلاق. للأسف ، يبدو أن Ubuntu 14.04 غير جاهز لذلك لأن أداة مساحة المستخدم لا تدعمه حتى الآن. - Daniel Alder
هذه الإجابة تستحق بالتأكيد المزيد من الارتجال الآن. - m4tx
نعم ، هذا هو كتلة صغيرة جميلة. يمكن جعل الإنسان مقروء مع: dmesg -wH - faustus


هنا هو البديل على الإجابة djeikyb التي تم اختبارها في الواقع ، ويصلح بضعة أخطاء.

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

الحيلة المهمة هي أننا نقوم بذلك dmesg -c، الذي يزيل المخزن المؤقت الحلقي بعد أن يطبع - وهكذا ، في كل مرة من خلال نطبع فقط ما هو الجديد منذ آخر مرة. عليك أن تكون الجذر للقيام بذلك ، وبالتالي فإن sudo. هناك أيضا خطأ. بدلاً من محاولة التخلص من الإخراج إلى ملف و توجيهه إلى الذيل (الذي لا يعمل) ، فإننا نقرأ فقط من الملف المكتوب حديثًا.

يمكننا القيام به فقط dmesg > /tmp/dmesg.log والكتابة فوق الملف بأكمله كل تكرار ، ولكن هذا الكثير من I / O والمخاطر أيضا فقدان الملف إذا تعطل جهاز الكمبيوتر في منتصف الكتابة فوق.

يمكنك أيضا القيام بشيء مماثل يشبه إلى حد كبير tail -f مع حلقة في حين أن ينفذ dmesg -c و sleep 1 إلى الأبد (انظر إجابة بن هاريس). ومع ذلك ، نظرًا لأن هذا يقوم بالفعل بمسح مخزن مؤقت ل kernel message أثناء تشغيله ، فقد تحتاج أيضًا إلى توجيه الملفات إلى ملف تسجيل في حالة ما إذا كنت تريدها لاحقًا.


21
2017-07-20 21:45





هذا قد يعمل من أجلك

while true;do sudo dmesg -c;done

ضع في الاعتبار أن العلامة '-c' تمسح المخزن المؤقت للرسالة إلى stdout. "sudo" غير ضروري إذا كنت الجذر. إذا كنت تشعر أن هذا يأكل الكثير من مورد وحدة المعالجة المركزية الخاص بك ، حاول إضافة "النوم 1" قبل الانتهاء من الحلقة.


6
2018-05-26 22:05



قد تكون المشاهدة جيدة إذا كنت تشاهد الشاشة طوال الوقت - Seth Robertson
لا تتردد في الاستشهاد بمصادرك: linuxforums.org/forum/applications/...
سريع و قذر. سيئ لأنه يعمل فقط إذا كنت المستخدم الوحيد الذي يقوم بذلك. وإلا فإن كل مستخدم يحصل على نصف الرسائل فقط - Daniel Alder
يحل مشكلتي في android adb. - PAntoine


فعل هذا قبل رؤية هذه المشاركة:

#!/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;

5
2017-11-05 13:45





قد تكون قادرًا على القيام بما يلي:

tail -f /var/log/messages

3
2018-05-26 22:01



في معظم الأنظمة ، يكون ملف سجل dmesg مجرد تفريغ ثابت لمخزن dmesg بعد اكتمال تمهيد النظام. بعد ذلك ، عادةً ما تنتقل أية رسائل kernel جديدة إلى ملف سجل آخر وسيبقى ملف dmesg بدون تغيير حتى تتم إعادة التشغيل.
لا أعرف عن الأنظمة "الأكثر" ، لكن لا يوجد أي من أنظمة غنو لينكس I admin التي تتصرف بهذه الطريقة. dmesg تقارير مجموعة حالية من أحدث الرسائل من النواة ، عادة ما تكون خاصة بالنظم الفرعية للأجهزة. - Caleb


while dmesg -c >> /tmp/dmesg.log؛ تنام 0.1 يتم & tail -f /tmp/dmesg.log


3
2018-03-05 08:26



يرجى توضيح سبب هذا الحل. - ChrisF
هذا ما تفعله بعض التوزيعات من وراء الكواليس. فإنه يستقصي ringbuffer kernel ويقوم بتسجيل الدخول إلى /tmp/dmesg.log كل 0.1 ثانية في مهمة خلفية بينما يتم ذلك الإخراج ذلك. أيضا ، إنها الطريقة الوحيدة التي ستعمل إذا لم يكن لديك شيء خاص يعمل في الخلفية - أو إذا كنت قد قتلت جميع العمليات والخدمات في الخلفية وكنت تقوم باستكشاف الأخطاء وإصلاحها في حالات الطوارئ. - Dagelf
يبدو أسهل في الاستخدام watch - poolie
إذا كانت متوفرة لديك :-) فأحيانًا تكون في بيئة لا تملك فيها حتى الذيل ... إذًا يمكنك استخدام cat /tmp/dmesg.log أو dd ... إذا لم تستطع الكتابة إلى / tmp ، ولا يمكن تحميل tmpfs - / tmp ، أو ramfs ، أو الكتابة إلى / dev / shm / ... ثم يمكنك فقط أثناء dmesg -c؛ النوم 0.1 ؛ do echo> / dev / null؛ القيام به ، إذا لم يكن لديك النوم ، في حين dmesg -c فقط ؛ do echo> / dev / null؛ فعله؛ في بعض الأحيان لا يكون لديك حتى ls ... فأنت فقط تفعل الصدى * :-D - Dagelf


أستخدم هذا الاسم المستعار في /root/.bashrc؛

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

الذي يتبع dmesg وضبط الخطوط لأي محطة يطلق عليها.


2
2018-02-04 09:16





تحت Ubuntu الحالي (أستخدم Ubuntu 12.04) ،

tail -f /var/log/syslog

يمكن أن تلبي هذا الشرط.


0
2017-12-17 04:37