Qualche anno fa vi avevo illustrato un tool interessante che “colora” i log, ovvero ccze. Tuttavia potrebbero esserci delle esigenze particolari sebbene rare. Con il comando “grep” possiamo isolare una determinata parola all’interno di un file, tipicamente possiamo pensare ai file di log.
Questo però va bene quando l’informazione nella sua visione globale è compiuta nella riga che stiamo cercando. Immaginiamo infatti che il log abbia un processo più esteso, e quindi abbiamo bisogno di vedere le righe precedenti o successive, dove la parola cercata non è però presente.
Una soluzione potrebbe essere quella di colorare solo la parola che ci interessa nel log, in modo da evidenziarla e così poter esaminare anche le righe precedenti o successive. Nel mondo Linux esistono tool per ogni cosa, e quindi già lo stesso CCZE di cui vi avevo parlato riuscirebbe a fare questo. Ma l’intento di questo post è non utilizzare cose esterne, e quindi ci andremo ad avvalere di Perl che è installato per default nei maggiori sistemi esistenti.
A perl, che ci serve sostanzialmente per inserire un colore, andremo ad affiancare le espressioni regolari per inglobare la ricerca.
Ad esempio vogliamo guardare il file di log del firewall UFW, dove ci interessa vedere la porta di destinazione, tipo la 22. Andremo a dare un comando del genere:
tail -f /var/log/ufw.log | perl -pe 's/.DPT=22./\e[1;31m$&\e[0m/g'
Il log che emerge sarà il listato comune di un tail (ma potremo usare un cat) con l’eventuale porta evidenziata. Nel caso specifico evidenzierà anche i log la cui porta sia 223 o qualsiasi cosa scritta dopo il 22.
La parte relativa a \e[1;31m determina di fatto il colore da applicare, in questo caso il rosso. Mentre il valore \e[0m di fatto reimposta di nuovo il listato al colore originale.