Bash

Poradnik Bash Bushidō cz. VI – hakierska sygnaturka

Korzystając z sieci typu P2P (np. Torrent), zdarza nam się pobrać zawartość, w której jest plik README. W pliku tym z reguły znajdziemy informację à propos osoby lub grupy, która tę zawartość przygotowała lub udostępniła. W tej części Bash Bushidō zajmiemy się tematem wypisywania tekstu na ekran – oczywiście w niecodzienny sposób. Jest to najlżejsza część naszej drogi wojownika.

Korzystając z sieci typu P2P (np. Torrent), zdarza nam się pobrać zawartość, w której jest plik README. W pliku tym z reguły znajdziemy informację à propos osoby lub grupy, która tę zawartość przygotowała lub udostępniła. W tej części Bash Bushidō zajmiemy się tematem wypisywania tekstu na ekran – oczywiście w niecodzienny sposób. Jest to najlżejsza część naszej drogi wojownika. Na końcu pozwolę sobie zdradzić czytelnikom mały sekret :)

Banner

Program banner poznałem na szkoleniu dobre kilka lat temu. Służył on wykładowcom do komunikowania się przy pomocy rzutnika. Sam program jest tak stary, że czytając jedną ze starszych implementacji oraz patrząc na warunkowe kompilacje, (program jest napisany w C, za warunkowe kompilacje odpowiada preprocesor) zrozumiałem, że przede mną jest kod nadający się do repozytorium Debian Stable muzeum. Sam banner, zgodnie ze swoją nazwą, wypisuje na wyjście banner (większe litery).

Instalacja pakietu zawierającego banner wymaga repozytorium EPEL.

sudo yum install -y epel-release && sudo yum install -y banner

Przykładowa wiadomość:

[root@localhost]$ banner "OBIAD 13?"

#######  ######   ###     #     ######           #     ###    #####   
#     #  #     #   #     # #    #     #         ##    #   #  #     #  
#     #  #     #   #    #   #   #     #        # #        #        #  
#     #  ######    #   #     #  #     #          #     ###      ###   
#     #  #     #   #   #######  #     #          #        #     #     
#     #  #     #   #   #     #  #     #          #    #   #           
#######  ######   ###  #     #  ######         #####   ###      #

FIGlet

FIGLet jest programem, który pomoże wygenerować naszą hakierską sygnaturkę. Sama nazwa pochodzi o autorów programu (ich imion i „letters”, czyli z angielskiego „litery”). Jak mówi jego manual – wyświetla on duże litery stworzone ze zwyczajnych znaków.

Instalacja w EuroLinuksie i innych Linuksach z rodziny Enterprise:

sudo yum install -y epel-release && sudo yum install -y figlet

Przykładowy Figlet dla naszej grupy hakierskiej.

Alex@rrw ~ ➞ figlet "GNU/hackers"
  ____ _   _ _   _   ___                _                 
 / ___| \ | | | | | / / |__   __ _  ___| | _____ _ __ ___ 
