Como filtrar o dmesg pelo tempo

1

Eu gostaria de filtrar pelo tempo. por exemplo:
dmesg -sec 30
A saída seria eventos que ocorreram nos últimos 30 segundos. Ou com intervalo de tempo. Qualquer filtragem com o tempo.

    
por Rimski 30.03.2017 / 18:47

1 resposta

1

Escreva um script para adicionar a hora atual ao timestamp na entrada dmegs, depois compare a hora com a hora atual e exiba as linhas mais recentes que o intervalo desejado.

Este é um exemplo:

#!/bin/bash

if [ $# -eq 0 ]
  then
    echo "Argument Error.  Please specify the Time interval in seconds."
    exit
fi

timeinterval= # change this to the desired time interval
currenttime=$(date +%s)

string="$(who -b | awk '{print "-"}')"

IFS='-' read -a array <<< "$string"

MONTHS=(X Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)

year="${array[0]}"
month=${MONTHS[${array[1]}]}
day="${array[2]}"
hour="${array[3]}"

daystring="$month $day $year $hour"

bootime=$(date --date="$daystring" +%s)

dmesg | while read line; do 
    dmesgstamp=$(echo "$line" | awk -F'[' '{print }' | awk -F\. '{print }')
    dmesgstamp=$((dmesgstamp += bootime))
    results=$((currenttime-dmesgstamp))
    if ((results < timeinterval)); then
        echo "$line"
    fi
done

Execute o script com o intervalo em segundos como o argumento:

$ ./script.sh 30
    
por L. D. James 30.03.2017 / 22:39