소개
이 랩에서는 Linux 에서 커널 링 버퍼가 활성화되어 있는지 확인하는 방법을 배우게 됩니다. 커널 링 버퍼는 시스템 이벤트를 이해하고 문제 해결에 필수적인 구성 요소입니다. 버퍼를 직접 보기 위해 dmesg 명령을 사용하고, /proc/kmsg 파일을 통해 존재 여부와 내용을 확인하며, 마지막으로 systemd 저널에서 관리하는 커널 로그를 검사하기 위해 journalctl을 사용하는 세 가지 방법을 탐구할 것입니다. 이러한 단계는 Linux 시스템에서 커널 메시지를 모니터링하고 분석하는 실질적인 기술을 제공할 것입니다.
dmesg 로 버퍼 확인
이 단계에서는 dmesg 명령을 사용하여 커널 링 버퍼를 확인하는 방법을 배우게 됩니다. 커널 링 버퍼는 Linux 커널이 하드웨어, 장치 드라이버 및 시스템 이벤트에 대한 메시지를 저장하는 메모리의 특별한 영역입니다. 이러한 메시지는 문제 해결 및 시스템에서 낮은 수준에서 무슨 일이 일어나고 있는지 이해하는 데 매우 중요합니다.
커널 링 버퍼를 커널의 로그북이라고 생각하십시오. 장치가 감지되거나 오류가 발생하는 등 중요한 일이 발생하면 커널은 이 버퍼에 메시지를 씁니다. dmesg는 이러한 메시지를 읽는 데 사용하는 도구입니다.
아직 열려 있지 않다면 터미널을 엽니다. 데스크탑 왼쪽의 Xfce 터미널 아이콘을 클릭하여 터미널을 열 수 있습니다.
이제 다음 명령을 입력하고 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를 종료할 수 있습니다.
grep을 사용하여 dmesg의 출력을 필터링하여 특정 키워드를 검색할 수도 있습니다. 예를 들어, 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를 직접 읽으면 원시 메시지가 제공됩니다.
cat 명령을 사용하여 /proc/kmsg의 내용을 읽어보겠습니다.
아직 열려 있지 않다면 터미널을 엽니다.
다음 명령을 입력하고 Enter 키를 누릅니다.
cat /proc/kmsg
일부 출력이 표시될 수 있지만 dmesg 출력만큼 읽기 쉬울 수 없습니다. 또한 새 메시지가 없으면 /proc/kmsg를 읽는 것이 때때로 차단될 수 있거나 이미 읽은 메시지가 표시될 수 있습니다.
<level>message
<level>message
...
<level> 부분은 메시지의 로그 레벨 (예: critical, error, warning, info, debug) 을 나타냅니다.
/proc/kmsg를 직접 읽을 수 있지만, dmesg는 더 나은 형식 지정 및 필터링 옵션을 제공하므로 커널 링 버퍼를 보기 위한 표준이자 권장되는 도구입니다. /proc/kmsg가 소스임을 이해하면 dmesg가 내부적으로 어떻게 작동하는지 이해하는 데 도움이 됩니다.
대부분의 실용적인 목적을 위해 /proc/kmsg를 직접 읽는 대신 dmesg를 사용하게 됩니다. 이 단계는 주로 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
특정 시간 이후의 로그를 보려면 (예: "today" 이후):
journalctl --since "today"
가장 최근 로그를 보고 새 메시지가 도착하는 대로 추적하려면 (tail -f와 유사):
journalctl -f
Ctrl+C를 눌러 journalctl -f 명령을 종료합니다.
journalctl은 시스템 관리 및 문제 해결을 위한 강력한 도구입니다. 로그에 대한 중앙 집중식 위치와 로그를 보고 필터링하기 위한 유연한 옵션을 제공합니다.
터미널에서 일부 journalctl 옵션을 실험하여 출력이 어떻게 영향을 받는지 확인하십시오.
이 랩을 완료하려면 계속을 클릭하십시오.
요약
이 랩에서는 Linux 에서 커널 링 버퍼가 활성 상태인지 확인하는 방법을 배웠습니다. 먼저 dmesg 명령을 사용하여 하드웨어, 장치 드라이버 및 시스템 이벤트에 대한 중요한 메시지를 저장하는 커널 링 버퍼의 내용을 확인했습니다. dmesg가 이러한 메시지를 타임스탬프와 함께 표시하여 시스템 활동의 로우 레벨 로그를 제공하는 것을 확인했습니다.
또한 dmesg의 출력이 방대할 수 있으며, less 또는 more와 같은 페이저로 파이핑하는 것이 출력을 탐색하는 데 유용한 기술임을 배웠습니다. 이 초기 단계는 커널 링 버퍼의 내용에 액세스하고 시스템 모니터링 및 문제 해결에서 해당 역할을 이해하는 주요 방법을 보여주었습니다.



