Dmesg tail in linux

How can I see dmesg output as it changes?

I’m writing a device driver that prints error message into ring buffer dmesg output. I want to see the output of dmesg as it changes. How can I do this?

7 Answers 7

Relatively recent dmesg versions provide a follow option ( -w , —follow ) which works analogously to tail -f .

Thus, just use following command:

( -H , —human enables user-friendly features like colors, relative time)

Those options are available for example in Fedora 19.

Wow a sysadmin answer that uses —descriptively-named-flags instead of cryptic single-character flags. BRAVO, SIR. BRAVO.

-w should work in every version of Ubuntu from Utopic (14.10) onwards. (launchpad.net/ubuntu/+source/util-linux/+publishinghistory suggests early Utopic packages were for 2.20, but reached 2.25 by the time it was released.)

@Abdull or simply journalctl -kf — however, keep in mind that journalctl usually requires root privileges for displaying system logs while dmesg doesn’t. In addition, dmesg also works when journald isn’t running.

You can use the watch command which is intended exactly for things like this

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

the $((LINES-6)) part should make it fit nicely into your terminal.

If you use single quotes instead of double quotes (or escape the dollar sign), you’ll to get a fresh value of $LINES for every invocation, so it will adjust if you change your terminal size.

Single quotes will inhibit variable expansion. Moreover, the variable is expanded only once in this example — upon invocation of watch . Thus it won’t really change between invocations of dmesg . One would need to use a wrapper that would query the terminal state.

That’s the whole point. The single quotes prohibit the variable expansion when the shell passes the arguments to watch , therefore watch will execute the command with the variable expression in there, which will be expanded by the shell it invokes. Each time. Try it, it works.

Hmm, you are right — I assume watch uses popen() , which means another shell is spawned and the environment variable is then supplied by it (and thus updated on every execute run). Nice find.

You can’t really monitor the output of dmesg directly.

However, chances are high that your module is not printing directly into the ring-buffer of dmesg, but instead uses the kernel logging facilities (which will then be displayed by dmesg ). If your syslog has some sane (e.g. default) settings, these messages will most likely also show up in the kern.log logfile.

Читайте также:  Внутренний dns сервер linux

So you can do something like:

/var/log/kern.log is fairly Linux-specific. For OpenBSD (and possibly others) the dmesg stuff gets logged in /var/log/messages. Granted, some other stuff goes there too though.

You use dmesg to get log messages of the kernel.

The kernel itself logs into a ring buffer, i.e. just in memory. Now all dmesg does is output the content of that ring buffer. If you do dmesg -c it will also delete the ring buffer afterwards.

Therefore you could do something like while true; do dmesg -c; sleep 1; done to have something like the equivalent of a not working dmesg|tail . But this deletes the ring buffer and therefore needs root powers.

The other way is the file /proc/kmsg which allows a view on the ring buffer. You could do tail -f /proc/kmsg , but this is only allow to one process, and this is usually your logging daemon. — It’s job is to read the messages and write it to real files (usually in /var/log) where they can be read. It can be configured to output all messages to a single file or different parts into different files. (But configuration depends on the logging daemon of your system.)

Therefore have a look at /var/log if there is any file which suits your needs and configure your logging daemon otherwise.

Источник

7 команд dmesg для устранения неполадок и сбора информации о системах Linux

Команда ‘dmesg’ отображает сообщения из кольцевого буфера ядра. Система проходит несколько уровней запуска, откуда мы можем получить много информации, такой как архитектура системы, процессор, подключенное устройство, оперативная память и т. д. Когда компьютер загружается, ядро (ядро операционной системы) загружается в память. В течение этого периода отображается количество сообщений, в которых мы можем видеть аппаратные устройства, обнаруженные ядром.

Прочитайте также: 10 команд Linux для сбора информации о системе и оборудовании

Сообщения очень важны с точки зрения целей диагностики в случае отказа устройства. Когда мы подключаем или отключаем аппаратное устройство в системе, с помощью команды dmesg мы узнаем об обнаруженной или отключенной информации на лету. Команда dmesg доступна в большинстве операционных систем на основе Linux и Unix.

Давайте прольем свет на самый известный инструмент под названием команда «dmesg» с их практическими примерами, как описано ниже. Точный синтаксис dmesg следующий.

1. Список всех загруженных драйверов в ядре

Мы можем использовать инструменты для работы с текстом, например «больше», «хвост», «меньше» или «grep». ‘ командой dmesg. Поскольку вывод журнала dmesg не помещается на одной странице, использование dmesg с командой pipe more или less отобразит журналы на одной странице.

