GNU/Linux >> Belajar Linux >  >> Linux

Perintah Linux dmesg - Cetak Kernel Ring Buffer

Perintah Dmesg mencetak pesan buffer dari kernel. Perintah Dmesg terutama digunakan untuk mengidentifikasi perangkat yang gagal, perangkat hot-plug seperti USB, kesalahan perangkat I/O.

Ketika sistem mem-boot driver perangkat yang ada dalam pengaturan kernel dengan perangkat keras yang relevan. Pada saat itu driver dan elemen lain dengan kernel menghasilkan pesan. Pesan-pesan ini disimpan di ruang buffer kecil dan ditimpa setiap saat pesan baru datang. Sebagian besar distribusi Linux menyimpan pesan-pesan ini di /var/log/dmesg. Dmesg membaca langsung dari buffer ring kernel, bukan dari /var/log/dmesg. Syslog secara default (tergantung pada distribusi Linux) atau dikonfigurasi untuk menangkap pesan.

Toko Dmesg pesan kernel selama boot dan setelah boot. Setelah boot, terkadang kernel menghasilkan pesan ketika ada kesalahan io, perangkat yang terhubung, dll. Pesan-pesan itu juga dikirim ke konsol sistem. Keluaran Dmesg seringkali besar, dapat difilter menggunakan lebih banyak perintah, tail atau grep.

Cara Menggunakan Perintah dmesg

Perintah Dmesg secara default mencetak N jumlah pesan dari buffer ring kernel.

$ dmesg

Contoh keluaran:

[    1.230638] kernel: Run /init as init process
 [    1.336492] kernel: scsi host0: Virtio SCSI HBA
 [    1.338612] kernel: scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.338727] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
 [    1.342266] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
 [    1.345242] kernel: lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
 [    1.346920] kernel: ahci 0000:00:1f.2: version 3.0
 [    1.350864] kernel: scsi host1: Virtio SCSI HBA
 [    1.358377] kernel: scsi host2: Virtio SCSI HBA
 [    1.359317] kernel: PCI Interrupt Link [GSIA] enabled at IRQ 16
 [    1.359718] kernel: scsi 1:0:1:2: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.361478] kernel: ahci 0000:00:1f.2: AHCI 0001.0000 32 slots 6 ports 1.5 Gbps 0x3f impl SATA mode
 [    1.363039] kernel: i801_smbus 0000:00:1f.3: SMBus using PCI interrupt

Output Dmesg terutama dibagi menjadi 3 bagian:

  • Waktu: Menunjukkan jumlah detik dari waktu boot. Jika Anda menemukan 20.091730. Artinya, pesan dibuat 20 detik setelah waktu boot.
  • Nama_perangkat: Tampilkan nama perangkat
  • Pesan: Pesan yang sebenarnya. Dari sini, kita bisa menganalisis apa yang terjadi.

1) Cara membaca dmesg

Perintah Dmesg tanpa opsi apa pun menghasilkan output yang besar. Agar lebih mudah dibaca, gunakan perintah grep atau less untuk memfilter output. Mari kita periksa beberapa contoh.

Cetak keluaran dmesg per halaman

$ dmesg | less

Contoh keluaran:

[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.8.0-31-generic (buildd@aatxe) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 (Ubuntu 3.8.0-31.46-generic 3.8.13.8)
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] NSC Geode by NSC
[ 0.000000] Cyrix CyrixInstead
[ 0.000000] Centaur CentaurHauls
[ 0.000000] Transmeta GenuineTMx86
[ 0.000000] Transmeta TransmetaCPU
[ 0.000000] UMC UMC UMC UMC

Mencetak informasi yang terkait dengan eth

$ dmesg | grep eth

Contoh keluaran:

[ 1.972418] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:d2:c1:16
[ 1.972430] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 18.867656] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.733138] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 21.737967] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.738052] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Mencetak informasi yang terkait dengan USB

$ dmesg | grep usb

Contoh keluaran:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0

Harap perhatikan bahwa perintah grep peka huruf besar/kecil . yaitu dari contoh di atas "usb" dan "USB" memberikan hasil yang berbeda. Untuk mengabaikan fitur peka huruf besar/kecil, gunakan parameter -i setelah perintah grep . Bandingkan output perintah ini dengan casing USB di atas.

$ dmesg | grep -i usb

Contoh keluaran:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 0.997759] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.997783] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.997929] ohci_hcd 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
[ 1.091856] hub 1-0:1.0: USB hub found
[ 1.093110] uhci_hcd: USB Universal Host Controller Interface driver

Menampilkan output yang diinginkan menggunakan head/tail

Misalnya, Anda telah memasukkan perangkat yang dapat dilepas atau membuat perubahan pada volume disk apa pun. Untuk memeriksa entri terbaru dmesg dengan menggunakan ekor perintah.

Untuk menampilkan N baris terakhir dari log dmesg:

$ dmesg | tail -15

Demikian pula, untuk menemukan beberapa baris pertama dari dmesg log gunakan perintah head. Ini akan berguna untuk menemukan perubahan yang terjadi setelah booting.

$ dmesg | head -15

Pemantauan waktu nyata

Untuk pemantauan berkelanjutan waktu nyata, gunakan opsi -f .

$ tail -f /var/log/dmesg

Alternatif, gunakan watch dmesg:

$ watch "dmesg | tail -15"

Beberapa sistem Linux mendukung penggunaan dmesg -w, yang akan menunggu pesan baru.

