사람이 읽을 수 있는 dmesg 출력을 얻으려면 Perl 스크립트를 조정하세요.

사람이 읽을 수 있는 dmesg 출력을 얻으려면 Perl 스크립트를 조정하세요.

RHEL 6에는 커널 매개변수가 있습니다.

printk.time=1

이렇게 하면 내 dmesg에 타임스탬프가 표시됩니다. 그러나 아래와 같이 재부팅 후 몇 초 내에 표시됩니다.

[12.23456]

초를 HR 날짜로 변환하는 스크립트를 .bashrc에 찾았습니다.

dmesg_with_human_timestamps () {
$(type -P dmesg) "$@" | perl -w -e 'use strict;
    my ($uptime) = do { local @ARGV="/proc/uptime";<>}; ($uptime) = ($uptime =~ /^(\d+)\./);
    foreach my $line (<>) {
        printf( ($line=~/^\[\s*(\d+)\.\d+\](.+)/) ? ( "[%s]%s\n",  scalar localtime(time - $uptime + $1), $2 ) : $line )
    }'
}
alias dmesg=dmesg_with_human_timestamps

이것은 완벽하게 작동했습니다. 이제 dmesg 출력은 다음과 같습니다.

[Fri Jun 10 13:07:14 2016]

하지만 다음과 같이 코드를 변경하려면 어떻게 해야 합니까?

[2016/06/10 13:25:28]

답변1

이것POSIX기준 치수지정자 문자를 변환하여 원하는 시간 템플릿을 얻을 strftime수 있는 다음 함수를 포함합니다 .strftime(3)

% perl -MPOSIX=strftime -E 'say strftime "[%F %T]", localtime(time)'
[2011-02-17 10:55:37]
%

perl -MPOSIX=strftime -e ...그럼 당신의 경우에는

printf( ($line=~/^\[\s*(\d+)\.\d+\](.+)/) ? ( "[%s]%s\n", strftime("%F %T", localtime(time - $uptime + $1)), $2 ) : $line )

%Y-%m-%d %H...strftime(3)템플릿이 누락된 경우 %F더 자세한 템플릿이 필요할 수 있습니다 strftime(3). 리소스를 참조하세요.

관련 정보