Ingin melakukan sesuatu seperti
dmesg | tail -f
tetapi tidak berhasil: Saya menggunakan Mac OSX 10.6.7, dengan melakukan itu ekornya akan keluar, alih-alih memantau hasilnya.
Saya ingin tahu apakah ada cara untuk melakukannya, atau perintah yang setara. PS, saya tidak berpikir while
loop akan menjadi ide yang cukup bagus.
bash
command-line
tail
Ivan ZG Xiao
sumber
sumber
kernel.log
tidak mengandung output yang sama dengandmesg
. Misalnya, untuk drive yang rusak, kesalahan pembacaan file didmesg
tentukan dengan pasti file mana yang tidak dapat dibaca, sementarakernel.log
sayangnya hanya memberikan pemberitahuan yang kurang bermanfaat:disk0s2: I/O error.
Jawaban:
Anda mungkin mencari beberapa kombinasi pesan dari berbagai file log. Mencoba:
... untuk mendapatkan gambaran umum sistem yang cukup bagus. Jika Anda ingin lebih atau kurang dari itu, teliti file log apa yang ingin Anda lihat.
Lihat juga menggunakan
multitail
file dan kode warna dan filter beberapa file log sekaligus.Sunting: Ini tidak terlalu relevan ketika saya menjawab ini, tetapi karena halaman ini mendapatkan banyak hit saya pikir itu layak menyebutkan bahwa sistem yang lebih baru menjalankan systemd memilikinya.
sumber
multitail
. Terlihat menarik. Dalam kasus OS X itu akan menjadi sesuatu seperti:tail -f /var/log/{system.log,kernel.log}
.system.log
dankernel.log
tidak mengandung output persisdmesg
pada OS X. Misalnya, untuk drive yang rusak, kesalahan pembacaan filedmesg
menentukan secara pasti file mana yang tidak dapat dibaca, sementarakernel.log
sayangnya hanya memberikan pemberitahuan yang kurang bermanfaat:disk0s2: I/O error.
Jadikan @ # $% sebagai pekerjaan
man dmesg
)/proc/kmsg
(lihatman proc
)/proc/kmsg
langsung, yaitucat /proc/kmsg
.Sekarang, jika Anda membaca manual proc ramah, itu akan memperingatkan Anda untuk membiarkan hanya satu pengguna (yang harus memiliki hak istimewa) membaca
/proc/kmsg
sekaligus. Apa pun implementasi syslog yang Anda miliki harus melakukan ini, dan mungkin berhasildmesg
. Saya tidak tahu, saya keluar dari liga saya di sini, hanya mengutip manual. Jadi sementara ini adalah cara "hanya membuatnya @ # $% ing bekerja", pertimbangkan metode pasangan berikutnya terlebih dahulu.Halaman manual disetujui: watch + dmesg
Pada Arch gnu / linux dengan systemd init *, dmesg.log tidak terlalu sering ditulis, mungkin tidak sama sekali? Cara terbaik yang saya temukan untuk membaca buffer log kernel terus menerus adalah dengan
watch
. Sesuatu seperti ini harus Anda mulai (sesuaikan untuk berapa banyak baris yang pas di terminal Anda):lihat + dmesg + daemon + tail -f
Solusi yang lebih berbelit-belit mungkin menggunakan arloji untuk menulis output dmesg ke file, yang Anda bisa kemudian
tail -f
. Anda mungkin ingin menjalankan ini sebagai daemon. Daemon yang tepat juga akan gzip dan memutar log. Kode bash berikut tidak teruji, tidak berfungsi, dan hanya dimaksudkan untuk menyampaikan gagasan. @ Brian jawaban Musa memiliki versi yang berfungsi .* tangen, karena ini adalah pertanyaan osx, tetapi ketika systemd ada, jangan repot-repot
dmesg
, gunakanjournalctl -xf
(mungkin-n 100
juga menampilkan 100 baris sebelumnya)sumber
/proc
, namun sisa jawaban Anda berlaku.watch
dapat diinstal dari MacPorts: macports.orgdmesg
implementasi Apple : opensource.apple.com/source/system_cmds/system_cmds-230.7/... Quick Googling tidak menyebutkan apa-apa tentang hal itu yang diwakili dalam sistem file: /Bagi yang tertarik dengan linux, karena kernel 3.5.0:
Juga pada sistem dengan
systemd
Anda dapat:sumber
dmesg -w
adalah solusi terbaik. Sayangnya, bahkan Ubuntu 14.04 sepertinya tidak siap untuk ini karena alat ruang pengguna belum mendukungnya.Berikut varian jawaban djeikyb yang benar-benar diuji, dan memperbaiki beberapa bug.
Trik penting adalah yang kami lakukan
dmesg -c
, yang membersihkan buffer cincin setelah dicetak - dengan demikian, setiap kali kami hanya mencetak apa yang baru sejak terakhir kali. Anda harus menjadi root untuk melakukan itu, dengan demikiansudo
. Ada juga perbaikan bug; alih-alih mencoba untuk membuang output ke file dan pipa ke tail (yang tidak berfungsi), kami hanya membaca dari file yang baru ditulis.Kita bisa melakukan adil
dmesg > /tmp/dmesg.log
dan menimpa seluruh file setiap iterasi, tapi itu banyak I / O dan juga berisiko kehilangan file jika komputer crash di tengah-tengah overwrite.Anda juga bisa melakukan hal serupa yang lebih dekat seperti
tail -f
dengan loop sementara yang dijalankandmesg -c
dansleep 1
selamanya (lihat jawaban Ben Harris). Namun, karena ini benar-benar membersihkan buffer pesan kernel ketika sedang berjalan, Anda mungkin juga ingin menyalurkan berbagai hal ke dalam file log jika Anda menginginkannya nanti.sumber
Ini mungkin bekerja untuk Anda
Perlu diingat bahwa flag '-c' membersihkan buffer pesan ke stdout. 'Sudo' tidak perlu jika Anda root. Jika Anda merasa ini memakan terlalu banyak sumber daya CPU Anda, coba tambahkan 'sleep 1' sebelum loop selesai.
sumber
Apakah ini sebelum melihat posting ini:
sumber
Anda mungkin dapat melakukan:
sumber
dmesg
melaporkan serangkaian pesan terbaru terkini dari kernel, biasanya khusus untuk subsistem perangkat keras.sumber
watch
Saya menggunakan alias ini di /root/.bashrc;
yang mengikuti dmesg dan menyesuaikan garis untuk terminal apa pun namanya.
sumber
Di bawah Ubuntu saat ini (saya menggunakan Ubuntu 12,04),
dapat memenuhi persyaratan.
sumber
Saya menggunakan kode ini untuk mencari acara kernel khusus dan mengirimkannya ke proses "panggilan balik":
sumber
menanggapi pertanyaan lama, tetapi seseorang mungkin merasa berguna :)
pipa keluaran dmesg melalui ekor menggunakan - operator sebagai jalan pintas ke stdout
sumber
dmesg
menutup output setelah menutup sekali.tail -f
tidak bisa mengubahnya lagi.