Команда Dmesg

Ядро Linux явля­ет­ся ядром опе­ра­ци­он­ной систе­мы, кото­рое кон­тро­ли­ру­ет доступ к систем­ным ресур­сам, таким как ЦП, устрой­ства вво­да-выво­да, физи­че­ская память и фай­ло­вые систе­мы. Ядро запи­сы­ва­ет раз­лич­ные сооб­ще­ния в коль­це­вой буфер ядра во вре­мя про­цес­са загруз­ки и во вре­мя рабо­ты систе­мы. Эти сооб­ще­ния содер­жат раз­лич­ную инфор­ма­цию о рабо­те системы.

Коль­це­вой буфер ядра – это часть физи­че­ской памя­ти, в кото­рой хра­нят­ся сооб­ще­ния жур­на­ла ядра. Он име­ет фик­си­ро­ван­ный раз­мер, что озна­ча­ет, что после запол­не­ния буфе­ра ста­рые запи­си жур­на­лов перезаписываются.

Ути­ли­та команд­ной стро­ки dmesg исполь­зу­ет­ся для печа­ти и управ­ле­ния коль­це­во­го буфе­ра ядра в Linux и дру­гих Unix-подоб­ных опе­ра­ци­он­ных систем. Это полез­но для изу­че­ния загру­зоч­ных сооб­ще­ний ядра и устра­не­ния про­блем, свя­зан­ных с оборудованием.

В этой ста­тье мы рас­смот­рим осно­вы коман­ды dmesg.

 

Син­так­сис коман­ды dmesg следующий:

 

При вызо­ве без каких-либо пара­мет­ров dmesg запи­сы­ва­ет все сооб­ще­ния из коль­це­во­го буфе­ра ядра в стан­дарт­ный вывод:

 

По умол­ча­нию все поль­зо­ва­те­ли могут запус­кать коман­ду dmesg. Одна­ко в неко­то­рых систе­мах доступ к ним dmesg может быть огра­ни­чен для поль­зо­ва­те­лей без пол­но­мо­чий root. В этой ситу­а­ции при вызо­ве dmesg, вы полу­чи­те сооб­ще­ние об ошиб­ке, как пока­за­но ниже:

 

Пара­метр ядра kernel.dmesg_restrict ука­зы­ва­ет, могут ли непри­ви­ле­ги­ро­ван­ные поль­зо­ва­те­ли dmesg про­смат­ри­вать сооб­ще­ния из буфе­ра жур­на­ла ядра. Что­бы снять огра­ни­че­ния, уста­но­ви­те его на ноль:

 

Обыч­но выход­ные дан­ные содер­жат мно­го строк инфор­ма­ции, поэто­му толь­ко послед­няя часть выход­ных дан­ных явля­ет­ся види­мой. Что­бы уви­деть одну стра­ни­цу за раз, пере­на­правь­те вывод в ути­ли­ту тер­ми­на­ла, такую как less или more:

 

–color=always исполь­зу­ют­ся для сохра­не­ния цвет­но­го вывода.

Если вы хоти­те отфиль­тро­вать буфер­ные сооб­ще­ния, исполь­зуй­те grep. Напри­мер, что­бы про­смот­реть толь­ко сооб­ще­ния, свя­зан­ные с USB, вы долж­ны набрать:

 

dmesg чита­ет сооб­ще­ния, сге­не­ри­ро­ван­ные ядром, из вир­ту­аль­но­го фай­ла /proc/kmsg. Этот файл предо­став­ля­ет интер­фейс к коль­це­во­му буфе­ру ядра и может быть открыт толь­ко одним про­цес­сом. Если про­цесс syslog запу­щен в вашей систе­ме и вы пыта­е­тесь про­чи­тать файл с помо­щью коман­ды cat, или less, коман­да зависнет.

Демон syslog сбра­сы­ва­ет сооб­ще­ния ядра /var/log/dmesg, так что вы так­же може­те исполь­зо­вать файл журнала:

 

Коман­да dmesg предо­став­ля­ет ряд опций, кото­рые помо­гут вам отфор­ма­ти­ро­вать и отфиль­тро­вать вывод.

