Введение
В этом практическом занятии (лабораторной работе) вы узнаете, как проверить, активен ли кольцевой буфер ядра в Linux. Кольцевой буфер ядра является важной частью для понимания системных событий и устранения неполадок. Вы изучите три способа доступа к его содержимому и его проверки: с помощью команды dmesg для прямого просмотра буфера, проверки его наличия и содержимого через файл /proc/kmsg и, наконец, с использованием journalctl для изучения журналов ядра, управляемых системным журналом systemd. Эти шаги предоставят вам практические навыки мониторинга и анализа сообщений ядра в вашей системе Linux.
Проверка буфера с помощью dmesg
На этом шаге вы узнаете, как использовать команду dmesg для просмотра кольцевого буфера ядра. Кольцевой буфер ядра представляет собой специальную область в памяти, где ядро Linux хранит сообщения о железе, драйверах устройств и системных событиях. Эти сообщения являются важными для устранения неполадок и понимания того, что происходит на низком уровне в вашей системе.
Представьте кольцевой буфер ядра как журнал для ядра. Когда происходит что - то важное, например, обнаружено устройство или произошла ошибка, ядро записывает сообщение в этот буфер. dmesg - это инструмент, с помощью которого вы можете прочитать эти сообщения.
Если терминал еще не открыт, откройте его. Для этого нажмите на значок Xfce Terminal слева на рабочем столе.
Теперь введите следующую команду и нажмите Enter:
dmesg
Вы увидите, как в терминале будет прокручиваться большое количество вывода. Это содержимое кольцевого буфера ядра. Вывод может выглядеть примерно так (точное содержимое будет различаться в зависимости от вашей системы и времени ее работы):
[ 0.000000] Linux version 5.15.0-xx-generic (buildd@lcy02-amd64-xx) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #xx-Ubuntu SMP Tue Feb 20 15:48:58 UTC 2024
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-xx-generic root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ro console=ttyS0,115200
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
...
[ 10.123456] usb 1-1: new high-speed USB device number 2 using xhci_hcd
[ 10.567890] usb 1-1: New USB device found, idVendor=xxxx, idProduct=xxxx
[ 10.567890] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
...
Временные метки в начале каждой строки указывают на время, прошедшее с момента запуска системы.
Поскольку вывод может быть очень длинным, часто бывает полезно направить вывод команды dmesg в постраничный просмотрщик, такой как less или more. Это позволяет вам просматривать вывод по страницам.
Попробуйте следующую команду:
dmesg | less
Теперь вы можете использовать стрелки на клавиатуре для прокрутки вверх и вниз и нажать q для выхода из less.
Вы также можете отфильтровать вывод команды dmesg с помощью grep, чтобы найти определенные ключевые слова. Например, чтобы увидеть сообщения, связанные с USB - устройствами, вы можете использовать:
dmesg | grep -i usb
Опция -i делает поиск регистронезависимым.
Использование команды dmesg является базовым навыком для диагностики проблем с железом и понимания процессов запуска системы в Linux.
Нажмите Продолжить, чтобы перейти к следующему шагу.
Проверка буфера в /proc/kmsg
На предыдущем шаге вы использовали команду dmesg для просмотра кольцевого буфера ядра. Теперь давайте узнаем, откуда dmesg берет свою информацию. Кольцевой буфер ядра представлен в виде виртуального файла в файловой системе /proc, а именно по пути /proc/kmsg.
Файловая система /proc - это специальная файловая система в Linux, которая предоставляет информацию о процессах и другой системной информации. Это способ, которым ядро общается с программами в пользовательском пространстве. Файлы в /proc не являются реальными файлами на диске; они создаются ядром в режиме реального времени при доступе к ним.
Файл /proc/kmsg содержит те же сообщения ядра, которые отображает dmesg. Однако чтение напрямую из /proc/kmsg несколько отличается. Команда dmesg обрабатывает и форматирует вывод для более удобного чтения, в то время как прямое чтение /proc/kmsg дает вам необработанные сообщения.
Давайте попробуем прочитать содержимое /proc/kmsg с помощью команды cat.
Если терминал еще не открыт, откройте его.
Введите следующую команду и нажмите Enter:
cat /proc/kmsg
Вы, возможно, увидите некоторый вывод, но он может быть не так удобен для чтения, как вывод dmesg. Кроме того, чтение /proc/kmsg иногда может блокировать выполнение, если нет новых сообщений, или может показать уже прочитанные сообщения.
<level>message
<level>message
...
Часть <level> указывает уровень журнала сообщения (например, критическое, ошибка, предупреждение, информация, отладка).
Хотя вы можете читать /proc/kmsg напрямую, dmesg является стандартным и рекомендуемым инструментом для просмотра кольцевого буфера ядра, так как он предоставляет лучшие возможности по форматированию и фильтрации. Понимание того, что /proc/kmsg является источником, помогает вам понять, как работает dmesg "под капотом".
В большинстве практических случаев вы будете использовать dmesg, а не читать /proc/kmsg напрямую. Этот шаг в основном призван показать вам исходный источник вывода dmesg.
Нажмите Продолжить, чтобы перейти к следующему шагу, где мы рассмотрим более современную систему логирования.
Проверка журналов с помощью journalctl
На предыдущих шагах вы узнали о кольцевом буфере ядра и о том, как просматривать его содержимое с помощью команды dmesg. Хотя dmesg отлично подходит для просмотра сообщений ядра, современные системы Linux используют более комплексную систему логирования, называемую systemd-journald. Команда journalctl является основным инструментом для взаимодействия с журналом systemd-journald.
systemd-journald собирает журнальные сообщения из различных источников, включая ядро (как те сообщения, которые вы видели с помощью dmesg), системные сервисы, приложения и даже стандартный вывод и стандартную ошибку процессов. Он хранит эти журналы в структурированном, проиндексированном формате, что упрощает поиск и фильтрацию сообщений.
Давайте рассмотрим команду journalctl.
Если терминал еще не открыт, откройте его.
Введите следующую команду и нажмите Enter:
journalctl
Эта команда отобразит все журнальные сообщения, собранные systemd-journald. Как и в случае с dmesg, вывод может быть очень длинным и обычно автоматически передается в постраничный просмотрщик, например, less.
-- Journal begins at Tue 2024-07-23 10:00:00 UTC, ends at Tue 2024-07-23 10:30:00 UTC. --
Jul 23 10:00:01 hostname systemd[1]: Starting Network Manager...
Jul 23 10:00:02 hostname kernel: Linux version 5.15.0-xx-generic (...)
Jul 23 10:00:03 hostname systemd[1]: Started Network Manager.
Jul 23 10:00:04 hostname systemd[1]: Starting OpenSSH server daemon...
...
Вы можете использовать стрелки на клавиатуре для прокрутки и нажать q для выхода из постраничного просмотрщика.
У команды journalctl есть множество опций для фильтрации журналов. Вот несколько примеров:
Для просмотра только сообщений ядра (аналогично dmesg):
journalctl -k
Для просмотра журналов определенного сервиса, например, сервиса SSH:
journalctl -u ssh.service
Для просмотра журналов с определенного времени, например, с "сегодня":
journalctl --since "today"
Для просмотра самых свежих журналов и отслеживания новых сообщений по мере их поступления (как tail -f):
journalctl -f
Нажмите Ctrl+C для выхода из команды journalctl -f.
journalctl - это мощный инструмент для системного администрирования и устранения неполадок. Он предоставляет централизованное место для хранения журналов и гибкие опции для их просмотра и фильтрации.
Попробуйте некоторые из опций journalctl в своем терминале, чтобы увидеть, как они влияют на вывод.
Нажмите Продолжить, чтобы завершить этот практический урок.
Резюме
В этом практическом уроке вы узнали, как проверить, активен ли кольцевой буфер ядра в Linux. Вы начали с использования команды dmesg для просмотра содержимого кольцевого буфера ядра, который хранит важные сообщения о аппаратном обеспечении, драйверах устройств и системных событиях. Вы увидели, как dmesg отображает эти сообщения с временными метками, предоставляя низкоуровневый журнал системной активности.
Вы также узнали, что вывод dmesg может быть обширным, и перенаправление его в постраничный просмотрщик, такой как less или more, является полезной техникой для навигации по выводу. Этот первый шаг показал основной метод доступа к содержимому кольцевого буфера ядра и понимания его роли в мониторинге и устранении неполадок системы.



