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)
. 리소스를 참조하세요.