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]
POSIX
module には、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 )
_
strftime(3)
に_%Y-%m-%d %H...
_がない場合は、より詳細な_%F
_テンプレートが必要になる場合があります。詳細については、strftime(3)
を参照してください。