[ ~]# dmesg | more [ ~]# dmesg | less
Пример вывода
[ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.11.0-13-generic () (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6) [ 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 [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable [ 0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS [ 0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data [ 0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved [ 0.000000] NX (Execute Disable) protection: active .

Читайте также: эффективное управление файлами Linux с помощью команд head, tail и cat

Читайте также:  Linux system calls read

2. Список всех обнаруженных устройств

Чтобы узнать, какие жесткие диски были обнаружены ядром, вы можете выполнить поиск по ключевому слову «sda» вместе с «grep», как показано ниже.

[ ~]# dmesg | grep sda [ 1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 GB/232 GiB) [ 1.281014] sd 2:0:0:0: [sda] Write Protect is off [ 1.281016] sd 2:0:0:0: [sda] Mode Sense: 00 3a 00 00 [ 1.281039] sd 2:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [ 1.359585] sda: sda1 sda2 < sda5 sda6 sda7 sda8 > [ 1.360052] sd 2:0:0:0: [sda] Attached SCSI disk [ 2.347887] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null) [ 22.928440] Adding 3905532k swap on /dev/sda6. Priority:-1 extents:1 across:3905532k FS [ 23.950543] EXT4-fs (sda1): re-mounted. Opts: errors=remount-ro [ 24.134016] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null) [ 24.330762] EXT4-fs (sda7): mounted filesystem with ordered data mode. Opts: (null) [ 24.561015] EXT4-fs (sda8): mounted filesystem with ordered data mode. Opts: (null)

ПРИМЕЧАНИЕ. «sda» — первый жесткий диск SATA, «sdb» — второй жесткий диск SATA и так далее. Ищите с помощью «hda» или «hdb» в случае жесткого диска IDE.

3. Печатайте только первые 20 строк вывода

«Голова» вместе с dmesg покажет начальные строки, т. е. «dmesg | head -20’ напечатает только 20 строк от начальной точки.

[ ~]# dmesg | head -20 [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000] Initializing cgroup subsys cpu [ 0.000000] Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3.11.0-13-generic () (gcc version 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP Wed Oct 23 17:26:33 UTC 2013 (Ubuntu 3.11.0-13.20-generic 3.11.6) [ 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 [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable [ 0.000000] BIOS-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] ACPI NVS [ 0.000000] BIOS-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] ACPI data [ 0.000000] BIOS-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved

4. Печатать только последние 20 строк вывода

«Хвост» вместе с командой dmesg напечатает только 20 последних строк, это полезно, если мы вставляем съемное устройство.

[ ~]# dmesg | tail -20 parport0: PC-style at 0x378, irq 7 [PCSPP,TRISTATE] ppdev: user-space parallel port driver EXT4-fs (sda1): mounted filesystem with ordered data mode Adding 2097144k swap on /dev/sda2. Priority:-1 extents:1 across:2097144k readahead-disable-service: delaying service auditd ip_tables: (C) 2000-2006 Netfilter Core Team nf_conntrack version 0.5.0 (16384 buckets, 65536 max) NET: Registered protocol family 10 lo: Disabled Privacy Extensions e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None Slow work thread pool: Starting up Slow work thread pool: Ready FS-Cache: Loaded CacheFiles: Loaded CacheFiles: Security denies permission to nominate security context: error -95 eth0: no IPv6 routers present type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1 readahead-collector: starting delayed service auditd readahead-collector: sorting readahead-collector: finished

5. Поиск обнаруженного устройства или конкретной строки

Трудно найти конкретную строку из-за длины вывода dmesg. Итак, отфильтруйте строки, содержащие такие строки, как ‘usb‘, ‘dma‘, ‘tty‘ и ‘memory. и т. д. Опция ‘-i’ указывает команде grep игнорировать регистр (буквы верхнего или нижнего регистра).

[ log]# dmesg | grep -i usb [ log]# dmesg | grep -i dma [ log]# dmesg | grep -i tty [ log]# dmesg | grep -i memory
Пример вывода
[ 0.000000] Scanning 1 areas for low memory corruption [ 0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff] [ 0.000000] Base memory trampoline at [c009b000] 9b000 size 16384 [ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff] [ 0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff] [ 0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff] [ 0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff] [ 0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff] [ 0.000000] Early memory node ranges [ 0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x000effff] [ 0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff] [ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups [ 0.000000] Memory: 2003288K/2059928K available (6352K kernel code, 607K rwdata, 2640K rodata, 880K init, 908K bss, 56640K reserved, 1146920K highmem) [ 0.000000] virtual kernel memory layout: [ 0.004291] Initializing cgroup subsys memory [ 0.004609] Freeing SMP alternatives memory: 28K (c1a3e000 - c1a45000) [ 0.899622] Freeing initrd memory: 23616K (f51d0000 - f68e0000) [ 0.899813] Scanning for low memory corruption every 60 seconds [ 0.946323] agpgart-intel 0000:00:00.0: detected 32768K stolen memory [ 1.360318] Freeing unused kernel memory: 880K (c1962000 - c1a3e000) [ 1.429066] [drm] Memory usable by graphics device = 2048M

6. Очистить журналы буфера dmesg

Да, мы можем очистить журналы dmesg, если это необходимо, с помощью команды ниже. Он будет очищать журналы сообщений кольцевого буфера dmesg, пока вы не выполните приведенную ниже команду. Тем не менее, вы можете просматривать журналы, хранящиеся в файлах «/var/log/dmesg». Если вы подключите любое устройство, будет сгенерирован вывод dmesg.

Читайте также:  Etoken astra linux драйвер

7. Мониторинг dmesg в режиме реального времени

Некоторые дистрибутивы также позволяют использовать команду «tail -f /var/log/dmesg» для мониторинга dmesg в реальном времени.

Вывод: Команда dmesg полезна, поскольку dmesg записывает все сделанные или происходящие системные изменения в режиме реального времени. Как всегда, вы можете выполнить команду dmesg, чтобы получить дополнительную информацию.

Источник

Оцените статью
Adblock
detector