Mając za sobą naukę
podstaw obsługi
shella poczytaj o tworzeniu samodzielnych skryptów. Pragnę
zaznaczyć, że nie jestem autorem większości opisanych poniżej
przykładów. Znalazłem je w Internecie,
książkach. Zebrałem je w jednym miejscu z czysto praktycznych
powodów - by w łatwy sposób móc szybko sobie przypomnieć jakieś
zagadnienie.
Shell czyli
interpreter poleceń tekstowych przyjmuje
wpisy "z palca" (tzn. bezpośrednio wklepane na klawiaturze i
zatwierdzone klawiszem ENTER) oraz odczytuje takie same zlecenia z
pliku tekstowego, w którym na samej górze (w pierwszym wierszu)
umieszczono tekst:
#!/bin/sh (lub jeżeli
używasz
shella BASH:
#!/bin/bash ). Oczywiście
taki plik musi mieć prawo do wykonania (rw
x),
które nadasz zleceniem np.
chmod 711 nazwapliku.
Więcej o prawach na sąsiedniej
stronie.
Skrypt odpalamy na różne sposoby:
- będąc w katalogu ze skryptem wpisujemy nazwę shella, potem spację i nazwę skryptu, czyli w praktyce:
sh nazwa_skryptu
/bin/sh nazwa_skryptu
/bin/bash nazwa_skryptu
Uwaga: można tak odpalić skrypt, w którym nie wpisano nagłówka #!/bin/sh
- będąc w katalogu ze skryptem wpisujemy nazwę skryptu (czasami
programy wykonywalne uruchomimy dodając znaczek ./ przed nazwą pliku czyli w praktyce
./nazwaskryptu
- wpisując pełną ścieżkę dostępu (plus nazwę pliku-skryptu) czyli
w praktyce:
/home/antek/nazwaskryptu
- umieszczając wszystkie skrypty w jednym katalogu np.
/home/antek/bin i ustawiając zmienną PATH . Takie rozwiązanie jest
najwygodniejsze, gdyż od tej chwili wystarczy wpis nazwaskryptu zatwierdzony klawiszem
ENTER.
- za pomocą crona
- poprzez umieszczenie w pliku /home/antek/bashrc lub
.bash_profile wiersza /home/antek/nazwaskryptu lub ~/nazwaskryptu lub $HOME/nazwaskryptu - w tym przypadku skrypt zostanie odpalony po zalogowaniu. Zapraszam na sąsiednią stronę.
- Za pośrednictwem programu nohup, czyli w praktyce: nohup nazwapolecenia. Tak uruchomione polecenie/skrypt będzie wykonywało swoje zadanie nawet po wylogowaniu (system oczywiście nadal musi działać, a komputera nie wolno wyłączać ;) Na koniec prac szukaj w katalogu domowym pliku nohup.out
Przykłady
Tworzenie archiwum tar.
Zamiast wklepywać zlecenie tar
o treści:
tar -zcf /home/antek/Desktop/`date
+%Y.%m.%d.%H.%M.%S`.tar /var/log
polecam utworzyć skrypt
rc.archiw (do pobrania z mojego archiwum). Można go będzie odpalić osobiście lub za
pomocą crona. Skrypt wykona nam archiwizację katalogu
/var/log , w nazwie paczki tar umieści datę oraz godzinę
archiwizacji, zaś samą paczkę umieści na Desktopie usera
antek. Więcej na temat tego skryptu tutaj.
Pamiętaj, by skrypt miał prawo do wykonania.
Zliczanie plików w wybranym katalogu
Aby mieć większą kontrolę nad zawartością ważnych katalogów, można samodzielnie sprawdzać, czy zmieniła się liczba plików. Zamiast wklepywać zlecenie: ls -aA1 | wc -l (małe L) można utworzyć skrypt o podobnej budowie:
#!/bin/sh
ls -aA1 | wc -l
Wyjaśnienie budowy zlecenia: ls -aA1 | wc -l
ls czyli listowanie. Parametr a spowoduje wylistowanie wszystkich plików, także ukrytych. Parametr A nie pozwoli na wyświetlenie katalogów: własnego i nadrzędnego. Parametr 1 zmusi do wyświetlenia jednej nazwy pliku w jednym wierszu-linii. Teraz wystarczy policzyć ilość wyświetlonych linii, dlatego za pomocą znaczka | uruchomimy tzw. potok, czyli przekierowanie wyników pierwszego zlecenia do następnego zlecenia.
wc -l zlicza ilość wierszy
Jeżeli chcemy policzyć ilość plików we wskazanym katalogu, to wpiszemy:
ls -aA1 /nazwakatalogu | wc -l
Jeżeli chcemy policzyć ilość plików o rozszerzeniu txt we wskazanym katalogu, to wpiszemy:
ls -aA1 /nazwakatalogu/*.txt | wc -l
Pamiętaj, by skrypt miał prawo do wykonania.
Jak wymusić, by skrypt zadziałał tylko pod userem root
Poza zwykłym nadaniem praw dla naszego skryptu, można tak zbudować skrypt, by w przypadku uruchomienia go przez zwykłego usera pojawił się komunikat błędu NIE JESTES ROOTEM, WIEC SPADAJ GOSCIU OD TEGO SKRYPTU. Skrypt powinien mieć budowę:
#!/bin/sh
if [ "$(whoami)" != "root" ] ; then
echo "NIE JESTES ROOTEM, WIEC PA, PA." >&2
exit 1
fi
ls -aA1 | wc -l >>zliczanie.txt
exit 0
Wyjaśnienie budowy skryptu:
if [ "$(whoami)" != "root" ] ; then czyli: jeżeli wynik zlecenia whoami nie brzmi root, to...
echo "NIE JESTES ROOTEM, WIEC PA, PA." >&2 za pomocą zlecenia echo pokaż komunikat: NIE JESTES ROOTEM, WIEC PA, PA.
ls -aA1 | wc -l >>zliczanie.txt czyli jakieś zlecenie, w naszym przypadku omówione powyżej zliczanie plików. Przekierowanie wyników zlecenia do pliku zliczanie.txt za pomocą >> umożliwia dopisanie wartości (znaczek > wyczyszcza plik i wpisuje ostatnią wartość).
Pamiętaj, by skrypt miał prawo do wykonania.
Poprawianie wyglądu shella podczas logowania.
Na sąsiedniej stronie opisałem sposoby
poprawiania widoku shella. Polecam jeden punkt: skrypt powitanie.
Za jego pomocą zmusimy shella, by tuż po zalogowaniu powitał nas,
pokazał datę i sprawdził pocztę. Oczywiście skrypt zostanie
uruchomiony za dzięki wpisowi w pliku ~/bashrc .Więcej na
ten temat tutaj.
Budowa skryptu powitanie:
#!/bin/sh#czyli
konfiguracja shella dla skryptu
echo 'JESTES NA KOMPUTERZE: '#czyli wywietlenie komunikatu JESTEŚ...
cd /bin;./hostname#czyli uruchomienie zlecenia hostname (wyświetli się nazwa
naszego komputera)
echo ' '#czyli
jeden pusty wiersz
echo 'DZISIAJ MAMY: '
cd /bin;./date
echo ' '
echo 'sprawdzam poczte... '
mail
echo ' '
Pamiętaj, by skrypt miał prawo do wykonania.
Czyszczenie cache przeglądarki Galeon.
Zamiast wklepywać zlecenie:
rm -rf
/home/antek/.galeon/mozilla/galeon/Cache
można utworzyć skrypt
cachegaleon i
odpalać go poprzez umieszczenie w pliku
/home/antek/.bash_profile lub bashrc wiersza /home/antek/cachegaleon lub ~/cachegaleon lub $HOME/cachegaleon
. Wówczas czyszczenie cache przeglądarki Galeon odbędzie się
automatycznie tuż po zalogowaniu usera antek.
Zawartość skryptu: cachegaleon
#!/bin/bash
rm -rf $HOME/.galeon/mozilla/galeon/Cache
Zlecenie rm -rf posiada opcje: r czyli rekurencyjnie (z podkatalogami) oraz f czyli force (kasuje bez pytania o zgodę na kasowanie
poszczególnych plików). Jeżeli bedziesz chciał jednocześnie
skasować zawartość katalogu /home/antek/tmp wystarczy dodać
kolejny wiersz:
rm -rf $HOME/tmp
Pamiętaj, by skrypt miał prawo do wykonania.
Aby skasować automatycznie dane innych programów okienkowych KDE, należy w skrypcie ustalić inną ścieżkę dostępu (znaczek tyldy ~ symbolizuje katalog domowy usera np. /home/antek/):
- Konqueror (lista odwiedzonych stron w pasku adresu):
~/.kde/share/config/konq_history/*
~/.kde/share/apps/konqueror/konq_history
- Kosz na Pulpicie
~/.local/share/Trash/files/
~/.local/share/Trash/info
- Pliki tymczasowe
~/.kde/tmp-localhost/
- tmp (obrazki)
~/.thumbnails/normal/
~/.thumbnails/large/
- tmp (obrazki)
~/.kde/cache-localhost/background/
- Konfigi Kaffeine
~/.kde/share/apps/kaffeine/*
- Komunikator Kopete (archiwa rozmów na protokole Gadu-Gadu)
~/.kde/share/apps/kopete/logs/GaduProtocol/numerGG/*
- katalog z plikami zawierajacymi maile (Kmail)
~/.kde/share/apps/kmail/mail/inbox/cur/
~/.kde/share/apps/kmail/mail/sent-mail/cur/
- Ważny plik zapisujący historię poleceń w shellu
~/.bash_history
- Pozycjonowanie ikon na Pulpicie
~/.kde/share/apps/kdesktop/IconPositions
Automatyczne zapisywanie (archiwizowanie) stron
www.
Czasami musisz regularnie tworzyć kopię strony www (np. z
notowaniami kursu walut - raz dziennie). Zamiast wklepywać
zlecenie:
lynx -source http://adres/gielda/index.html
>/home/antek/gielda/waluty_`date +%Y.%m.%d.%H.%M.%S`.html
można utworzyć skrypt o tej samej treści i odpalać go poprzez CRON.
Przyjmuję, że masz w swoim Linuksie zainstalowaną przeglądarkę
tekstową LYNX.
Zawartość skryptu:
#!/bin/bash
lynx -source http://adres/gielda/index.html
>/home/antek/gielda/waluty_`date +%Y.%m.%d.%H.%M.%S`.html
Zlecenie wykorzystuje przeglądarkę LYNX z opcją
-source (dokładne wyświetlenie źródła strony) lub dump (opcja ta generuje tekst bez źródła html). Następnie
poprzez "przekierowanie potoku" za pomocą znaczka > jest
tworzony plik *.html z zawartością zlecenia lynx -source (czyli
pełnego kodu html ze wskazanej strony) lub jest
tworzony plik *.txt z zawartością zlecenia lynx -dump (czyli
treści strony html, ale bez jej formatowania html). Znaczek ` znajduje się na
klawiszu z ~tyldą (lewy, górny klawisz).
Pamiętaj, by skrypt miał prawo do wykonania.
Prosty przykład korzystania ze zmniennych
wewnętrznych.
Skrypt powitanie wyświetla komunikat
żądający wpisu imienia, potem nazwiska, zapamiętuje te dwie zmienne
wewnętrzne i dokonuje ich przetworzenia w najprostszy sposób, czyli
poprzez wyświetlenie komunikatu. Skrypt zawiera polecenia: echo , read.
Zawartość skryptu powitanie
#!/bin/bash
echo -e "Podaj swoje imię: \c"
read imie
echo -e "Podaj swoje nazwisko: "
read nazwisko
echo "Witaj, " $imie $nazwisko
Pamiętaj, by skrypt miał prawo do wykonania.
Polecam stronę:
http://binboy.sphere.pl/index.php?show=107