특정 시간 범위 내에서 dmesg 로그를 표시하는 방법은 무엇입니까?

특정 시간 범위 내에서 dmesg 로그를 표시하는 방법은 무엇입니까?

Fedora 29(필수로 사용해야 함)에서는 다음 과 같은 dmesg옵션이 누락되었습니다 .--since--untiljournalctl

journalctl --since "2022-12-20 09:00:00" --until "2022-12-20 10:00:00"

내에 표시된 로그를 필터링하는 방법은 무엇입니까 dmesg?9AM10AMDec 20

답변1

--time-format옵션을 dmesg사용할 수 있습니다다른체재:

( Tiso 형식으로 인해 날짜와 시간 사이에 공백이 없습니다.)

sed만 작동합니다로그에 한 줄과 한 줄이 있는 경우 2022-12-12T09.2022-12-12T10

$ sudo dmesg --time-format=iso | sed -n '/2022-12-12T09/,/2022-12-12T10/p'


또한 시간 범위에 더 구체적인 내용을 추가하기 위해 유사한 작업을 수행할 수도 있습니다(여기서는 범위 내에서 지정된 시간(분)만 얻습니다.):

2022-12-12T09:16이 경우에는 로그에 있는 줄과 줄도 필요합니다 .2022-12-12T09:24

$ sudo dmesg --time-format=iso | sed -n '/2022-12-12T09:16/,/2022-12-12T09:24/p'

~에서맨페이지

- 시간 형식format 주어진 형식(ctime, reltime, delta 또는 iso)으로 타임스탬프를 인쇄합니다. 처음 세 가지 형식은 시간 형식의 특정 옵션에 대한 별칭입니다. iso 형식은 ISO-8601 타임스탬프 형식의 dmesg 구현입니다. 이 형식의 목적은 다른 구문 분석뿐만 아니라 두 시스템 간의 타임스탬프 비교를 쉽게 만드는 것입니다. iso 타임스탬프는 YYYY-MM-DDHH:MM:SS,<-+>로 정의됩니다.

iso 형식에는 ctime과 동일한 문제가 있습니다. 시스템이 일시 중지되었다가 다시 시작될 때 시간이 정확하지 않을 수 있습니다.

답변2

특정 범위 내의 로그를 수집하기 위해 작은 스크립트를 작성했습니다.

while read line; do
        d=$(echo $line | cut -d ',' -f 1)
        if [[ $line =~ ^[[:digit:]] ]] && [[ `date -d "$d" +%s` > `date --date="2 hours ago" +%s` ]]
        then
                echo $line
        fi
done < <(dmesg -T --time-format iso)

since2시간 전의 로그 만 표시됩니다 . until스크립트는 동일한 논리이지만 다른 수학을 사용하여 작성할 수 있습니다. 유일한 문제는 dmesg 자체보다 느리다는 것입니다.

관련 정보