Как использовать команду dmesg в Linux
Команда dmesg
позволяет заглянуть в скрытый мир процессов запуска Linux. Просматривайте и отслеживайте сообщения аппаратных устройств и драйверов из собственного кольцевого буфера ядра с помощью «друга по поиску неисправностей».
Как работает кольцевой буфер Linux
В Linux и Unix-подобных компьютерах загрузка и запуск являются двумя отдельными фазами последовательности событий, происходящих при включении компьютера.
процессы загрузки (BIOS или UEFI, MBR и GRUB) выполняют инициализацию системы до момента, когда ядро загружается в память и подключается к начальному виртуальному диску (initrd или initramfs), а systemd запущен.
Затем процессы запуска принимают эстафетную палочку и завершают инициализацию операционной системы. На самых ранних этапах инициализации демоны ведения журналов, такие как syslogd или rsyslogd, еще не запущены и не работают. Чтобы избежать потери заметных сообщений об ошибках и предупреждений на этом этапе инициализации, ядро содержит кольцевой буфер, который используется в качестве хранилища сообщений.
Кольцевой буфер — это пространство памяти, зарезервированное для сообщений. Он прост по конструкции и имеет фиксированный размер. Когда он заполнен, новые сообщения перезаписывают самые старые сообщения. Концептуально его можно представить как «круговой буфер».
В кольцевом буфере ядра хранится такая информация, как сообщения инициализации драйверов устройств, сообщения от оборудования и сообщения от модулей ядра. Поскольку он содержит эти низкоуровневые сообщения о запуске, кольцевой буфер является хорошим местом для начала расследования аппаратных ошибок или других проблем с запуском.
Но не идите с пустыми руками. Возьмите dmesg
с собой.
Команда dmesg
Команда dmesg
позволяет просматривать сообщения, хранящиеся в кольцевом буфере. По умолчанию вам нужно использовать sudo
для использования dmesg
.
sudo dmesg
Все сообщения в кольцевом буфере отображаются в окне терминала.
Это был потоп. Очевидно, нам нужно передать его через less
:
sudo dmesg | less
Теперь мы можем прокручивать сообщения в поисках интересующих элементов.
Вы можете использовать функцию поиска в 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
Это приводит к двум вещам.
- Вывод автоматически отображается в формате
less
. - Временные метки показывают временную метку с датой и временем с минутным разрешением. Сообщения, которые появлялись каждую минуту, помечаются секундами и наносекундами с начала этой минуты.
Удобочитаемые временные метки
Если вам не требуется точность в наносекундах, но вы хотите, чтобы временные метки было легче читать, чем значения по умолчанию, используйте параметр -T
(человекочитаемый). (Это немного сбивает с толку. -H
— это вариант «человек», -T
— вариант «удобочитаемый».)
sudo dmesg -T
Временные метки отображаются как стандартные даты и время, но разрешение снижено до минуты.
Все, что произошло в течение одной минуты, имеет одинаковую отметку времени. Если вас беспокоит только последовательность событий, этого достаточно. Также обратите внимание, что вы вернетесь обратно в командную строку. Эта опция не вызывает автоматически less
.
Просмотр прямых трансляций
Чтобы видеть сообщения по мере их поступления в кольцевой буфер ядра, используйте параметр --follow
(ожидание сообщений). Эта фраза может показаться немного странной. Если кольцевой буфер используется для хранения сообщений о событиях, происходящих во время последовательности запуска, как оперативные сообщения могут поступать в кольцевой буфер после запуска компьютера?
Любое изменение оборудования, подключенного к вашему компьютеру, приведет к отправке сообщений в кольцевой буфер ядра. Обновите или добавьте модуль ядра, и вы увидите сообщения кольцевого буфера об этих изменениях. Если вы подключите USB-накопитель или подключите или отключите устройство Bluetooth, вы увидите сообщения в выводе dmesg
. Даже виртуальное оборудование вызовет появление новых сообщений в кольцевом буфере. Запустите виртуальную машину, и вы увидите новую информацию, поступающую в кольцевой буфер.
sudo dmesg --follow
Обратите внимание, что вы не вернетесь в командную строку. Когда появляются новые сообщения, они отображаются с помощью dmesg
в нижней части окна терминала.
Даже монтирование диска CD-ROM рассматривается как изменение, потому что вы привили содержимое диска CD-ROM к дереву каталогов.
Чтобы выйти из ленты в реальном времени, нажмите Ctrl+C
.
Получить последние десять сообщений
Используйте команду tail, чтобы получить последние десять сообщений кольцевого буфера ядра. Конечно, вы можете получить любое количество сообщений. Десятка — это только наш пример.
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"
Любое сообщение, в котором упоминается любое из условий поиска, отображается в окне терминала.
Использование уровней журнала
Каждое сообщение, зарегистрированное в кольцевом буфере ядра, имеет привязанный к нему уровень. Уровень представляет важность информации в сообщении. Уровни:
- появление: система непригодна для использования.
- предупреждение: необходимо принять меры немедленно.
- crit: критические условия.
- ошибка: условия ошибки.
- предупреждать: предупреждающие условия.
- примечание: нормальное, но существенное состояние.
- информация: информационная.
- debug: сообщения уровня отладки.
Мы можем заставить dmesg
извлекать сообщения, соответствующие определенному уровню, используя параметр -l
(уровень) и передавая имя уровня в качестве параметра командной строки. Чтобы увидеть только сообщения «информационного» уровня, используйте эту команду:
sudo dmesg -l info
Все перечисленные сообщения являются информационными сообщениями. Они не содержат ошибок или предупреждений, только полезные уведомления.
Объедините два или более уровня журнала в одну команду, чтобы получить сообщения нескольких уровней журнала:
sudo dmesg -l debug,notice
Вывод dmesg
представляет собой смесь сообщений каждого уровня журнала:
Категории объектов
Сообщения dmesg
сгруппированы в категории, называемые «услуги». Список объектов таков:
- kern: сообщения ядра.
- пользователь: сообщения уровня пользователя.
- почта: почтовая система.
- демон: системные демоны.
- auth: сообщения безопасности/авторизации.
- syslog: внутренние сообщения syslogd.
- lpr: подсистема построчного принтера.
- новости: подсистема сетевых новостей.
Мы можем попросить dmesg
отфильтровать его вывод, чтобы показывать сообщения только в определенном объекте. Для этого мы должны использовать опцию -f
(facility):
sudo dmesg -f daemon
dmesg
перечисляет все сообщения, относящиеся к демонам в окне терминала.
Как и в случае с уровнями, мы можем попросить dmesg
вывести список сообщений из более чем одного объекта одновременно:
sudo dmesg -f syslog, daemon
Вывод представляет собой смесь сообщений системного журнала и журнала демона.
Сочетание объекта и уровня
Опция -x
(декодирование) заставляет dmesg
показывать средство и уровень в виде удобочитаемых префиксов для каждой строки.
sudo dmesg -x
Объект и уровень можно увидеть в начале каждой строки:
Первый выделенный раздел — это сообщение от средства «ядро» с уровнем «уведомления». Второй выделенный раздел — это сообщение от средства «ядро» с уровнем «информация».
Это здорово, но почему?
В общем, поиск неисправности.
Если у вас возникли проблемы с аппаратным обеспечением, которое не распознается или работает неправильно, dmesg
может пролить свет на проблему.
- Используйте
dmesg
для просмотра сообщений от самого высокого уровня до каждого нижнего уровня в поисках любых ошибок или предупреждений, в которых упоминается элемент оборудования или которые могут иметь отношение к проблема. - Используйте
dmesg
для поиска любого упоминания соответствующего объекта, чтобы узнать, содержат ли они какую-либо полезную информацию. - Пропустите
dmesg
черезgrep
и найдите связанные строки или идентификаторы, такие как производитель продукта или номера моделей. - Пропустите
dmesg
черезgrep
и найдите общие термины, такие как «gpu» или «хранилище», или такие термины, как «сбой», «не удалось» или «не удалось». - Используйте параметр
--follow
и просматривайте сообщенияdmesg
в режиме реального времени.
Хорошей охоты.
Linux Commands | ||
Files | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc | |
Processes | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap | |
Networking | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld |
RELATED: Best Linux Laptops for Developers and Enthusiasts