Am realizat următorul script, care se actualizează în fiecare secundă și evidențiază orice noi intrări de jurnal. De asemenea, definește zona în care ar trebui să fie afișat jurnalul (cu codul succese
și logcols
variabile), deci este făcut pentru a fi utilizat într-o fereastră de terminal de dimensiune fixă (o folosesc în interiorul tmux).
Probabil că ați putea modifica acest script pentru a evidenția numai liniile care se potrivesc unui anumit criteriu, așa cum indicați.
#!/bin/bash
# Variabilele de configurare inițială
rezultate=31
logcols=127
# Definiția funcției locale
printnew() {
clar
echo -e „\e[0;30;47m”
hightail=$(coada -n "$logrows" /var/log/syslog | cut -b "1-$logcols")
echo -ne "${hightail}\e[0m"
}
printdif() {
(( newrows = logrows - logdiff ))
clar
normtail=$(coada -n "$logrows" /var/log/syslog | head -n "$newrows" | cut -b "1-$logcols")
echo -n "$normtail"
echo -e „\e[0;30;47m”
hightail=$(coada -n "$logdiff" /var/log/syslog | cut -b "1-$logcols")
echo -ne "${hightail}\e[0m"
}
printold() {
clar
normtail=$(coada -n "$logrows" /var/log/syslog | cut -b "1-$logcols")
echo -n "$normtail"
}
# Buclă în fiecare secundă
în timp ce adevărat
do
dormi 1 &
# Citiți dimensiunile jurnalului
logsize=$(wc -l /var/log/syslog | cut -d ' ' -f1)
(( logdiff = dimensiunea log - presize ))
# Dacă mai mult de $logrows linii sunt noi
if (( logdiff > „$logrows” ))
atunci
printnew
redesenare=1
# Dacă mai puțin de $logrows linii, dar mai mult de 0 linii sunt noi
elif (( logdiff > 0 ))
atunci
printdif
redesenare=1
# Dacă nu există linii noi
altfel
dacă [[ "$redesenează" -eq 1 ]]
atunci
printold
redesenare=0
fi
fi
presize="$logsize"
așteptați # pentru somn
Terminat
Scriptul este realizat având în vedere 3 scenarii:
- Întregul conținut al
succese
este nou - totul este evidențiat (printnew
).
- Unele linii din jurnal sunt noi - acestea sunt evidențiate (
printdif
).
- Fără linii noi de jurnal - nimic nu este evidențiat (
printold
).
Disclaimer: Codul ar putea fi probabil optimizat, dar, în general, sunt mai preocupat ca codul meu să fie lizibil, mai degrabă decât cât mai condensat posibil.