>운영 및 유지보수 >리눅스 운영 및 유지 관리 >Linux 커널 오류를 디버깅하는 방법을 정말로 알고 계십니까? 이 기사를 읽고 나면 깨닫게 될 것입니다!

Linux 커널 오류를 디버깅하는 방법을 정말로 알고 계십니까? 이 기사를 읽고 나면 깨닫게 될 것입니다!

Linux中文社区
Linux中文社区앞으로
2023-08-03 16:50:341068검색

Linux 커널은 운영 체제의 핵심이며 시스템 리소스(예: CPU, I/O 장치, 물리적 메모리 및 파일 시스템)에 대한 액세스를 제어합니다. 부팅 과정과 시스템이 실행되는 동안 커널은 커널 링 버퍼에 다양한 메시지를 씁니다. 이러한 메시지에는 시스템 작동에 대한 다양한 정보가 포함됩니다.

커널 링 버퍼는 커널의 로그 메시지를 저장하는 데 사용되는 물리적 메모리의 일부입니다. 크기가 고정되어 있으므로 버퍼가 가득 차면 오래된 로그 레코드를 덮어쓰게 됩니다.

dmesg 명령줄 유틸리티는 Linux 및 기타 Unix 계열 운영 체제에서 커널 링 버퍼를 인쇄하고 제어하는 ​​데 사용됩니다. 커널 부팅 메시지를 검사하고 하드웨어 관련 문제를 디버깅하는 데 유용합니다.

이 튜토리얼에서는 dmesg 명령의 기본 사항을 다룹니다.

dmesg 명령 사용

dmesg 명령의 구문은 다음과 같습니다.

dmesg [OPTIONS]
在不带任何选项的情况下调用时,dmesg将所有消息从内核环形缓冲区写入标准输出:

$ dmesg

기본적으로 모든 사용자는 dmesg 명령을 실행할 수 있습니다. 그러나 일부 시스템에서는 dmesg에 대한 액세스가 루트가 아닌 사용자로 제한될 수 있습니다. 이 경우 dmesg를 호출할 때 다음과 같은 오류 메시지를 받게 됩니다:

dmesg: 읽기 커널 버퍼 실패: 작업이 허용되지 않음

커널 매개변수 kernel.dmesg_restrict권한이 없는 사용자가 dmesg를 사용하여 커널 로그 버퍼의 메시지를 볼 수 있는지 여부를 지정합니다. 제한을 제거하려면 0으로 설정하세요.

$ sudo sysctl -w kernel.dmesg_restrict=0<code style='margin: 3px;padding: 3px;font-size: 14px;border-radius: 4px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(155, 110, 35);background-color: rgb(255, 245, 227);'>$ sudo sysctl -w kernel.dmesg_restrict=0

通常,输出包含很多信息行,因此只能看到输出的最后一部分。要一次查看一页,请将输出通过管道传送到分页实用程序,例如less或more:

$ dmesg --color=always | less

其中的--color=always参数用于保留彩色输出。

如果要过滤缓冲区消息,可能使用grep。例如,要仅查看与 USB 相关的消息,请键入:

$ dmesg | grep -i usb

보통 출력에는 많은 정보 줄이 포함되므로 출력의 마지막 부분만 표시됩니다. 한 번에 한 페이지를 보려면 출력을 less 또는 more와 같은 페이지 매김 유틸리티로 파이프하십시오. 🎜🎜 $ dmesg --color=always | less🎜🎜 --color=always 매개변수는 컬러 출력을 유지하는 데 사용됩니다. 🎜🎜버퍼 메시지를 필터링하려면 아마도 grep을 사용하세요. 예를 들어 USB 관련 메시지만 보려면 다음을 입력하세요. 🎜🎜$ dmesg | grep -i usb🎜<p data-tool="mdnice编辑器" style='margin-bottom: 20px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: left;white-space: normal;text-size-adjust: auto;line-height: 1.8em;color: rgb(58, 58, 58);'>dmesg 从/proc/kmsg虚拟文件中读取内核生成的消息。该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开。如果系统上正在运行syslog进程,并且你尝试使用cat或less命令读取文件,则命令将挂起。</p> <p data-tool="mdnice编辑器" style='margin-bottom: 20px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: left;white-space: normal;text-size-adjust: auto;line-height: 1.8em;color: rgb(58, 58, 58);'>syslog守护程序将内核消息转储到/var/log/dmesg,因此你也可以使用该日志文件:</p> <p data-tool="mdnice编辑器" style='margin-bottom: 20px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: left;white-space: normal;text-size-adjust: auto;line-height: 1.8em;color: rgb(58, 58, 58);'><code style='margin: 3px;padding: 3px;font-size: 14px;border-radius: 4px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(155, 110, 35);background-color: rgb(255, 245, 227);'>$ cat /var/log/dmesg

格式化 dmesg 输出。

dmesg命令提供了许多选项,可帮助你格式化和过滤输出。

dmesg中最常用的选项之一是-H(--human),它将输出更容易读的结果。

$ dmesg -H

要打印人类可读的时间戳,请使用-T(--ctime选项):

$ dmesg -T
[Mon Oct 14 14:38:04 2019] IPv6: ADDRCONF(NETDEV_CHANGE): wlp1s0: link becomes ready

