Jeden ze skrypów jakich używam:
/usr/bin/w8
Kod: Zaznacz cały
#!/bin/bash
if [ `echo "$@" | grep " -h " | wc -l` -ge 1 -o `echo "$@" | grep " --help " | wc -l` -ge 1 ]; then
echo "Użycie:"
echo "$0 -h wyswietla pomoc"
echo "$0 nazwa czeka aż skończy się proces o nazwie 'nazwa'"
echo "$0 -v nazwa czeka aż nie znajdzie procesu o nazwie 'nazwa'"
exit 0;
fi
if [ $# -ne 1 -a $# -ne 2 ]; then
echo "Niepoprawna ilość paramertów!";
$0 -h
exit 1;
fi
if [ $# -eq 1 ]; then
while [ `pgrep $1 | wc -l` -ge 1 ]; do
sleep 0.1;
done
elif [ $# -eq 2 -a "$1" = "-v" ]; then
until [ `pgrep $2 | wc -l` -ge 1 ]; do
sleep 0.1;
done
else
echo "Błędne parametry"
$0 -h
fi
Oczywiście dbam o odpowiedniego właściciela (root) i uprawnienia 755 na ten plik. Wiem, że sprawdzanie parametrów nie jest dobrze napisana, ale ważne, że działa
Program ma za zadanie zatrzymać konsolę aż do momentu, aż nie będzie w liście procesów procesu o podanej nazwie, lub póki taki się nie pojawi (parametr -v).
Bardzo przydatne jeśli chcemy obserwować czy pojawił się/zniknął proces o podanej nazwie i później chcemy coś wykonać.
Na przykład:
Kod: Zaznacz cały
$ w8 chrome -v && echo "Ktoś włączył chrome"
$ w8 kadu && echo "Ktoś zamknął ci kadu"
I moje ulubione:
Kod: Zaznacz cały
# w8 aptitude && aptitude install nazwa_pakietu
# w8 apt-get && apt-get install nazwa_pakietu
Jak np. coś już instalujemy i sobie nagle przypomnieliśmy, aby coś doinstalować to wpisujemy to co wyże. (Można zamiast instalacji wybrać dowolną operację)
Programik banalny.
Kolejny z kolekcji:
/usr/bin/klucze
Kod: Zaznacz cały
#!/bin/bash
sudo apt-get update 2> /tmp/keye;
for key in $(grep "NO_PUBKEY" /tmp/keye | sed "s/.*NO_PUBKEY //");
do
echo -e "\nPoszukiwanie klucza: $key";
sudo gpg --keyserver subkeys.pgp.net --recv $key && sudo gpg --export --armor $key | sudo apt-key add -;
done
echo "Zakończono znajdywanie kluczy"
rm /tmp/keye
W konsoli gdziekolwiek:
Aktualizuje nam apt i znajduje klucze do repo.
Kolejne - ogólna struktura menadżerów usług (init.d):
Ważniejsze fragmenty z /etc/init.d/firewall
Plik dla przykładu: /etc/init.d/naszaUsluga
(fragmenty kodu z mojego firewalla)
Kod: Zaznacz cały
#!/bin/bash
# Autor: Kamil Banasiak
# Skrypt /etc/init.d/naszaUsluga
# kody wyjścia programu: # możemy porobić informacje o autorze, kody wyjścia itp.
# 0 - wszystko OK
# 1 - jakiś błąd
# Deklaracja jakiś stałych (jeśli będzie potrzebne)
# na przykład:
TCP_SERVICES="22 66 21"
if ! [ -x /sbin/iptables ]; then
exit 1; # nie ma iptables => wyjdź
fi
firewall_start () {
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Usługi - i np. używamy nasze zadeklarowane stałe:
if [ -n "$TCP_SERVICES" ] ; then
for PORT in $TCP_SERVICES; do
/sbin/iptables -A INPUT -p tcp --dport ${PORT} -j ACCEPT
done
fi
# .....
echo 0 > /proc/sys/net/ipv4/ip_forward
}
firewall_stop () {
/sbin/iptables -F
}
firewall_clear () {
/sbin/iptables -F
/sbin/iptables -t nat -F
/sbin/iptables -t mangle -F
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
}
case "$1" in
start)
echo -n "Starting firewall... "
firewall_clear # na starcie systemu posprzątaj
firewall_start
echo "done."
;;
stop)
echo -n "Stoping firewall... " # wyłączamy firewall - kasujemy reguły
firewall_stop
echo "done."
;;
restart)
echo -n "Restarting firewall... "
#firewall_stop
firewall_clear
firewall_start
echo "done."
;;
clear)
echo -n "Clearing firewall rules... "
firewall_clear
echo "done."
;;
*)
echo "Usage: $0 {start|stop|restart|clear}"
exit 1
;;
esac
exit 0
Pamiętamy aby można uruchomić skrypt (zarządzać usługą) musimy wcześniej:
Ogólna prosta struktura pliku init.d. Raczej podaję nie skrypt, ale szablon do pisania własnych ini.d. Po co pisać własne init.d? Aby ułatwić sobie życie oczywiście.
Linkujemy odpowiednio do rcX.d i mamy firewall na starcie, zamknięciu systemu. (Do linkowania można uzyć np. program chkconfig, lub zwykłym ln).
Dzięki init.d dostajemy możliwość szybkiego dostępu (włączenia, wyłączaenia, restartu..) do zarządzania usługi przez proste:
Kod: Zaznacz cały
sudo services naszaUsluga start|stop|restart|...
Reguły firewall polecam napisać własne, bo to były tylko małe wycinki.
Przykład pisany na podstawie przykładu z jakiejś strony (chyba z dokumentacji debina).
Można w ten sposób napisać np własny init.d do włączania kilku usług na raz.
Np ja korzystam z coś na styl:
/etc/init.d/serwerek
Kod: Zaznacz cały
#!/bin/bash
# Polecam dodatkowo upewnić się, że jesteś root - ale uprawnienia standardowo powinny zabronić uruchomić nie rootowi (700)
if [ `id -g` -ne 0 ]; then echo "Brak uprawień roota. Pa"; exit 1; fi
serwerek_start () {
service apache2 start
service mysql start
service ssh start
# ...
}
serwerek_stop () {
service apache2 stop
service mysql stop
service ssh stop
# ...
}
case "$1" in
start)
echo -n "Starting serwerek... "
serwerek_start
echo "done."
#echo -e "\nApache, MySQL, ssh: started"
;;
stop)
echo -n "Stoping serwerek... "
serwerek_stop
echo "done."
#echo -e "\nApache, MySQL, ssh: stoped"
;;
restart)
echo -n "Restarting serwerek... "
serwerek_stop
serwerek_start
echo "done."
#echo -e "\nApache, MySQL, ssh: restarted"
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
I analogicznie jak wyżej. Możemy wykorzystać do ustawienia dla danego runlevela przez rcX.d (np. za pomocą chkconfig).
Fajne jest, bo jeśli często uruchmiamy/wyłączamy na raz te same usługi to taki własny init.d w sam raz.
Na koniec przykład możliwego comba:
Kod: Zaznacz cały
# service serwerek stop && aptitude upgrade # i sobie przypominamy o starcie serwerka po aktualizacji
# w8 aptitude && service serwerek start && sms 123456789 "treść smsa xD"
# w8 sms && google-chrome localhost