كيفية استخدام الأمر dmesg على Linux

النقاط الرئيسية

  • يتيح لك الأمر dmesg مراجعة الرسائل المخزنة في مخزن الحلقة الخاص بنظام Linux، مما يوفر رؤى حول أخطاء الأجهزة ومشكلات بدء التشغيل.
  • يمكنك تخصيص الأمر dmesg عن طريق إزالة الحاجة إلى sudo، وفرض إخراج الألوان، واستخدام الطوابع الزمنية القابلة للقراءة من قبل البشر، ومشاهدة الأحداث المباشرة، واسترداد الرسائل الأخيرة، والبحث عن مصطلحات معينة، والتصفية حسب مستويات السجل أو فئات المرافق.



ال dmesg يتيح لك الأمر إلقاء نظرة على العالم المخفي لعمليات بدء تشغيل Linux. قم بمراجعة ومراقبة رسائل الأجهزة وبرامج التشغيل من المخزن المؤقت الحلقي الخاص بالنواة باستخدام “صديق مكتشف الأخطاء”.


كيف يعمل Ring Buffer في Linux

في أجهزة الكمبيوتر التي تعمل بنظام Linux وأجهزة الكمبيوتر الشبيهة بنظام Unix، يعد التمهيد وبدء التشغيل مرحلتين متميزتين من تسلسل الأحداث التي تحدث عند تشغيل الكمبيوتر.

عمليات التمهيد (السير الذاتية أو UEFI, إم بي آر، و نكش) قم بأخذ تهيئة النظام إلى النقطة التي يتم فيها تحميل النواة في الذاكرة وتوصيلها بالقرص العشوائي الأولي (initrd أو initramfs)، و النظام تم البدء.

بعد ذلك، تتولى عمليات بدء التشغيل زمام الأمور وتستكمل تهيئة نظام التشغيل. في المراحل المبكرة جدًا من التهيئة، يتم تسجيل الشياطين مثل سيسلوجد أو rsyslogd لم يتم تشغيلها بعد. لتجنب فقدان رسائل الخطأ والتحذيرات الملحوظة من هذه المرحلة من التهيئة، تحتوي النواة على حلقة عازلة الذي يستخدمه كمخزن للرسائل.


المخزن المؤقت الحلقي هو مساحة ذاكرة مخصصة للرسائل. وهو بسيط في التصميم، وله حجم ثابت. وعندما يمتلئ، تحل الرسائل الأحدث محل الرسائل الأقدم. ومن الناحية النظرية، يمكن اعتباره “مخزن دائري“.”

يخزن مخزن الحلقة للنواة معلومات مثل رسائل تهيئة برامج تشغيل الأجهزة، والرسائل من الأجهزة، والرسائل من وحدات النواة. ولأنه يحتوي على رسائل بدء التشغيل منخفضة المستوى، فإن مخزن الحلقة يعد مكانًا جيدًا لبدء التحقيق في أخطاء الأجهزة أو مشكلات بدء التشغيل الأخرى.

وهنا يأتي دور الأمر dmesg.

ما هو الأمر dmesg؟

ال dmesg الأمر يسمح لك لمراجعة الرسائل المخزنة في المخزن المؤقت للحلقة. بشكل افتراضي، تحتاج إلى استخدام sudo للإستخدام dmesg.

sudo dmesg

sudo dmesg في نافذة المحطة الطرفية


يتم عرض كافة الرسائل الموجودة في المخزن المؤقت الحلقي في نافذة المحطة الطرفية.

الإخراج من sudo dmesg في نافذة المحطة الطرفية

كان ذلك طوفانًا. ومن الواضح أن ما نحتاج إلى القيام به هو نقله عبر الأنابيب less:

sudo dmesg | less

sudo dmesg | أقل في نافذة المحطة الطرفية

الآن يمكننا التمرير عبر الرسائل بحثًا عن العناصر التي تثير اهتمامنا.

إخراج dmesg في أقل من نافذة المحطة الطرفية


يمكنك استخدام وظيفة البحث داخل less لتحديد العناصر والمصطلحات التي تهمك وتسليط الضوء عليها. ابدأ وظيفة البحث بالضغط على مفتاح الشرطة المائلة للأمام “/” في less.

إزالة الحاجة إلى sudo