时间戳格式也可以使用--time-format选项设置,可以是ctime,reltime,delta,notime或iso。例如:要使用增量格式,你可以输入:

$ dmesg --time-format=delta$ dmesg --time-format=delta

你也可以组合两个或多个选项:

$ dmesg -H -T

要实时观看dmesg命令的输出,请使用-w(--follow)选项:

$ dmesg --follow

두 개 이상의 옵션을 결합할 수도 있습니다 :

$ dmesg -H -T

에서 dmesg 명령의 출력을 보려면 다음에서 실시간으로 -w(--follow) 옵션을 사용하십시오: 🎜🎜$ dmesg --follow code>🎜 🎜dmesg 출력을 필터링합니다. 🎜🎜dmesg 출력을 특정 시설 및 수준으로 제한할 수 있습니다. dmesg는 다음 유형을 지원합니다: 🎜<ul class="list-paddingleft-2" data-tool="mdnice编辑器" style='margin-top: 8px;margin-bottom: 8px;padding-left: 25px;caret-color: rgb(0, 0, 0);color: rgb(0, 0, 0);font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: left;white-space: normal;text-size-adjust: auto;'> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">kern - 커널 메시지 </section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">user - 사용자 수준 메시지 </section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">mail - 메일 시스템 </section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">daemon - 시스템 데몬 </section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">auth - 보안/인증 메시지 </section></li> <li> <section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">sys 로그 내부 syslogd 메시지 </section> </li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">lpr - 라인 프린터 하위 시스템 </section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);">news - 네트워크 뉴스 하위 시스템 </section></li> <li><section style="margin-top: 5px;margin-bottom: 5px;line-height: 26px;color: rgb(1, 1, 1);"> -f (--facility<list>) 옵션을 사용하면 출력을 특정 장치로 제한할 수 있으며, 이 옵션은 하나 이상의 장치를 허용합니다. 쉼표로 구분된 기능. </list></section></li> </ul> <p data-tool="mdnice编辑器" style='margin-bottom: 20px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: left;white-space: normal;text-size-adjust: auto;line-height: 1.8em;color: rgb(58, 58, 58);'> 예를 들어 커널 및 시스템 데몬 메시지만 표시하려면 다음을 사용할 수 있습니다. </p> <p data-tool="mdnice编辑器" style='margin-bottom: 20px;font-family: Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, "PingFang SC", Cambria, Cochin, Georgia, Times, "Times New Roman", serif;font-size: 16px;text-align: left;white-space: normal;text-size-adjust: auto;line-height: 1.8em;color: rgb(58, 58, 58);'><code style='margin: 3px;padding: 3px;font-size: 14px;border-radius: 4px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(155, 110, 35);background-color: rgb(255, 245, 227);'>$ dmesg -f kern,daemon

각 로그 메시지는 메시지의 중요성을 보여주는 로그 수준과 연결되며 dmesg는 다음 로그 수준을 지원합니다.

  • emerg - 시스템을 사용할 수 없습니다.
  • alert - 즉시 조치를 취해야 합니다.
  • crit - 긴급 상황
  • err - 오류 상태
  • warn - 경고 상태
  • 얼음 아님 - 정상이지만 중요한 조건
  • info - 정보 제공
  • debug - 디버그 수준 메시지

-l (--level 4309a73696dbaeac0ddd115cebb6f9b7) 옵션을 사용하면 출력을 정의된 수준으로 제한할 수 있습니다. 이 옵션은 하나 이상의 쉼표로 구분된 수준을 허용합니다. 다음 명령은 오류 및 중요한 메시지만 표시합니다. -l(--level 4309a73696dbaeac0ddd115cebb6f9b7)选项允许你将输出限制为定义的级别,该选项接受一个或多个逗号分隔的级别。以下命令仅显示错误和严重消息:

$ dmesg -l err,crit

清除环形缓冲区

-C(--clear)选项可让您清除环形缓冲区:

$ sudo dmesg -C

$ dmesg -l err,crit

링 버퍼 지우기 🎜🎜-C(--clear) 옵션을 사용하면 링 버퍼를 지울 수 있습니다. 🎜🎜 $ sudo dmesg -C🎜🎜루트 또는 sudo 권한이 있는 사용자만 버퍼를 지울 수 있습니다. 🎜

삭제하기 전에 버퍼 내용을 인쇄하려면 -c(--read-clear) 옵션을 사용하세요.

$ sudo dmesg -c$ sudo dmesg -c

如果要在清除文件之前将当前dmesg日志保存到文件中,你可以将输出重定向到文件:

$ dmesg > dmesg_messages

현재 dmesg 로그를 지우기 전에 파일에 저장하려면 출력을 파일로 리디렉션할 수 있습니다.

$ dmesg > dmesg_messages

결론

dmesg 명령을 사용하면 커널 링 버퍼를 보고 제어할 수 있습니다. 커널이나 하드웨어 문제를 해결할 때 유용합니다.
🎜터미널에 man dmesg를 입력하면 사용 가능한 모든 dmesg 옵션에 대한 정보를 얻을 수 있습니다. 🎜🎜

위 내용은 Linux 커널 오류를 디버깅하는 방법을 정말로 알고 계십니까? 이 기사를 읽고 나면 깨닫게 될 것입니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Linux中文社区에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제