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)
。リソースをご覧ください。