Automatyzacja zadań przy pomocy skryptów bash jest nieoceniona w przypadku gdy trzeba cyklicznie wykonać jakieś polecenie. Przykład takiego zadania to wyszukanie wszystkich aktywnych hostów w sieci przy użyciu polecenia ping (oraz narzędzia fping). W tym przykładzie zakładamy, że host może być nieaktywny w dwóch przypadkach - brak zasilania, - kłopoty z siecią. Więcej szczegółowych informacji o narzędziu ping znajduję się na stronach wilipedii. PING.
Skrypt wyszukujący wszystkie aktywne hosty w podanej sieci
for ip in 192.168.0.{1..255};
do
ping $ip -c 2 &> /dev/null;
if [ $? -eq 0 ];
then
echo $ip jest aktywny
fi
)
done
Zasada działania powyższego narzędzia jest bardzo prosta. Narzędzie PING odpytuje każdego hosta z puli adresów jakie znajdują się w pętli "for" czyli od 192.168.0.1 do 192.168.0.255. Przełącznik " -c 2 " służy do ograniczenia wywołania echa do 2 razy. Zapis 2 $> /dev/null przekierowuje błędy stderr jak i standardowe wyjście stdout co ogranicza wyświetlenie danych w oknie terminala do tych najbardziej interesujących. Ciąg $? określa status wyjścia. Jeżeli polecenie zakończyło się pomyślnie status wyjściowy wynosi 0 w innym wypadku jego wartość jest niezerowa, przez co wyświetlone zostaną adresy IP z jakimi udało się nawiązać połączenie.
Skrypt nie należy do najszybszych. Nieco szybsza wersja wygląda następująco:
#!/bin/bash
for ip in 192.168.0.{1..255};
do
(
ping $ip -c 2 &> /dev/null;
if [ $? -eq 0 ];
then
echo $ip jest aktywny
fi
)&
wait
done
W tym przypadku wszystkie polecenia ping zostają uruchomione równolegle co znacznie skraca czas działania skryptu. Umieszczenie pętli w nawiasie zakończonym znakiem & powoduję wykonanie jej w podpowłoce, a znak & umieszcza podpowłokę w tle oraz powoduję opuszczenie aktualnego wątku. Zawartość pętli for wykonana zostaje w wielu podpowłokach w tle. Komenda "wait" powoduję iż skrypt zakończy się dopiero w momencie zakończenia wszystkich procesów podrzędnych wykonywanych w tle.
Dużo szybciej z narzędziem FPING
Narzędzie fping umożliwia jednoczesne wysłanie pakietów do listy adresów IP oraz natychmiastowe uzyskanie odpowiedzi. W tym przypadku różnice w szybkości jest bardzo widoczna. Strona domowa projektu : http://fping.org/.
Pobieranie pakietu w zależności od wersji systemu:
## For RHEL/CentOS 6.3-6.0 32-Bit OS ## # wget http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.i686.rpm ## For RHEL/CentOS 5 32-Bit OS ## # wget http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.i386.rpm ## For RHEL/CentOS 4 32-Bit OS ## # wget http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.i386.rpm
## For RHEL/CentOS 6.3-6.0 64-Bit OS ## # wget http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.x86_64.rpm ## For RHEL/CentOS 5 64-Bit OS ## # wget http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.x86_64.rpm ## For RHEL/CentOS 4 64-Bit OS ## # wget http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.x86_64.rpm
Instalacja pakietu w zależności od wersji systemu
## For RHEL/CentOS 6.3-6.0 32-Bit OS ## # rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.i686.rpm ## For RHEL/CentOS 5 32-Bit OS ## # rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.i386.rpm ## For RHEL/CentOS 4 32-Bit OS ## # rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.i386.rpm
## For RHEL/CentOS 6.3-6.0 64-Bit OS ## # rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el6.rf.x86_64.rpm ## For RHEL/CentOS 5 64-Bit OS ## # rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el5.rf.x86_64.rpm ## For RHEL/CentOS 4 64-Bit OS ## # rpm -ivh http://pkgs.repoforge.org/fping/fping-3.1-1.el4.rf.x86_64.rpm
Dostępne opcje :
- -a - Wyświetlone zostaną osiągalne - dostępne IP hostów
- -u - Wyświetlone zostaną nieosiągalne - niedostępne hosty
- -g - wygenerowanie zakresu adresów IP w notacji 192.168.1/24
Tak więc na potrzeby tytułowego wyszukania hostów stosujemy polecenie :
# fping -a 192.168.1/24 -g 2> /dev/null
Komentarze
Prześlij komentarz