Один из наи­бо­лее часто исполь­зу­е­мых пара­мет­ров dmesg- это -H( –human), кото­рый обес­пе­чи­ва­ет удо­бо­чи­та­е­мый вывод. Эта опция направ­ля­ет вывод коман­ды в терминал:

 

Для печа­ти удо­бо­чи­та­е­мых вре­мен­ных отме­ток исполь­зуй­те опцию -T( –ctime):

 

 

Фор­мат –time-format <format> отме­ток вре­ме­ни так­же может быть уста­нов­лен с помо­щью опции, кото­рая может быть ctime, reltime, delta, notime или iso. Напри­мер, что­бы исполь­зо­вать дель­та-фор­мат, введите:

 

Вы так­же може­те объ­еди­нить два или более вариантов:

 

Что­бы про­смот­реть вывод коман­ды dmesg в режи­ме реаль­но­го вре­ме­ни, исполь­зуй­те опцию -w( –follow):

 

Вы може­те огра­ни­чить вывод dmesg дан­ны­ми объ­ек­та­ми и уровнями.

Сред­ство пред­став­ля­ет про­цесс, кото­рый создал сооб­ще­ние. dmesg, под­дер­жи­ва­ет сле­ду­ю­щие воз­мож­но­сти журнала:

  • kern – сооб­ще­ния ядра
  • user – сооб­ще­ния уров­ня пользователя
  • mail – поч­то­вая система
  • daemon – систем­ные демоны
  • auth – сооб­ще­ния безопасности/авторизации
  • syslog – внут­рен­ние сооб­ще­ния syslogd
  • lpr – под­си­сте­ма линей­но­го принтера
  • news – под­си­сте­ма сете­вых новостей

Опция -f( –facility <list>) поз­во­ля­ет огра­ни­чить вывод опре­де­лен­ны­ми объ­ек­та­ми. Опция при­ни­ма­ет одно или несколь­ко раз­де­лен­ных запя­ты­ми объектов.

Напри­мер, для отоб­ра­же­ния толь­ко сооб­ще­ний ядра и систем­ных демо­нов вы долж­ны использовать:

 

Каж­дое сооб­ще­ние жур­на­ла свя­за­но с уров­нем жур­на­ла, кото­рый пока­зы­ва­ет важ­ность сооб­ще­ния. dmesg под­дер­жи­ва­ет сле­ду­ю­щие уров­ни журнала:

  • emerg – систе­ма неработоспособна
  • alert – дей­ствие долж­но быть пред­при­ня­то немедленно
  • crit – кри­ти­че­ские условия
  • err – усло­вия ошибки
  • warn – усло­вия предупреждения
  • notice – нор­маль­ное, но зна­чи­мое состояние
  • info – информационный
  • debug – сооб­ще­ния уров­ня отладки

Опция -l( –level <list>) огра­ни­чи­ва­ет вывод опре­де­лен­ны­ми уров­ня­ми. Опция при­ни­ма­ет один или несколь­ко уров­ней, раз­де­лен­ных запятыми.

Сле­ду­ю­щая коман­да отоб­ра­жа­ет толь­ко сооб­ще­ния об ошиб­ках и кри­ти­че­ские сообщения:

 

Опция -C ( –clear) поз­во­ля­ет очи­стить коль­це­вой буфер:

 

Толь­ко root или поль­зо­ва­те­ли с при­ви­ле­ги­я­ми sudo могут очи­стить буфер.

Что­бы рас­пе­ча­тать содер­жи­мое буфе­ра перед очист­кой, исполь­зуй­те пара­метр -c( –read-clear):

 

Если вы хоти­те сохра­нить теку­щие жур­на­лы dmesg в фай­ле перед его очист­кой, пере­на­правь­те вывод в файл:

 

Коман­да dmesg поз­во­ля­ет вам про­смат­ри­вать и кон­тро­ли­ро­вать коль­це­вой буфер ядра. Это может быть очень полез­но при устра­не­нии непо­ла­док ядра или аппа­рат­ных проблем.

Вве­ди­те man dmesg в сво­ем тер­ми­на­ле для про­смот­ра инфор­ма­ции о всех доступ­ных опци­ях dmesg.