إذا كنت تريد تجنب الاضطرار إلى استخدام sudo في كل مرة تستخدمها dmesgيمكنك استخدام هذا الأمر. ولكن انتبه: فهو يسمح لأي شخص لديه حساب مستخدم على جهاز الكمبيوتر الخاص بك باستخدام dmesg دون الحاجة إلى استخدام sudo.

sudo sysctl -w kernel.dmesg_restrict=0

sudo sysctl -w kernel.dmesg_restrict=0 في نافذة المحطة الطرفية

فرض إخراج اللون

افتراضيا، dmesg من المحتمل أن يتم تكوينه لإنتاج مخرجات ملونة. إذا لم يكن الأمر كذلك، فيمكنك معرفة ذلك dmesg لتلوين مخرجاتها باستخدام -L خيار (اللون).

sudo dmesg -L


sudo dmesg -L في نافذة المحطة الطرفية

لإجبار dmesg للتعيين دائمًا على عرض ملون، استخدم هذا الأمر:

sudo dmesg --color=always

sudo dmesg --color=always في نافذة المحطة الطرفية

الطوابع الزمنية البشرية

افتراضيا، dmesg استخدم تدوين الطابع الزمني للثواني و نانوثانية منذ بدء تشغيل النواة. لتقديم هذا بتنسيق أكثر ملاءمة للإنسان، استخدم -H خيار (بشري).

sudo dmesg -H

sudo dmesg -H في نافذة المحطة الطرفية


وهذا يؤدي إلى حدوث أمرين.

الإخراج من sudo dmesg -H في نافذة المحطة الطرفية

  • يتم عرض الإخراج تلقائيًا في less.
  • تعرض الطوابع الزمنية طابعًا زمنيًا بالتاريخ والوقت، بدقة دقيقة. يتم تمييز الرسائل التي حدثت في كل دقيقة بالثواني والنانوثانية من بداية تلك الدقيقة.

الطوابع الزمنية القابلة للقراءة بواسطة الإنسان باستخدام dmesg

