Android

คำสั่ง Dmesg ใน linux

Dmesg in Deep

Dmesg in Deep

สารบัญ:

Anonim

เคอร์เนล Linux เป็นแกนหลักของระบบปฏิบัติการที่ควบคุมการเข้าถึงทรัพยากรของระบบเช่น CPU, อุปกรณ์ I / O, หน่วยความจำกายภาพและระบบไฟล์ เคอร์เนลเขียนข้อความต่าง ๆ ไปยังบัฟเฟอร์วงแหวนเคอร์เนลในระหว่างกระบวนการบูตและเมื่อระบบกำลังทำงาน ข้อความเหล่านี้รวมถึงข้อมูลต่าง ๆ เกี่ยวกับการทำงานของระบบ

บัฟเฟอร์วงแหวนเคอร์เนลเป็นส่วนหนึ่งของหน่วยความจำกายภาพที่เก็บข้อความบันทึกของเคอร์เนล มันมีขนาดคงที่ซึ่งหมายความว่าเมื่อบัฟเฟอร์เต็มเรคคอร์ดเก่าจะถูกเขียนทับ

ยูทิลิตีบรรทัดคำสั่ง dmesg ใช้เพื่อพิมพ์และควบคุมบัฟเฟอร์วงแหวนเคอร์เนลใน Linux และระบบปฏิบัติการแบบ Unix มันจะมีประโยชน์สำหรับการตรวจสอบข้อความบูตเคอร์เนลและแก้ไขข้อบกพร่องเกี่ยวกับฮาร์ดแวร์

ในบทช่วยสอนนี้เราจะกล่าวถึงพื้นฐานของคำสั่ง dmesg

การใช้คำสั่ง dmesg

ไวยากรณ์สำหรับคำสั่ง dmesg มีดังนี้:

dmesg

เมื่อเรียกใช้โดยไม่มีตัวเลือก dmesg เขียนข้อความทั้งหมดจากเคอร์เนลบัฟเฟอร์บัฟเฟอร์ไปยังเอาต์พุตมาตรฐาน:

dmesg

โดยค่าเริ่มต้นผู้ใช้ทุกคนสามารถเรียกใช้คำสั่ง dmesg อย่างไรก็ตามในบางระบบการเข้าถึง dmesg อาจถูก จำกัด สำหรับผู้ใช้ที่ไม่ใช่รูท ในสถานการณ์นี้เมื่อเรียกใช้ dmesg คุณจะได้รับข้อความแสดงข้อผิดพลาดดังนี้:

dmesg: read kernel buffer failed: Operation not permitted

พารามิเตอร์เคอร์เนล kernel.dmesg_restrict ระบุว่าผู้ใช้ที่ไม่มีสิทธิพิเศษสามารถใช้ dmesg เพื่อดูข้อความจากบัฟเฟอร์การบันทึกของเคอร์เนล หากต้องการลบข้อ จำกัด ให้ตั้งค่าเป็นศูนย์:

sudo sysctl -w kernel.dmesg_restrict=0

โดยปกติแล้วเอาต์พุตจะมีบรรทัดข้อมูลจำนวนมากดังนั้นสามารถดูได้เฉพาะส่วนสุดท้ายของเอาต์พุต หากต้องการดูทีละหน้าให้ไพพ์เอาต์พุตไปยังยูทิลีตีเพจเจอร์เช่น less หรือ more :

dmesg --color=always | less

--color=always จะใช้เพื่อรักษาเอาท์พุทสี

dmesg | grep -i usb

dmesg อ่านข้อความที่สร้างโดยเคอร์เนลจากไฟล์เสมือน /proc/kmsg ไฟล์นี้มีส่วนต่อประสานกับเคอร์เนลบัฟเฟอร์และสามารถเปิดได้โดยหนึ่งกระบวนการเท่านั้น หากกระบวนการ syslog ทำงานบนระบบของคุณและคุณพยายามอ่านไฟล์ด้วย cat หรือ less คำสั่งจะหยุดทำงาน

syslog daemon ส่งข้อความเคอร์เนลไปที่ /var/log/dmesg ดังนั้นคุณสามารถใช้ไฟล์บันทึกนั้น:

cat /var/log/dmesg

การสร้างเอาต์พุต dmesg

คำสั่ง dmesg จัดเตรียมจำนวนของตัวเลือกที่ช่วยให้คุณจัดรูปแบบและกรองผลลัพธ์

