Як використовувати команду dmesg в Linux

Команда dmesg дозволяє зазирнути в прихований світ процесів запуску Linux. Переглядайте та відстежуйте повідомлення апаратного пристрою та драйвера з власного кільцевого буфера ядра за допомогою «друга шукача несправностей».

Як працює кільцевий буфер Linux

У комп’ютерах, подібних до Linux і Unix, завантаження та запуск є двома різними фазами послідовності подій, які відбуваються під час увімкнення комп’ютера.

Процеси завантаження (BIOS або UEFI, MBR, і GRUB) провести ініціалізацію системи до точки, де ядро ​​завантажується в пам’ять і підключається до початкового оперативного диска (initrd або initramfs), і systemd розпочато.

Потім естафету підхоплюють процеси запуску та завершують ініціалізацію операційної системи. На самих ранніх етапах ініціалізації демони журналу, такі як syslogd або rsyslogd ще не запущені. Щоб уникнути втрати помітних повідомлень про помилки та попереджень на цьому етапі ініціалізації, ядро ​​містить a кільцевий буфер який він використовує як сховище повідомлень.

Буфер кільця — це простір пам’яті, зарезервований для повідомлень. Він простий за конструкцією та фіксованого розміру. Коли він заповнений, новіші повідомлення замінюють найстаріші. Концептуально це можна розглядати як «круговий буфер».

Кільцевий буфер ядра зберігає таку інформацію, як повідомлення про ініціалізацію драйверів пристроїв, повідомлення від обладнання та повідомлення від модулів ядра. Оскільки він містить ці низькорівневі повідомлення про запуск, кільцевий буфер є хорошим місцем для початку розслідування апаратних помилок або інших проблем із запуском.

Але не йдіть з порожніми руками. Візьміть з собою dmesg.

Команда dmesg

Команда dmesg дозволяє вам для перегляду повідомлень, які зберігаються в кільцевому буфері. За замовчуванням вам потрібно використовувати sudo, щоб використовувати dmesg.

sudo dmesg

Усі повідомлення в кільцевому буфері відображаються у вікні терміналу.

Це був потоп. Очевидно, що нам потрібно зробити менше:

sudo dmesg | less

Тепер ми можемо прокручувати повідомлення, шукаючи предмети, що цікавлять.

Ви можете скористатися функцією пошуку в межах less, щоб знайти та виділити елементи та терміни, які вас цікавлять. Запустіть функцію пошуку, натиснувши клавішу «/» в меншій частині.

Видалення потреби в sudo

Якщо ви не хочете використовувати sudo щоразу, коли ви використовуєте dmesg, ви можете використовувати цю команду. Але майте на увазі: це дозволяє будь-кому, хто має обліковий запис користувача на вашому комп’ютері, використовувати dmesg без необхідності використовувати sudo.

sudo sysctl -w kernel.dmesg_restrict=0

Примусовий вихід кольору

За замовчуванням dmesg, імовірно, буде налаштовано на отримання кольорового виводу. Якщо це не так, ви можете наказати dmesg розфарбувати свій вихід за допомогою параметра -L (колір).

sudo dmesg -L

Щоб змусити dmesg завжди за замовчуванням використовувати кольоровий дисплей, скористайтеся цією командою:

sudo dmesg --color=always

Позначки часу людини

За замовчуванням dmesg використовує позначку часу в секундах і наносекунд з моменту запуску ядра. Щоб відобразити це у більш зручному для людини форматі, використовуйте параметр -H (людський).

sudo dmesg -H

Це призводить до двох речей.

  Отримуйте корисні нагадування на робочому столі Linux за допомогою Stretchly

Вихід автоматично відображається меншим.
Позначки часу показують мітку часу з датою та часом з роздільною здатністю хвилин. Повідомлення, які з’явилися протягом кожної хвилини, позначаються секундами та наносекундами від початку цієї хвилини.

Людино-читані позначки часу

Якщо вам не потрібна наносекундна точність, але ви хочете, щоб мітки часу були легші для читання, ніж стандартні, використовуйте параметр -T (доступний для читання людиною). (Це трохи заплутано. -H — це параметр «людини», -T — параметр «читатий людиною»).

sudo dmesg -T

Позначки часу відображаються як стандартні дати та час, але роздільна здатність зменшується до хвилини.

Все, що сталося протягом однієї хвилини, має однакову мітку часу. Якщо вас турбує лише послідовність подій, цього цілком достатньо. Крім того, зверніть увагу, що ви скинули назад у командному рядку. Цей параметр автоматично не викликає менше.

Перегляд подій в прямому ефірі

Щоб побачити повідомлення, як вони надходять у кільцевий буфер ядра, скористайтеся опцією –follow (очікуйте повідомлення). Це речення може здатися трохи дивним. Якщо кільцевий буфер використовується для зберігання повідомлень від подій, які відбуваються під час запуску, як живі повідомлення можуть надходити в кільцевий буфер після того, як комп’ютер запущено і працює?

Все, що спричинить зміну апаратного забезпечення, підключеного до вашого комп’ютера, спричинить надсилання повідомлень до кільцевого буфера ядра. Оновіть або додайте модуль ядра, і ви побачите повідомлення кільцевого буфера про ці зміни. Якщо ви підключите USB-накопичувач або підключите чи від’єднаєте пристрій Bluetooth, ви побачите повідомлення у виводі dmesg. Навіть віртуальне обладнання призведе до появи нових повідомлень у кільцевому буфері. Запустіть віртуальну машину, і ви побачите, що нова інформація надходить у кільцевий буфер.

sudo dmesg --follow