إذا كنت لا تحتاج إلى دقة النانو ثانية، ولكنك تريد طوابع زمنية أسهل في القراءة من الإعدادات الافتراضية، فاستخدم -T (خيار قابل للقراءة من قبل البشر). (إنه مربك بعض الشيء. -H هو الخيار “الإنساني” -T (هو خيار “قابل للقراءة من قبل البشر”).

sudo dmesg -T


sudo dmesg -T في نافذة المحطة الطرفية

يتم عرض الطوابع الزمنية كتواريخ وأوقات قياسية، ولكن الدقة يتم تخفيضها إلى دقيقة واحدة.

الإخراج من sudo dmesg -T في نافذة المحطة الطرفية

كل ما حدث خلال دقيقة واحدة له نفس الطابع الزمني. إذا كان كل ما يهمك هو تسلسل الأحداث، فهذا جيد بما فيه الكفاية. لاحظ أيضًا أنه يتم إرجاعك إلى موجه الأوامر. لا يستدعي هذا الخيار تلقائيًا less.


مشاهدة الأحداث المباشرة مع dmesg

لرؤية الرسائل عند وصولها إلى مخزن حلقة النواة، استخدم --follow خيار (انتظر الرسائل). قد تبدو هذه الجملة غريبة بعض الشيء. إذا تم استخدام المخزن المؤقت الحلقي لتخزين الرسائل من الأحداث التي تحدث أثناء تسلسل بدء التشغيل، فكيف يمكن للرسائل المباشرة أن تصل إلى المخزن المؤقت الحلقي بمجرد تشغيل الكمبيوتر؟

أي شيء يسبب تغييرًا في الأجهزة المتصلة بجهاز الكمبيوتر الخاص بك سيؤدي إلى إرسال رسائل إلى مخزن الحلقة للنواة. قم بتحديث وحدة نواة أو إضافتها، وسترى رسائل مخزن الحلقة حول هذه التغييرات. إذا قمت بتوصيل محرك أقراص USB أو توصيل جهاز Bluetooth أو فصله، فسترى رسائل في dmesg حتى الأجهزة الافتراضية قد تتسبب في ظهور رسائل جديدة في المخزن المؤقت الحلقي. قم بتشغيل جهاز افتراضي، وستشاهد معلومات جديدة تصل إلى المخزن المؤقت الحلقي.

sudo dmesg --follow

sudo dmesg --follow في نافذة المحطة الطرفية


لاحظ أنه لن يتم إرجاعك إلى موجه الأوامر. عندما تظهر رسائل جديدة، يتم عرضها بواسطة dmesg في أسفل نافذة المحطة.

الإخراج من sudo dmesg --follow في نافذة المحطة الطرفية

حتى تركيب قرص CD-ROM يُنظر إليه على أنه تغيير، لأنك قمت بتطعيم محتويات قرص CD-ROM على شجرة الدليل.

رسائل المخزن المؤقت لـ dmesg نتيجة لتركيب قرص CD-ROM

للخروج من موجز الوقت الحقيقي، اضغط على Ctrl+C.

استرجاع الرسائل العشرة الأخيرة

استخدم أمر الذيل لاسترجاع العشرة الاخيرة رسائل حلقة المخزن المؤقت للنواة. بالطبع، يمكنك استرداد أي عدد من الرسائل. عشرة رسائل هي مجرد مثال.


sudo dmesg | last -10

sudo dmesg | آخر -10 في نافذة المحطة الطرفية

سيتم استرداد آخر عشر رسائل وإدراجها في نافذة المحطة الطرفية.

الإخراج من sudo dmsesg | tail -10 في نافذة المحطة الطرفية

البحث عن مصطلحات محددة

قم بتوصيل الإخراج من dmesg خلال grepللبحث عن سلاسل أو أنماط معينة. هنا نستخدم -i خيار (تجاهل الحالة) بحيث يتم تجاهل حالة السلاسل المطابقة. ستتضمن نتائجنا “usb” و”USB” وأي تركيبة أخرى من الأحرف الصغيرة والكبيرة.

sudo dmesg | grep -i usb


sudo dmesg | grep -i usb في نافذة المحطة الطرفية

نتائج البحث المميزة تكون بالأحرف الكبيرة والصغيرة.

نتائج البحث التي تعرض النتائج بالأحرف الكبيرة والصغيرة في نافذة المحطة الطرفية

يمكننا عزل الرسائل التي تحتوي على إشارات إلى الرسالة الأولى سكزي القرص الصلب على النظام sda. (في الحقيقة، sda ويستخدم أيضًا في الوقت الحاضر أول قرص صلب SATA، ولمحركات أقراص USB.)

sudo dmesg | grep -i sda

سودو دميسج | grep -i sda في نافذة طرفية


جميع الرسائل التي تذكر sda يتم استرجاعها وإدراجها في نافذة المحطة الطرفية.

الإخراج من sudo dmesg | grep -i sda في نافذة المحطة الطرفية

لتصنع grep ابحث عن مصطلحات متعددة في وقت واحد، استخدم -E خيار (تمديد التعبير العادي). يجب عليك توفير مصطلحات البحث داخل سلسلة مقتبسة مع فواصل “|” بين مصطلحات البحث:

sudo dmesg | grep -E "memory|tty|dma"

sudo dmesg | grep -E "الذاكرة|tty|dma" في نافذة المحطة الطرفية

يتم إدراج أي رسالة تذكر أيًا من مصطلحات البحث في نافذة المحطة الطرفية.


الإخراج من Sudo dmesg | جريب -E "الذاكرة|tty|dma" في نافذة المحطة الطرفية

استخدام مستويات السجل

تحتوي كل رسالة مسجلة في مخزن حلقة النواة على مستوى مرتبط بها. يمثل المستوى أهمية المعلومات الموجودة في الرسالة. المستويات هي:

  • طوارئ:النظام غير قابل للاستخدام.
  • يُحذًِر:يجب اتخاذ الإجراء فورًا.
  • نقد:حالات حرجة.
  • خطأ:شروط الخطأ.
  • تحذير:شروط التحذير.
  • يلاحظ:حالة طبيعية ولكنها مهمة.
  • معلومات:معلوماتية.
  • تصحيح الأخطاء:رسائل مستوى التصحيح.

نحن نستطيع أن نصنع dmesg استخراج الرسائل التي تطابق مستوى معين باستخدام -l خيار (المستوى) وتمرير اسم المستوى كمعلمة لسطر الأوامر. لرؤية رسائل المستوى “الإعلامية” فقط، استخدم هذا الأمر:

sudo dmesg -l info


sudo dmesg -l المعلومات في نافذة المحطة الطرفية

جميع الرسائل المدرجة هي رسائل إعلامية، ولا تحتوي على أخطاء أو تحذيرات، بل مجرد إشعارات مفيدة.

الإخراج من sudo dmesg -l info في نافذة المحطة الطرفية

دمج مستويين أو أكثر من مستويات السجل في أمر واحد لاسترداد رسائل مستويات السجل المتعددة:

sudo dmesg -l debug,notice

sudo dmesg -l debug,لاحظ في نافذة المحطة الطرفية


الناتج من dmesg هو مزيج من رسائل كل مستوى سجل:

الإخراج من sudo dmesg -l debug,notice في نافذة المحطة الطرفية

فئات المرافق

ال dmesg يتم تجميع الرسائل في فئات تسمى “المرافق”. قائمة المرافق هي:

  • النواة:رسائل النواة.
  • مستخدم:الرسائل على مستوى المستخدم.
  • بريد:نظام البريد.
  • شيطان:شياطين النظام.
  • المصادقة:رسائل الأمان/الترخيص.
  • سجل النظام:رسائل syslogd الداخلية.
  • ل ب ر:نظام فرعي للطابعة الخطية.
  • أخبار:نظام فرعي لأخبار الشبكة.

يمكننا أن نسأل dmesg لتصفية مخرجاتها لإظهار الرسائل في منشأة معينة فقط. للقيام بذلك، يجب علينا استخدام -f خيار (المنشأة):

sudo dmesg -f daemon


sudo dmesg -f daemon في نافذة المحطة الطرفية

dmesg تسرد جميع الرسائل المتعلقة بالشياطين في نافذة المحطة الطرفية.

الإخراج من sudo dmesg -f daemon في نافذة المحطة الطرفية

كما فعلنا مع المستويات، يمكننا أن نسأل dmesg لإدراج الرسائل من أكثر من منشأة في وقت واحد:

sudo dmesg -f syslog, daemon

sudo dmesg -f syslog، برنامج daemon في نافذة المحطة الطرفية

المخرجات عبارة عن مزيج من رسائل سجل syslog وسجل daemon.


الإخراج من sudo dmesg -f syslog، daemon في نافذة المحطة الطرفية

الجمع بين المرفق والمستوى

ال -x خيار (فك التشفير) يجعل dmesg إظهار المرفق والمستوى كبادئات قابلة للقراءة من قبل البشر لكل سطر.

sudo dmesg -x

sudo dmesg -x في نافذة المحطة الطرفية

يمكن رؤية المنشأة والمستوى في بداية كل سطر:

الإخراج من sudo dmesg -x في نافذة المحطة الطرفية


القسم المميز الأول عبارة عن رسالة من مرفق “kernel” بمستوى “notice”. والقسم المميز الثاني عبارة عن رسالة من مرفق “kernel” بمستوى “info”.

هذا رائع، ولكن لماذا؟

باختصار، إيجاد الأخطاء.

إذا كنت تواجه مشكلات تتعلق بعدم التعرف على جزء من الأجهزة أو عدم عمله بشكل صحيح، dmesg ربما يلقي بعض الضوء على هذه القضية.

  • يستخدم dmesg لمراجعة الرسائل من أعلى مستوى إلى كل مستوى أدنى، بحثًا عن أي أخطاء أو تحذيرات تشير إلى عنصر الأجهزة، أو قد يكون لها تأثير على المشكلة.
  • يستخدم dmesg البحث عن أي ذكر للمرفق المناسب لمعرفة ما إذا كان يحتوي على أي معلومات مفيدة.
  • ماسورة dmesg خلال grep وابحث عن سلاسل أو معرفات ذات صلة مثل الشركة المصنعة للمنتج أو أرقام الطراز.
  • ماسورة dmesg خلال grep وابحث عن مصطلحات عامة مثل “gpu” أو “storage”، أو مصطلحات مثل “failing” أو “failed” أو “unable”.
  • استخدم --follow الخيار والمشاهدة dmesg الرسائل في الوقت الحقيقي.


صيد سعيد.

أضف تعليق