Just make it @#$%ing work
- You want to print output of dmesg, constantly, immediately
- Dmesg is printing the kernel ring buffer (see
- The kernel ring buffer is a special proc file,
/proc/kmsg directly, ie
Now, if you read the friendly proc manual, it'll sternly warn you to let only one user (who must be privileged) read
/proc/kmsg at a time. Whatever syslog implementation you have should be doing this, and presumably it works with
dmesg. I dunno, I'm out of my league here, just paraphrasing the manual. So while this is the "just make it @#$%ing work" way, consider the next couple methods first.
Man page approved: watch + dmesg
On Arch gnu/linux with systemd init*, dmesg.log isn't written to very often, perhaps not at all? The best way I found to read the kernel log buffer continuously is with
watch. Something like this should get you started (adjust for how many lines fit in your terminal):
watch 'dmesg | tail -50'
watch + dmesg + daemon + tail -f
A more convoluted solution might use watch to write dmesg output to file, which you could then
tail -f. You'd probably want this running as a daemon. A proper daemon would also gzip and rotate logs. The following bash code is untested, unworking, and only intended to convey an idea. @Brooks Moses's answer has a working version.
watch 'dmesg >> /var/log/dmesg.log | tail -1'
* tangent, cause this is an osx question, but when systemd is around, don't bother with
journalctl -xf (maybe w/
-n 100 to also show the previous 100 lines)