หนึ่งในตัวเลือกที่ใช้มากที่สุดของ dmesg คือ -H ( -H --human ) ซึ่งเปิดใช้งานเอาต์พุตที่มนุษย์อ่านได้ ตัวเลือกนี้ไพพ์เอาต์พุตคำสั่งลงในเพจเจอร์:

dmesg -H

หากต้องการพิมพ์การประทับเวลาที่มนุษย์อ่านได้ให้ใช้ตัวเลือก -T ( --ctime ):

dmesg -T

IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready

รูปแบบการประทับเวลายังสามารถตั้งค่าได้โดยใช้ --time-format ตัวเลือกซึ่งอาจเป็น ctime, reltime, delta, notime หรือ iso ตัวอย่างเช่นการใช้รูปแบบเดลต้าที่คุณจะพิมพ์:

dmesg --time-format=delta

คุณสามารถรวมสองตัวเลือกหรือมากกว่า:

dmesg -H -T

ในการดูเอาต์พุตของคำสั่ง dmesg แบบเรียลไทม์ให้ใช้ตัวเลือก -w ( --follow ):

dmesg --follow

การกรองเอาท์พุท dmesg

คุณสามารถ จำกัด เอาต์พุต dmesg ให้กับสิ่งอำนวยความสะดวกและระดับที่กำหนด

สิ่งอำนวยความสะดวกแสดงถึงกระบวนการที่สร้างข้อความ dmesg รองรับสิ่งอำนวยความสะดวกสำหรับบันทึกต่อไปนี้:

  • kern - user ข้อความเคอร์เนล - mail ระดับผู้ใช้ mail - ระบบเมล daemon - system daemons auth - ข้อความความปลอดภัย / การอนุญาต syslog - ข้อความ syslogd ภายใน lpr - news ระบบย่อยเครื่องพิมพ์บรรทัด - ระบบย่อย news เครือข่าย

-f ( --facility ) ตัวเลือกช่วยให้คุณสามารถ จำกัด การส่งออกไปยังสิ่งอำนวยความสะดวกที่เฉพาะเจาะจง ตัวเลือกยอมรับสิ่งอำนวยความสะดวกที่คั่นด้วยเครื่องหมายจุลภาคอย่างน้อยหนึ่งรายการ

ตัวอย่างเช่นเพื่อแสดงเฉพาะข้อความเคอร์เนลและระบบ daemons ที่คุณจะใช้:

dmesg -f kern, daemon

แต่ละข้อความบันทึกจะเชื่อมโยงกับระดับบันทึกที่แสดงความสำคัญของข้อความ dmesg รองรับระดับการบันทึกต่อไปนี้:

  • emerg - ระบบไม่สามารถใช้การ alert - ต้องดำเนินการทันที crit - เงื่อนไขที่สำคัญ err - เงื่อนไขข้อผิดพลาด warn - แจ้งเตือนเงื่อนไขการ notice warn - ข้อมูลเงื่อนไขปกติ แต่สำคัญ - การ debug ข้อมูล - ข้อความระดับการดีบัก

The -l ( --level ) ตัวเลือก จำกัด การส่งออกไปยังระดับที่กำหนด ตัวเลือกนี้ยอมรับระดับหนึ่งหรือมากกว่าที่คั่นด้วยเครื่องหมายจุลภาค

คำสั่งต่อไปนี้แสดงเฉพาะข้อผิดพลาดและข้อความสำคัญ:

dmesg -l err, crit

การล้างวงแหวนบัฟเฟอร์

ตัวเลือก -C (- --clear ) ช่วยให้คุณสามารถล้างบัฟเฟอร์แหวน:

sudo dmesg -C

เฉพาะผู้ใช้ root หรือผู้ใช้ที่มีสิทธิ์ sudo เท่านั้นที่สามารถล้างบัฟเฟอร์ได้

หากต้องการพิมพ์เนื้อหาบัฟเฟอร์ก่อนการล้างให้ใช้ตัวเลือก -c ( --read-clear ):

sudo dmesg -c

dmesg > dmesg_messages

ข้อสรุป

คำสั่ง dmesg อนุญาตให้คุณดูและควบคุมบัฟเฟอร์ของเคอร์เนลริง มันจะมีประโยชน์มากเมื่อแก้ไขปัญหาเคอร์เนลหรือฮาร์ดแวร์

พิมพ์ man dmesg ใน terminal ของคุณสำหรับข้อมูลเกี่ยวกับตัวเลือก dmesg มีอยู่ทั้งหมด

เทอร์มินัลเคอร์เนล dmesg