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

풀어 주다: 2023-08-03 16:50:34
앞으로
914명이 탐색했습니다.

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>$ 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< / 코드>

dmesg 从/proc/kmsg虚拟文件中读取内核生成的消息。该文件提供了到内核环形缓冲区的接口,并且只能由一个进程打开。如果系统上正在运行syslog进程,并且你尝试使用cat或less命令读取文件,则命令将挂起。

syslog守护程序将内核消息转储到/var/log/dmesg,因此你也可以使用该日志文件:

$ 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는 다음 유형을 지원합니다:
  • kern - 커널 메시지
  • user - 사용자 수준 메시지
  • mail - 메일 시스템
  • daemon - 시스템 데몬
  • auth - 보안/인증 메시지
  • sys 로그 내부 syslogd 메시지
  • lpr - 라인 프린터 하위 시스템
  • news - 네트워크 뉴스 하위 시스템
  • -f (--facility) 옵션을 사용하면 출력을 특정 장치로 제한할 수 있으며, 이 옵션은 하나 이상의 장치를 허용합니다. 쉼표로 구분된 기능.

예를 들어 커널 및 시스템 데몬 메시지만 표시하려면 다음을 사용할 수 있습니다.

$ dmesg -f kern,daemon

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

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

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

$ 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으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!