I'm menulis sebuah driver perangkat yang mencetak pesan kesalahan ke ring buffer keluaran dmesg.
Aku ingin melihat output dari dmesg
karena perubahan.
Bagaimana saya bisa melakukan ini?
Relatif baru dmesg
versi memberikan tindak pilihan (w
, --mengikuti
) yang bekerja analog untuk tail -f
.
Dengan demikian, hanya menggunakan perintah berikut:
$ dmesg -wH
(-H
, --manusia
memungkinkan fitur user-friendly seperti warna, waktu relatif)
Orang-orang pilihan yang tersedia misalnya di Fedora 19.
Anda dapat menggunakan menonton
perintah yang dimaksudkan sebenarnya untuk hal-hal seperti ini
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
the $((GARIS-6))
bagian harus cocok dengan baik ke terminal anda.
anda dapat't benar-benar memantau output dmesg
ini diatas.
namun, kemungkinan yang tinggi bahwa modul anda tidak mencetak secara langsung ke ring-penyangga dari dmesg, tapi bukan menggunakan kernel fasilitas logging (yang kemudian akan ditampilkan oleh dmesg
). jika anda syslog
memiliki beberapa waras (misalnya default) pengaturan, pesan-pesan ini akan muncul di kern.log
logfile.
sehingga anda dapat melakukan sesuatu seperti:
tail -f /var/log/kern.log
Anda menggunakan dmesg
untuk mendapatkan log pesan dari kernel.
Kernel itu sendiri log ke sebuah cincin penyangga, yaitu hanya dalam memori.
Sekarang semua dmesg
adalah output konten cincin penyangga.
Jika anda melakukan dmesg -c
itu juga akan menghapus cincin penyangga setelah itu.
Oleh karena itu anda bisa melakukan sesuatu seperti sementara benar; dmesg -c; tidur 1; dilakukan
untuk memiliki sesuatu seperti setara dengan tidak bekerja dmesg|tail
. Tapi ini menghapus cincin penyangga dan oleh karena itu perlu root kekuasaan.
Cara lain adalah file /proc/kmsg
yang memungkinkan melihat pada cincin penyangga. Anda bisa melakukan tail -f /proc/kmsg
, tapi ini hanya memungkinkan untuk satu proses, dan ini biasanya anda log daemon. - It's pekerjaan adalah untuk membaca pesan-pesan dan menulis ke file nyata (biasanya di /var/log) di mana mereka dapat dibaca. Hal ini dapat dikonfigurasi untuk output semua pesan ke file tunggal atau bagian-bagian yang berbeda ke dalam file yang berbeda. (Tapi konfigurasi tergantung pada log daemon dari sistem anda.)
Oleh karena itu lihatlah /var/log
jika ada file yang sesuai dengan kebutuhan anda dan mengkonfigurasi logging daemon sebaliknya.
Jika anda menggunakan sistem tertanam busybox yang umum pada sistem seperti OpenWRT memiliki fungsi yang sangat terbatas dan hanya 2-3 bendera yang didukung.
Jika anda ingin cepat dan kotor cara mencetak keluaran dmesg pada layar terus-menerus sebagai peristiwa perubahan, sederhana bash loop bekerja dengan baik. It's tidak ideal tapi seperti yang saya sebutkan BusyBox dmesg hilang banyak fungsi. Saya menemukan berikut memiliki efek yang sama ketika masuk ke command line:
$ while true; do dmesg -c ; sleep 1 ; done
anda dapat keluar dari lingkaran dengan Ctrl-C tidur 1 adalah untuk menghentikan pemukulan CPU sia-sia, dan -c bendera membersihkan buffer pada setiap panggilan sehingga anda don't see diulang output setiap detik,