Зауважте, що ви не повернетеся до командного рядка. Коли з’являються нові повідомлення, вони відображаються за допомогою dmesg у нижній частині вікна терміналу.

  Як встановити змінні середовища в Bash на Linux

Навіть установка CD-ROM-диска сприймається як зміна, оскільки ви прищепили вміст CD-ROM-диска до дерева каталогів.

Щоб вийти зі стрічки в режимі реального часу, натисніть Ctrl+C.

Отримати останні десять повідомлень

Використовуйте команду хвоста щоб отримати останні десять повідомлення кільцевого буфера ядра. Звичайно, ви можете отримати будь-яку кількість повідомлень. Десятка – це лише наш приклад.

sudo dmesg | last -10

Останні десять повідомлень витягуються та відображаються у вікні терміналу.

Пошук конкретних термінів

Передайте вихід з dmesg через grep для пошуку певних рядків або візерунків. Тут ми використовуємо параметр -i (ігнорувати регістр), щоб регістр відповідних рядків не враховувався. наші результати включатимуть «usb» і «USB» та будь-яку іншу комбінацію нижнього та верхнього регістру.

sudo dmesg | grep -i usb

Виділені результати пошуку пишуться у верхньому та нижньому регістрі.

Ми можемо виділити повідомлення, які містять посилання на перше SCSI жорсткий диск в системі sda. (Насправді, sda сьогодні також використовується для перший жорсткий диск SATA, а також для USB-накопичувача.)

sudo dmesg | grep -i sda

Усі повідомлення, у яких згадується sda, витягуються та відображаються у вікні терміналу.

Щоб здійснити пошук у grep для кількох термінів одночасно, скористайтеся параметром -E (розширити регулярний вираз). Ви повинні вказати пошукові терміни всередині рядка в лапках із вертикальною колонкою «|». роздільники між пошуковими термінами:

sudo dmesg | grep -E "memory|tty|dma"

sudo dmesg |  grep -E

Будь-яке повідомлення, у якому згадується будь-який із пошукових термінів, відображається у вікні терміналу.

вихід із sudo dmesg |  grep -E

Використання рівнів журналу

Кожне повідомлення, зареєстроване в кільцевому буфері ядра, має відповідний рівень. Рівень відображає важливість інформації в повідомленні. Рівні такі:

emerg: Система непридатна для використання.
попередження: потрібно негайно вжити заходів.
crit: Критичні умови.
err: умови помилки.
попередити: умови попередження.
Примітка: нормальний, але значний стан.
інформація: Інформаційна.
debug: повідомлення на рівні налагодження.

Ми можемо витягувати повідомлення dmesg, які відповідають певному рівню, використовуючи параметр -l (рівень) і передаючи ім’я рівня як параметр командного рядка. Щоб побачити лише повідомлення «інформаційного» рівня, скористайтеся цією командою:

sudo dmesg -l info

Усі перераховані повідомлення є інформаційними. Вони не містять помилок чи попереджень, а лише корисні сповіщення.

Об’єднайте два або більше рівнів журналу в одній команді, щоб отримати повідомлення кількох рівнів журналу:

sudo dmesg -l debug,notice

Вихід з dmesg є сумішшю повідомлень кожного рівня журналу:

  Як організувати свої списки в Linux за допомогою Dynalist

Категорії закладу

Повідомлення dmesg згруповано за категоріями, які називаються «об’єктами». Перелік об’єктів:

kern: повідомлення ядра.
користувач: повідомлення на рівні користувача.
пошта: поштова система.
daemon: системні демони.
auth: повідомлення безпеки/авторизації.
syslog: внутрішні повідомлення syslogd.
lpr: Підсистема лінійного принтера.
новини: Підсистема мережевих новин.

Ми можемо попросити dmesg відфільтрувати його вихід, щоб показувати повідомлення лише в певному об’єкті. Для цього ми повинні використовувати параметр -f (об’єкт):

sudo dmesg -f daemon

dmesg перераховує всі повідомлення, що стосуються демонів, у вікні терміналу.

Як ми зробили з рівнями, ми можемо попросити dmesg перерахувати повідомлення з більш ніж одного об’єкта одночасно:

sudo dmesg -f syslog, daemon

Результатом є поєднання повідомлень журналу системного журналу та демона.

Об’єднання об’єктів і рівня

Параметр -x (декодування) змушує dmesg показувати об’єкт і рівень у вигляді зрозумілих для людини префіксів до кожного рядка.

sudo dmesg -x

Об’єкт і рівень можна побачити на початку кожного рядка:

Перший виділений розділ — це повідомлення від засобу «ядро» з рівнем «повідомлення». Другий виділений розділ — це повідомлення від засобу «ядро» з рівнем «інформації».

Це чудово, але чому?

Одним словом, пошук несправностей.

Якщо у вас виникли проблеми з тим, що частина апаратного забезпечення не розпізнається або не працює належним чином, dmesg може пролити світло на проблему.

Використовуйте dmesg для перегляду повідомлень від найвищого рівня до кожного нижчого рівня, шукаючи будь-які помилки чи попередження, які згадують апаратний елемент або можуть мати відношення до проблеми.
Використовуйте dmesg, щоб знайти будь-яку згадку відповідного об’єкта, щоб перевірити, чи містить вони корисну інформацію.
Проведіть dmesg через grep і знайдіть пов’язані рядки або ідентифікатори, такі як виробник продукту або номери моделі.
Проведіть dmesg через grep і знайдіть загальні терміни, такі як «gpu» або «storage», або такі терміни, як «failure», «failed» або «unable».
Використовуйте опцію –follow і дивіться повідомлення dmesg в режимі реального часу.

Щасливого полювання.