linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Команды/cmd-dmesg

kb/commands ── Команды ── beginner

dmesg - kernel ring buffer

dmesg - сообщения ядра из ring buffer (фиксированный размер, старое затирается). `-T` человеческие даты, `-w` follow, `-l err,crit` фильтр. Источник правды для драйверов и OOM-killer'а.

view as markdownaka: dmesg, kernel-log, ring-buffer

Зачем dmesg

Когда что-то «отвалилось на уровне ядра» - драйвер, диск, USB, out-of-memory, segfault - ядро пишет в kernel ring buffer. dmesg показывает этот буфер.

Тут видно:

  • Загрузку драйверов и устройств при boot'е
  • I/O-ошибки на диске и SATA-link timeouts
  • [[oom-killer|OOM-killer]] (кто кого убил и почему)
  • Сегфолты userspace-процессов с адресом
  • Проблемы с USB / network-карты / Wi-Fi
  • Сообщения от netfilter и audit
  • Watchdog и soft-lockup

Это не systemd journal, хотя journald тоже копит kernel-сообщения. На systemd-системе journalctl -k = эквивалент dmesg.

Где живёт буфер

Память ядра, размер CONFIG_LOG_BUF_SHIFT (обычно 1-2 MiB). Когда переполняется - старые записи затираются. На загруженной системе буфер живёт минуты-часы, не дни. Для долгого хранения - journald или syslog.

Размер можно посмотреть:

bash
cat /proc/sys/kernel/printk_ratelimit_burst
dmesg -s 1048576           # запросить 1 MiB чтения (можно > буфера)

Базовый вызов

bash
dmesg                      # весь буфер - сырой вывод
dmesg | tail -50           # последние строки
sudo dmesg                 # с Linux 4.0 нужен root (kptr restrict)
dmesg -T                   # человеческие даты
dmesg -w                   # tail -f - ждать новых
dmesg -W                   # follow без show-existing
dmesg -H                   # human - цвет, страничный (less)
dmesg --color=always | less -R

-T - даты человеку

По дефолту dmesg показывает uptime:

[   12.345678] usb 1-2: USB disconnect

Это секунды от boot'а - бесполезно когда смотришь спустя сутки. -T конвертирует в локальное время:

[Fri May  2 14:23:11 2026] usb 1-2: USB disconnect

