Dmesg çıktısını değiştikçe nasıl görebilirim?


Yanıtlar:


178

Nispeten yeni dmesgsürümler , benzer şekilde çalışan bir takip seçeneği ( -w, --follow) sağlar tail -f.

Böylece, sadece aşağıdaki komutu kullanın:

$ dmesg -wH

( -H, --humanrenkler, göreceli zaman gibi kullanıcı dostu özellikler sağlar)

Bu seçenekler örneğin Fedora 19'da mevcuttur.


2
Güzel bul! Gentoo grok yapmaz -Hama başka bir şey görür
unperson325680

Kullanıcı alanı araçları sürüm 2.22+ olmalıdır. Ubuntu kullanıcıları 14.10 "ütopik" versiyonunu beklemeli
Daniel Alder

1
Ubuntu -w grok yapmaz - saatini kullanmanız gerekir (aşağıda)
Brent Faust

2
Vay canına, tek karakterli bayraklar yerine --descriptively adındaki bayraklar kullanan bir sysadmin yanıtı verin. BRAVO, SIR. BRAVO.
allyourcode

1
-wUtopic'ten Ubuntu'nun her versiyonunda çalışmalı (14.10). ( launchpad.net/ubuntu/+source/util-linux/+publishinghistory , ilk Ütopik paketlerin 2.20 olduğunu, ancak piyasaya sürüldüğü sırada
2.25’e ulaştığını gösteriyor

54

Bu watchgibi şeyler için tasarlanan komutu kullanabilirsiniz.

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

$((LINES-6))bölümü, bu terminale bir şekilde sığacak yapmalıdır.


2
Çift tırnak işareti yerine tek tırnak kullanırsanız (veya dolar işaretinden kaçarsanız), her çağrı için yeni bir $ LINES değeri elde edersiniz, böylece terminal boyutunuzu değiştirirseniz ayarlanır.
P Baba

Tek tırnak, değişken genişlemeyi engeller. Üstelik, değişken bu örnekte sadece bir kez genişletildi watch; Bu nedenle, gerçekten de onların aşıları arasında bir değişiklik olmayacak dmesg. Biri terminal durumunu sorgulayacak bir sarıcı kullanması gerekir.
peterph

2
Bütün mesele bu. Tek tırnak, kabuk argümanları ilettiğinde değişken genişlemesini yasaklar watch, bu nedenle watch komutu, içinde bulunduğu kabuk tarafından genişletilecek olan değişken ifadesiyle yürütür. Her zaman. Deneyin, işe yarıyor.
P Daddy

Hmm, haklısınız - Ben varsayıyorum watchkullanımları popen()başka bir kabuk kökenli anlamına gelir ve çevre değişkeni sonra onun tarafından sağlanan (ve her koşmak yürütmek üzerine böylece güncellenir) olduğunu. Güzel buldum.
peterph

12

dmesgdoğrudan çıktısını gerçekten izleyemezsiniz .

bununla birlikte, modülünüzün doğrudan dmesg'in halka arabelleğine yazdırmama olasılığı yüksektir, ancak bunun yerine çekirdek günlüğü olanaklarını kullanır (bu durumda görüntülenecektir dmesg). eğer syslogaklı başında (örneğin varsayılan) ayarlarınız varsa, bu mesajlar büyük olasılıkla kern.loglogfile de görünecektir .

Böylece şöyle bir şey yapabilirsiniz:

 tail -f /var/log/kern.log

/var/log/kern.logoldukça Linux özgüdür. OpenBSD için (ve muhtemelen başkaları için) dmesg olayı / var / log / messages'de oturum açar. Verilen, başka şeyler de oraya gider.
kurtm

2
tail -f /var/log/{messages,kernel,dmesg,syslog}superuser
burada

9

dmesgÇekirdeğin günlük mesajlarını almak için kullanın .

Çekirdeğin kendisi bir halka arabelleğine, yani yalnızca bellekte oturum açar. Şimdi her dmesgşey o ring arabelleğinin içeriğini çıkartıyor. Bunu yaparsanız dmesg -cdaha sonra halka tamponunu da siler.

Bu nedenle while true; do dmesg -c; sleep 1; doneçalışmamaya eşdeğer bir şeye sahip olmak gibi bir şey yapabilirsiniz dmesg|tail. Ancak bu, halka tamponunu siler ve bu nedenle kök güçlere ihtiyaç duyar.

Diğer yol, /proc/kmsghalka arabelleğinde görünüme izin veren dosyadır . Yapabilirsin tail -f /proc/kmsg, ama bu sadece bir işleme izin veriyor, ve bu genellikle senin günlük planlaman. - İşi mesajları okumak ve okunabilecekleri gerçek dosyalara (genellikle / var / log içinde) yazmaktır. Tüm mesajları tek bir dosyaya veya farklı parçalara farklı dosyalara vermek için yapılandırılabilir. (Ancak yapılandırma, sisteminizin günlük arka planına bağlıdır.)

Bu nedenle /var/logihtiyaçlarınızı karşılayan bir dosya olup olmadığına bir göz atın ve günlükleme arka plan planınızı yapılandırın.


//, Kullandığım CEntOS 6 sisteminde, tailing ve / proc / kmsg görüntülemede çıktı yok. [~] $ sudo kuyruğu -f / proc / kmsg ♥% [~] $ sudo kedi / proc / kmsg ♥% [~] $
Nathan Basanese

8

Gömülü bir sistem kullanıyorsanız, OpenWRT gibi sistemlerde yaygın olan meşgul kutusu çok sınırlı işlevselliğe sahiptir ve yalnızca 2-3 bayrak desteklenir.

Olaylar değiştikçe sürekli ekranda dmesg çıktısını hızlı ve kirli bir şekilde yazdırmak istiyorsanız, basit bir bash döngüsü iyi sonuç verir. İdeal değil ama BusyBox'tan bahsettiğim gibi dmesg'de pek çok işlev eksik. Aşağıdakilerin komut satırına girildiğinde aynı etkiye sahip olduğunu görüyorum:

$ while true; do dmesg -c ; sleep 1 ; done

Ctrl-C ile döngüden çıkabilirsiniz uyku 1, CPU'yu gereksiz yere vurmayı durdurmaktır ve -c bayrağı her çağrıdaki arabellekleri temizler, böylece her saniyede tekrarlanan çıktı görmezsiniz,


1
Android hata ayıklamak için gerçekten yararlı.
val

5

systemdSizi kullanan sistemlerde ayrıca:

# journalctl -kf

1
Ubuntu 14.10: ➜ ~ journalctl -kf Hiçbir günlük dosyası bulunamadı.
Nathan Basanese

0

Bu 2 komutu ayrı terminallerden kullanın:

  1. while true; do dmesg -c >> test.txt;sleep 1; done
  2. tail -f test.txt

Benzer bir sonuç elde edecek.


//, Bu temelde dmesg'e test.txt dosyasına çıktı eklemesini söyler, değil mi? Ve ikinci komut sadece bu test.txt dosyasını izler mi?
Nathan Basanese

Teşekkürler .. evet .. 2. komut dmesg'deki değişiklikleri izler. cat / proc / kmsg benzer bir çıktı elde edebilir, ancak günlükleri bir dosyaya kaydetmez.
K_K
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.