dmesg: 사용자 정의 시간 형식

dmesg: 사용자 정의 시간 형식

dmesg-T사람이 읽을 수 있는 타임스탬프를 인쇄 하는 옵션이 있으며 , 새 버전에는 --time-format시간 형식을 변경할 수 있는 옵션이 있습니다. 예를 들면 다음과 같습니다.

--time-format iso

불행하게도 iso시간 형식도 읽기 쉽지 않습니다. date표준 구문을 사용하여 나만의 시간 형식을 정의 할 수 있나요 ? 지금 바로:

date +%F-%T

답변1

할 수는 없지만 dmesg출력을 구문 분석할 수 있습니다.

dmesg --time-format iso \
| while read datestring rest; do \
  printf '%s\n' "$(date -d "$datestring" +%F-%T) $rest"; done

답변2

gawkawk예, 예를 들어 다음과 같이 (GNU)를 사용하여 시간 형식을 다시 지정할 수 있습니다 .

dmesg --time-format iso | gawk '{ printf (strftime("+%F-%T",mktime(gensub("[-+T:,]"," ","g",$1)))) ; $1 = ""; print $0}'

dmesg아래와 같이 여기에 ISO 날짜를 인쇄합니다.

2019-09-02T06:10:30,708864+02:00 this is an important message

첫 번째 문자열에서 특수 문자를 제거한 다음 mktime( ) g의 함수를 사용하여 awk문자열을 날짜로 구문 분석한 다음 strftime원하는 매개변수를 사용하여 형식을 지정합니다.

이것은 다음과 같은 것을 제공합니다

+2019-09-02-06:10:30 this is an important message

작은 메모:

  • 여기서는 명령을 로컬로 실행하고 있기 때문에 이것이 명백하다고 가정하여 시간대를 무시합니다.

  • dmesg타임스탬프가 저장되는 방식으로 인해 컴퓨터를 일시 중지했다가 깨우면 주어진 시간이 정확하지 않을 수 있습니다(사실 때로는 상당히 부정확할 수도 있음). 다음을 참조하세요 dmesg(1).

    man 1 dmesg
    

관련 정보