| |  _|  \| | | | |/ /| '_ \ / _` |/ __| |/ / _ \ '__/ __|
| |_| | |\  | |_| / / | | | | (_| | (__|   <  __/ |  \__ \
 \____|_| \_|\___/_/  |_| |_|\__,_|\___|_|\_\___|_|  |___/

Co ciekawe figlet posiada wbudowane wsparcie dla dedykowanych fontów. Są one zapisane w plikach z rozwinięciem flf. By zobaczyć domyślne fonty, możemy użyć następującego jednolinijkowca.

[Alex@SpaceShip ~]$ rpm -ql figlet | grep flf | sed 's:.*/::' | sed "s/.flf//"
banner
big
block
bubble
digital
ivrit
lean
mini
mnemonic
script
shadow
slant
small
smscript
smshadow
smslant
standard
term

Wykorzystujemy tutaj fakt, iż pakiety RPM zawierają listę plików, które dostarczają, reszta to obróbka danych.

Mając już wszystkie dostępne czcionki, możemy zrobić test. Poniższy skrypt wyświetli nam wszystkie czcionki z napisem „lorem ipsum”.

#!/bin/bash
for i in $(rpm -ql figlet | grep flf | sed 's:.*/::' | sed "s/.flf//");
do
    echo "Czcionka: $i"
    figlet -f  "$i" "Minus dolor labore eos eveniet ducimus vel." ;
    echo -e "\n\n"
done

Ciekawostka ze świata DuckDuckGo – jedną z funkcji wyszukiwarki przygotowanej przez DuckDuckHack Community jest figlet. Wystarczy więc wpisać w pasek wyszukiwania DDG figlet FooBar, by dostać nasz napis w stylu figlet.

Cowsay

Następną, dobrze znaną metodą wypisywania, jest program cowsay – czyli z ang. krowamówi. Co, jak sama nazwa nam podpowiada, wypisze krowę, która w jakiś sposób będzie chciała nam przekazać wiadomość.

Nie wszyscy użytkownicy cowsay zdają sobie sprawę z tego, że razem z cowsay mamy z reguły cowthink (ang. krowamyśli) oraz wiele innych trybów pracy tego programu, łącznie z możliwością używania różnych obrazków.

cowsay możemy zaczerpnąć z repozytorium EPEL:

sudo yum install -y epel-release && sudo yum install -y cowsay

Przykładowe cowsay:

[Alex@SpaceShip ~]$ cowsay ala ma kota
 _____________
< ala ma kota >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Niektóre tryby pracy (zmieniają oczy i/lub język naszej krowy), można je łączyć z niektórymi fontami (obrazkami).

-b tryb Borg
-d martwa krowa
-g tryb chciwej krowy
-s krowa jest „zjarana” (ang. stoned)
-t tryb, w którym nasza krówka jest zmęczona
-w tryb nakręconej krowy
-p krowa w paranoi
-y tryb, w którym krowa wydaję się młodsza.

Jak już wspomniałem wyżej, istnieje możliwość używania innych obrazków. Poniżej mamy kilka przykładów:

[Alex@SpaceShip ~]$ cowsay -f tux Linux
 _______
< Linux >
 -------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
cowsay -f surgery Where are my testicles, Summer?
 _________________________________
< Where are my testicles, Summer? >
 ---------------------------------
          \           \  / 
           \           \/  
               (__)    /\         
               (oo)   O  O        
               _\/_   //         
         *    (    ) //       
          \  (\\    //       
           \(  \\    )                              
            (   \\   )   /\                          
  ___[\______/^^^^^^^\__/) o-)__                     
 |\__[=======______//________)__\                    
 \|_______________//____________|                    
     |||      || //||     |||
     |||      || @.||     |||                        
      ||      \/  .\/      ||                        
                 . .                                 
                '.'.`                                

            COW-OPERATION                           

Same pliki obrazków są zlokalizowane w /usr/share/cowsay i mają rozszerzenie .cow. Poniższy skrypt iteruje po wszystkich plikach obrazków. Parametr -W ustawia szerokość ekranu, w naszym przypadku na 100 znaków:

for i in /usr/share/cowsay/*cow; do
    cowsay -W 100 -f "$i" "I'm using: $i"
done

Ansible a cowsay

Ansible posiada w sobie irytujący „easter egg”, czyli dowcip w oprogramowaniu/grze. W momencie, kiedy na systemie jest zainstalowany cowsay, następne kroki wykonania naszego playbooka są nam przekazywane przez cowsay, czyli krowę. W celu zmiany tego zachowania możemy ustawić flagę nowcows = 1 w ansible.cfg. Jeśli chcielibyśmy ustawić to globalnie, możemy wyedytować /etc/ansible/ansible.cfg.

Więcej na ten temat znajdziemy w jednym ze śmieszniejszych wątków, jakie zdarzyło mi się czytać na GitHubie.

https://github.com/ansible/ansible/issues/10530

Lolcat

Lolcat w slangu oznacza śmieszny obrazek z kotem. Dla przykładu „grumpy cat” – czyli w bardzo swobodnym tłumaczeniu „zrzędny kot”, był swojego czasu bardzo popularnym internetowym fenomenem.

lolcat to także program, którego możemy użyć z linii komend. Jest to gra słów i znaczeń. Słów, bo połączenia wyrażenia lol i unixowego programu cat. Znaczeniowo, gdyż oznacza właśnie obrazek ze śmiesznym obrazkiem. Sam program napisany jest w Ruby. Pozwolę go sobie zainstalować z pomocą menadżera pakietów rubiego gem. Celem lolcata jest wypisanie teksu na ekran w kolorowy sposób.

Instalacja:

sudo yum install rubygems -y && gem install lolcat

lolcat może być używany jak normalny cat. Jeśli chodzi o jego przełączniki, to moim ulubionym jest -a, który wypisując każdą linię, tworzy kolorową animację zmiany koloru.

NMS

NMS – No More Secret – to polecenie, które „szyfruje” tekst, a następnie przedstawia go w animacji rozszyfrowania, naśladując film „Sneakers”.

Instalacja na EuroLinuksie w wersji 7 ogranicza się do wykonania kilku komend:

sudo yum install -y @development # gcc, git i make
git clone [email protected]:bartobri/no-more-secrets.git
cd no-more-secrets
make all
sudo make install

Użyteczną flagą jest -a czyli autodecrypt. Wtedy odszyfrowanie pliku odbywa się bez oczekiwania na naciśnięcie przycisku.

Mały osobisty sekret – czyli jak wita mnie terminal

W celu dobrego nastawienia się do pracy, za każdym razem, gdy otwieram nową konsolę (sesje powłoki), automatycznie wykonuje się skrypt witający moją osobę.

W Bashu dodałem następujące do .bashrc.

bash_greeting(){
   banner -s "Welcome Alex!" | lolcat  
}
# Tutaj są wszystkie ustawienia
bash_greeting

Z kolei powłoka Fish posiada wbudowaną funkcję fish_greeting, którą nadpisuję w pliku /.config/fish/config.fish. Jej wywołanie nie jest konieczne, Fish zrobi to za nas.

function fish_greeting
    banner -s "Welcome Alex!" | lolcat
end

Zakończenie

Na koniec chciałbym po raz kolejny podziękować Państwu za spędzenie czasu na naszym blogu. Następne Bash Bushidō będzie już dotyczyć trudniejszego technicznie tematu, jakim jest debugowanie i ustawianie pułapek.

Autorzy

Artykuły na blogu są pisane przez osoby z zespołu EuroLinux. 80% treści zawdzięczamy naszym developerom, pozostałą część przygotowuje dział sprzedaży lub marketingu. Dokładamy starań, żeby treści były jak najlepsze merytorycznie i językowo, ale nie jesteśmy nieomylni. Jeśli zauważysz coś wartego poprawienia lub wyjaśnienia, będziemy wdzięczni za wiadomość.