人間が読める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)。リソースをご覧ください。

おすすめ記事