特定の時間範囲内でdmesgログを表示するには?

特定の時間範囲内でdmesgログを表示するには?

Fedora 29(必須)では、次のdmesgオプションがありません。--since--untiljournalctl

journalctl --since "2022-12-20 09:00:00" --until "2022-12-20 10:00:00"

内に表示されるログをフィルタリングするにはdmesg9AM10AMDec 20

答え1

長い--time-formatオプションがdmesg利用可能ですその他フォーマット:

Tiso形式のため、日付と時刻の間にスペースはありません。)

sedのみが機能しますログに1行と1行がある場合2022-12-12T092022-12-12T10

$ sudo dmesg --time-format=iso | sed -n '/2022-12-12T09/,/2022-12-12T10/p'


また、時間範囲にさらに具体的な内容を追加するために同様の操作を実行することもできます(ここでは、範囲内で指定された時間(分)だけを取得します。):

2022-12-12T09:16この場合、ログ内の行と行も必要です。2022-12-12T09:24

$ sudo dmesg --time-format=iso | sed -n '/2022-12-12T09:16/,/2022-12-12T09:24/p'

~からマンページ

- 時間形式format指定された形式(ctime、reltime、delta、またはiso)でタイムスタンプを印刷します。最初の3つの形式は、時間形式の特定のオプションのエイリアスです。 iso形式はISO-8601タイムスタンプ形式のdmesg実装です。この形式の目的は、2つのシステム間のタイムスタンプ比較を他の構文解析だけでなく簡単に作成することです。 iso タイムスタンプは YYYY-MM-DDHH:MM:SS,<-+> で定義されます。

iso形式にはctimeと同じ問題があります。システムが一時停止して再起動すると、時間が正しくない可能性があります。

答え2

特定の範囲内のログを収集するための小さなスクリプトを作成しました。

while read line; do
        d=$(echo $line | cut -d ',' -f 1)
        if [[ $line =~ ^[[:digit:]] ]] && [[ `date -d "$d" +%s` > `date --date="2 hours ago" +%s` ]]
        then
                echo $line
        fi
done < <(dmesg -T --time-format iso)

since2時間前のログのみが表示されます。untilスクリプトは同じロジックですが、異なる数学を使用して作成できます。唯一の問題は、dmesg自体よりも遅いことです。

関連情報