2) Cetak dalam format yang dapat dibaca manusia

Untuk mencetak keluaran dmesg dalam format yang dapat dibaca manusia, gunakan opsi -H.

$ dmesg -H

3) Ubah stempel waktu ke format tanggal khusus

Secara default, stempel waktu dari keluaran dmesg tidak dapat dibaca manusia. Untuk mengubah stempel waktu ke format tanggal khusus gunakan opsi - -ctime atau -T.

$ dmesg  --ctime

Contoh keluaran :

[Tue Dec 10 16:34:33 2013] 131MB HIGHMEM available.
[Tue Dec 10 16:34:33 2013] 891MB LOWMEM available.
[Tue Dec 10 16:34:33 2013] mapped low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] Zone ranges:
[Tue Dec 10 16:34:33 2013] DMA [mem 0x00010000-0x00ffffff]
[Tue Dec 10 16:34:33 2013] Normal [mem 0x01000000-0x37bfdfff]
[Tue Dec 10 16:34:33 2013] HighMem [mem 0x37bfe000-0x3ffeffff]
[Tue Dec 10 16:34:33 2013] Movable zone start for each node
[Tue Dec 10 16:34:33 2013] Early memory node ranges
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00010000-0x0009efff]
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00100000-0x3ffeffff

Anda juga dapat menggunakan --time-format untuk mencetak stempel waktu menggunakan format yang diberikan, yang dapat berupa ctime, reltime, delta, atau iso.

Jika stempel waktu tidak diaktifkan maka perintah dmesg mungkin tidak menampilkan stempel waktu di output.

Untuk memeriksa timestamps diaktifkan atau tidak, buka file /sys/module/printk/parameters/time:

$ cat /sys/module/printk/parameters/time
N

Jika konten file adalah N, maka stempel waktu tidak diaktifkan. Anda dapat menjalankan perintah berikut untuk mengaktifkan stempel waktu:

$ echo Y > /sys/module/printk/parameters/time

4) Hapus dmesg

Untuk menghapus pesan dari buffer ring kernel gunakan opsi -C.

$ dmesg -C

Untuk menghapus buffer cincin setelah mencetak isinya, gunakan opsi -c.

$ dmesg -c

Bahkan Jika Anda menghapus dmesg menggunakan parameter -c atau -C, Anda masih dapat melihat log di /var/log/kern.log atau /var/log/dmesg.

5) Hentikan Dmesg agar tidak masuk ke konsol

Untuk menonaktifkan pencetakan pesan ke konsol, gunakan opsi -D.

$ dmesg -D

Opsi alternatif adalah menggunakan -n 1 untuk mencegah semua pesan, kecuali pesan darurat (panik), muncul di konsol.

Untuk mengaktifkan pencetakan pesan ke konsol, gunakan -E.

$ dmesg -E

6) Menampilkan pesan khusus untuk fasilitas

Untuk mencetak pesan dari kategori atau fasilitas tertentu. Untuk memenuhi tujuan ini, gunakan opsi --facility.

Dari contoh untuk mencetak pesan khusus untuk email, ketik:

$ dmesg --facility=daemon

Fasilitas log . yang didukung adalah:

kern - pesan kernel
pengguna - pesan tingkat pengguna acak
surat - sistem surat
daemon - daemon sistem
auth - pesan keamanan/otorisasi
syslog - pesan yang dihasilkan secara internal oleh syslogd
lpr - subsistem printer baris
berita - subsistem berita jaringan

7) Cetak level log

Untuk mencetak pesan khusus untuk level log gunakan opsi --level. Misalnya untuk mencetak semua pesan peringatan jalankan perintah berikut:

$ dmesg --level=warn

Contoh keluaran:

[ 0.000000] tsc: Fast TSC calibration failed
[ 19.595760] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr

tingkat log yang didukung adalah:

muncul - sistem tidak dapat digunakan
waspada - tindakan harus segera diambil
crit - kondisi kritis
err - kondisi kesalahan
memperingatkan - kondisi peringatan
pemberitahuan - kondisi normal tapi signifikan
info - informasi
debug - pesan tingkat debug

8) Menampilkan fasilitas dan level yang dapat dibaca manusia

Untuk mencetak fasilitas dan tingkat log dalam format yang dapat dibaca manusia, gunakan opsi -x.

$ dmesg -x

Contoh keluaran:

kern :debug : [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
kern :info : [ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x1000000
kern :debug : [ 0.000000] MTRR default type: uncachable
kern :debug : [ 0.000000] MTRR variable ranges disabled:
kern :info : [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
kern :info : [ 0.000000] CPU MTRRs all blank - virtualized system.

9) Cetak pesan kernel

Untuk mencetak pesan khusus kernel gunakan opsi -k.

$ dmesg -k

10) Abaikan stempel waktu

Jika Anda tidak ingin mencetak stempel waktu kernel, gunakan opsi -t.

$ dmesg -t

Kesimpulan

Dmesg bisa sangat berguna untuk mendiagnosis masalah yang terkait dengan sistem. Dalam tutorial ini, kita belajar bagaimana menggunakan perintah dmesg di Linux.


Linux
  1. Perintah mv Linux

  2. Contoh Perintah dmesg di Linux

  3. Contoh Perintah lpr di Linux

  1. Linux du perintah

  2. Perintah ip Linux

  3. Perintah cd Linux

  1. Cara Menggunakan Perintah dmesg Linux

  2. Contoh Perintah awk di Linux

  3. Atur kapasitas pipa di Linux