Przeglądanie logów systemowych, z serwerów jest zajęciem monotonnym i żmudnym, zwłaszcza kiedy musimy obejrzeć miliony białych linii na czarnym ekranie. W takich sytuacjach trudno jest wyłapać interesujące nas wartości, a w szczególności błędy. Dobrym pomysłem byłoby napisanie prostego skryptu, który w jakiś sposób wyszczególni interesujące nas wartości.
Kolory w Bashu
Korzystanie z kolorów jest dość proste. Pierwszym krokiem jest stworzenie tekstu bez użycia dodatkowych kolorów. Kolejnym krokiem jest dodanie specjalnej sekwencji sterującej terminalem (nie powłoką bash), która doda nieco barw do naszego tekstu. Standardowy terminal systemowy oraz te graficzne umożliwiają zmianę koloru tła, pierwszego planu (tekst), a także wagi czcionki (czy tekst jest pogrubiony, czy nie). Do wyboru mamy osiem podstawowych kolorów.
Użycie danego koloru wiąże się z zastosowaniem specjalnej sekwencji sterującej umieszczając odpowiednie liczby pomiędzy \e[
(znak ucieczki) i m
. Jeśli chcemy użyć większą ilość kodów, używamy znaku średnika pomiędzy każdą z nich. Najprostszym „kolorem” jest powrót do wartości domyślnych: "\e[0m"
.
Zastosowanie powyższego kodu spowoduje powrót do wartości domyślnych ustawień terminala, dotyczących koloru pierwszego planu, tła oraz wagi tekstu. Najczęściej wykorzystywać będziemy go do zakańczania kolorowania tekstu. Aby odkryć kolory jaki umożliwia nam terminal wystarczy uruchomić prosty skrypt:
#!/bin/bash esc="\033[" echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43" echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _" for fore in 30 31 32 33 34 35 36 37; do line1="$fore " line2=" " for back in 40 41 42 43 44 45 46 47; do line1="${line1}${esc}${back};${fore}m Normal ${esc}0m" line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m" done echo -e "$line1\n$line2" done
W terminalu powinniśmy zobaczyć następującą paletę kolorów:
Teraz, aby otrzymać kod koloru najpierw należy wybrać odpowiedni kolor z tablicy. Następnie należy znaleźć liczby odpowiadające pierwszemu planowi (30-37) i tłu (40-47). Przykładowo, jeśli chcemy użyć zielonego koloru na czarnym tle, musimy użyć liczb 32 i 40 (echo -e "\033[32;40m"
). Wiedząc w jaki sposób możemy kolorować tekst w konsoli możemy napisać proste skrypty kolorujące logi systemowe.
Loco oraz CCZE
Oczywiście nic nie stoi na przeszkodzie, aby wykorzystać już istniejące aplikacje do kolorowania logów. Pierwszą z nich jest program napisany w języku C o nazwie CCZE. Program jest modularny dzięki czemu za pomocą odpowiednich pluginów może kolorować logi z takich aplikacji lub usług jak:
- apm
- exim
- fetchmail
- httpd
- postfix
- procmail
- squid
- syslog
- ulogd
- vsftpd
- xferlog
- i wiele, wiele więcej
Uruchomienie kolorowania logów za pomocą tej aplikacji jest bardzo proste. Wystarczy na końcu polecenia, którym przeglądamy logi opisać | ccze
.
tail -100f /var/log/auth.log | ccze
Taki efekt powinniśmy uzyskać:
Możemy również skorzystać ze skryptu napisanego w języku Perl, którego autorem jest Jules Stuifbergen. Chodzi tutaj o skrypt loco. Wykorzystuje on moduł Perla zwany Term::ANSIColor
do kolorowania tekstu. Również tutaj uruchomienie skryptu jest bardzo proste:
tail -100f /var/log/auth.log | perl loco
Taki efekt powinniśmy uzyskać:
Tego typu rozwiązań w Internecie znajdziemy jeszcze dość dużo. Tak czy siak, najlepiej jest napisać własne kolorujące skrypty, które pomogą nam w przeglądaniu logów.
"bez użycie dodatkowych kolorów"
Nie powinno być bez użycia …
Naprawione ;-) W sumie mógłbym dopisać jakiś skrypt co koloruje logi w Bashu :P
świetny tekst, Kamil. Jak tylko znajdę chwilkę czasu, to się tym pobawię :)
Ja sam pisałem o modyfikacji basha. PS1, kolorki, przywitanie.
Zmienianie PS1 też jest ciekawe ;) Mogę wrzucić Twójego arta tutaj jak chcesz ;-)