Konsola linuksowa – przykłady praktycznych skryptów

Kilka przydatnych skryptów, jeden pozwala na powiadomienie mail-em gdy dysk się przepełnia, drugi modyfikuje firewall-a na podstawie pliku tekstowego, kolejny robi proste backupy.

Contents

Wysyłanie maila gdy pliki przekroczą określoną procentową powierzchnie dysku

Celem skryptu jest poinformowanie administratora, jeżeli jakiejś partycji grozi przepełnienie. Pozwoli mu to odpowiednio zareagować na potencjalne niebezpieczeństwo. Skrypt korzysta z języka powłoki oraz języka awk służącego do obrabiania danych tekstowych.

#! /bin/bash

FREE=`df | grep /dev | awk '{ if ($5 > 95) print $0  }'`

if [ "$FREE" != "" ]
then
 echo "AV za duzo miejsca zajete....  " $FREE | mail -s "AV: grozba zapelnienia dysku!" krzysztof@linuxexpert.pl

Dodawanie do firewalla reguł blokujących hosty wylistowane w pliku

Czasem się może zdarzyć iż na podstawie logów systemowych (np. pocztowych) chcesz wyblokować określone komputery. Poniższy skrypt będzie blokował komputery wymienione w określonym pliku jedynie do kolejnego restartu firewalla.

#! /bin/sh

## Cięcie adresów z listy zakazanych pocztowych

ADRESY=`cat ./hosty.txt`

##echo "#/bin/sh " > sprawdz.sh
#chmod 700 sprawdz.sh

#NAZWA="";

for  ADRES in $ADRESY
do
    iptables -A INPUT -s $ADRES -j REJECT
done

Skrypt tworzący backupy

Poniższy skrypt wykonuje backup określonych plików w zależności od użytego parametru przy wywołaniu skryptu. Każdy backup ma ściśle określoną nazwę w której zawarta jest data, dzięki czemu łatwo określić kiedy została zrobiona.

KATALOG_KOPII="/data/backupy/system"
DATA=`date '+%Y-%m-%d'`
KOMPUTER="AV_NEW"
SERWER_BACKPOW="192.168.12.1"
MAIL="krzysztof@linuxexpert.pl"

### skrypt
## stworzenie katalogu i wejście do niego
cd $KATALOG_KOPII 2>/dev/null || mkdir -p $KATALOG_KOPII/dane
cd $KATALOG_KOPII

echo '---------------------------------------------------' > $KATALOG_KOPII/log.log
echo 'Start : $KOMPUTER ' >> log.log
echo $DATA >> log.log
mkdir -p $KATALOG_KOPII/dane/$DATA

if [ "$1" == "" ]
then
    echo "uzycie: kopia_ziutus2 calosc|system|klient"
fi

if [ "$1" == "calosc" ]
then
    echo "Robie kopie calosciowa -nowy skrypt";
    tar -cvzf $KATALOG_KOPII/dane/$DATA/$DATA.$KOMPUTER.calosc.tgz / -X /etc/backup/opusc_pelna.txt
#    ssh backupy@192.168.12.1 mkdir -p /backup/$KOMPUTER/calosc
#    scp $KATALOG_KOPII/dane/$DATA/$DATA.$KOMPUTER.calosc.tgz backupy@192.168.12.1:/backup/$KOMPUTER/calosc/$DATA.$KOMPUTER.calosc.tgz

echo 'Koniec : kopia ALL1' >> log.log;
fi

if [ "$1" == "klient" ]
then
    echo "Robie kopie danych klienckich";
    tar -czf $KATALOG_KOPII/dane/$DATA/$DATA.$KOMPUTER.klient.tgz -T /etc/backup/klient.txt;
#    ssh backupy@192.168.12.1 mkdir -p /backup/$KOMPUTER/klient
#    scp $KATALOG_KOPII/dane/$DATA/$DATA.$KOMPUTER.klient.tgz backupy@192.168.12.1:/backup/$KOMPUTER/klient/$DATA.$KOMPUTER.klient.tgz
    echo 'Koniec : klient ALL1' >> log.log;
fi

if [ "$1" == "binaria" ]
then
    echo "Robie kopie danych binaria";
    tar -czf $KATALOG_KOPII/dane/$DATA/$DATA.$KOMPUTER.binaria.tgz -T /etc/backup/binaria.txt     
#    ssh backupy@192.168.12.1 mkdir -p /backup/$KOMPUTER/binaria/
#    scp $KATALOG_KOPII/dane/$DATA/$DATA.$KOMPUTER.binaria.tgz backupy backupy@192.168.12.1:/backup/$KOMPUTER/binaria/$DATA.$KOMPUTER.binaria.tgz
    echo 'Koniec : binaria' >> log.log;
fi

## koniec skryptu
echo 'Stop :' >> log.log
echo '---------------------------------------------------' >> log.log

Wykonywanie poleceń z uprawnieniami użytkownika root na zdalnej maszynie

Czasem wygodnie jest stworzyć silnie zabezpieczoną maszynę, z której będą wypływały polecenia sterujące pracą innych hostów.

#! /bin/bash

ssh backupy@192.168.12.1 sudo /srbin/backup2.sh calosc

Skrypt ściągający automatycznie backupy utworzone w poprzednim punkcie

#! /bin/sh

###zmienne
DATA_Z=`date '+%Y-%m-%d'`

KATALOG_KOPII_ZDALNY="/data/backupy/system/dane"
KATALOG_KOPII_LOKALNY="/backup/AV/"
KOMPUTER_ZDALNY="192.168.12.1"
KOMPUTER="AV_NEW"
MAIL="krzysztof@linuxexpert.pl"

### skrypt
## stworzenie katalogu i wejście do niego
cd $KATALOG_KOPII 2>/dev/null || mkdir -p $KATALOG_KOPII/dane
cd $KATALOG_KOPII

if [ $1 == "" ]
then
    scp backupy@$KOMPUTER_ZDALNY:$KATALOG_KOPII_ZDALNY/$DATA_Z/$DATA_Z.$KOMPUTER.calosc.tgz /backup/AV/$DATA_Z.$KOMPUTER.calosc.tgz
else
    scp backupy@$KOMPUTER_ZDALNY:$KATALOG_KOPII_ZDALNY/$1/$1.$KOMPUTER.calosc.tgz /backup/AV/$1.$KOMPUTER.calosc.tgz

fi

Dodaj komentarz