Trade-off: -T неточно при большом сдвиге времени (NTP-jump'ы).

Уровни логирования

Сообщения помечены syslog priority (RFC 5424):

ЧислоИмяЧто
0emergsystem unusable
1alertтребуется немедленное действие
2critcritical conditions
3errошибка
4warnwarning
5noticeважно, но не warning
6infoinformational
7debugdebug-only
bash
dmesg -l err,crit,alert,emerg     # только ≤ err
dmesg -l warn+                     # warn и выше
dmesg --facility=daemon            # только daemon-сообщения

Поиск конкретных событий

bash
dmesg -T | grep -i 'oom\|killed'        # OOM-killer
dmesg -T | grep -i 'segfault\|fault'    # segfaults
dmesg -T | grep -iE 'i/o error|sd[a-z]: '  # ошибки диска
dmesg -T | grep -iE 'eth0|enp|wlp'      # сеть
dmesg -T | grep nf_conntrack           # conntrack table full
dmesg -T | grep TCP                    # ядро жалуется на TCP-стек

OOM-killer - типичный вывод

[Fri May 2 14:00:00 2026] Out of memory: Killed process 12345 (java) total-vm:8000000kB, anon-rss:7800000kB, file-rss:0kB

Покажет также oom_score и стек вызовов из ядра. Подробнее в oom-killer.

segfault

[Fri May 2 14:00:00 2026] python[3456]: segfault at 0 ip 00007fff... sp 00007ffd... error 6 in libfoo.so.1
  • at 0 - разыменование nullptr
  • error 6 - бит-маска: write + user-mode

Фильтр по facility

FacilityЧто
kernсообщения ядра (default)
userот userspace через /dev/kmsg
mailmail subsystem
daemonсистемные демоны
authаутентификация
syslogсам syslogd

В современном Linux большинство приходит как kern.

dmesg vs journalctl -k

bash
journalctl -k                    # эквивалент dmesg
journalctl -k --since '1 hour ago'
journalctl -k -p err -b          # с этой загрузки
journalctl -k -f                 # follow

Преимущество journalctl: персистентен (если Storage=persistent), фильтр по boot (-b -1 предыдущая загрузка). Преимущество dmesg: работает там где нет journald (initramfs, контейнер, старые системы), и быстрее.

Запись в kernel ring buffer

Юзерспейс может писать сам:

bash
echo "marker before deploy" | sudo tee /dev/kmsg

Это попадёт в dmesg как kern.notice. Полезно для маркеров в логах перед/после операций.

Очистка буфера

bash
sudo dmesg -C       # clear, видно только новое
sudo dmesg -c       # clear AND print текущее

Опасно: всё, что было, потеряно навсегда. На проде клир - редкая операция (для теста, перед воспроизведением бага).

Когда что-то пошло не так

  • dmesg: read kernel buffer failed: Operation not permitted - kernel.dmesg_restrict=1, нужен root или cap_syslog.
  • Буфер переполняется быстро - драйвер бьётся в логи каждые 100ms. Найди источник через dmesg | awk '{print $5}' | sort | uniq -c, отключи verbose в драйвере (sysfs или modprobe-параметр).
  • -T показывает неправильное время - был NTP-step, dmesg использует monotonic clock + текущее wall-time как baseline. Лекарство: journalctl -k, у него настоящие timestamps.
  • Нет dmesg вообще - dmesg-restrict=1 или контейнер без /dev/kmsg (docker run --cap-add=SYSLOG).

§ команды

bash
dmesg -T | tail -50

Последние 50 событий ядра с человеческими датами

bash
dmesg -Tw

Follow в реальном времени - удобно при отладке загрузки/драйвера

bash
dmesg -T -l err,crit

Только ошибки и критика - быстрый health-check

bash
dmesg -T | grep -i oom

Все срабатывания OOM-killer'а - кого ядро убило за память

bash
dmesg -T | grep -iE 'sd[a-z]: '

Сообщения о SCSI-дисках - I/O ошибки, медленные команды

bash
echo 'before deploy' | sudo tee /dev/kmsg

Поставить маркер в kernel log - удобно как анчор для grep

bash
sudo dmesg -C

Очистить ring buffer - перед воспроизведением бага, чтобы dmesg был чистый

§ см. также

  • oom-killerOOM killerOOM killer - механизм ядра, который выбирает и завершает процесс когда система упирается в лимит памяти. В контейнерах работает per-cgroup.
  • cmd-journalctljournalctl - журнал systemd`journalctl` читает binary-журнал systemd-journald. Это центральный лог системы: kernel, systemd-сервисы, syslog - всё через один интерфейс.
  • kernel-modulesKernel modules - LKM, modprobe, signing, DKMSLKM - код, динамически загружаемый в kernel. modprobe резолвит зависимости через depmod. Подпись модуля для Secure Boot. DKMS пересобирает out-of-tree модули после kernel-upgrade. Lockdown mode запрещает загрузку неподписанных.
  • cmd-lsblk-blkidlsblk и blkid - block-устройства и UUIDlsblk показывает дерево block-устройств (диск → раздел → LVM/crypt → mountpoint). blkid печатает UUID/LABEL/TYPE ФС. Связка для написания строки в [[mount-and-fstab|/etc/fstab]] по UUID.
  • block-devicesBlock devices - диски в LinuxBlock device - устройство которое читается/пишется блоками фиксированного размера (обычно 512B или 4K). Диски, SSD, NVMe - всё block devices в `/dev/`.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки