집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >Linux 커널 오류를 디버깅하는 방법을 정말로 알고 계십니까? 이 기사를 읽고 나면 깨닫게 될 것입니다!
Linux 커널은 운영 체제의 핵심이며 시스템 리소스(예: CPU, I/O 장치, 물리적 메모리 및 파일 시스템)에 대한 액세스를 제어합니다. 부팅 과정과 시스템이 실행되는 동안 커널은 커널 링 버퍼에 다양한 메시지를 씁니다. 이러한 메시지에는 시스템 작동에 대한 다양한 정보가 포함됩니다.
커널 링 버퍼는 커널의 로그 메시지를 저장하는 데 사용되는 물리적 메모리의 일부입니다. 크기가 고정되어 있으므로 버퍼가 가득 차면 오래된 로그 레코드를 덮어쓰게 됩니다.
dmesg 명령줄 유틸리티는 Linux 및 기타 Unix 계열 운영 체제에서 커널 링 버퍼를 인쇄하고 제어하는 데 사용됩니다. 커널 부팅 메시지를 검사하고 하드웨어 관련 문제를 디버깅하는 데 유용합니다.
이 튜토리얼에서는 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
$ 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
$ 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는 다음 로그 수준을 지원합니다.
-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_messages
결론
dmesg 명령을 사용하면 커널 링 버퍼를 보고 제어할 수 있습니다. 커널이나 하드웨어 문제를 해결할 때 유용합니다.위 내용은 Linux 커널 오류를 디버깅하는 방법을 정말로 알고 계십니까? 이 기사를 읽고 나면 깨닫게 될 것입니다!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!