Filtry i Skrypty powłoki Sh

W związku z narastającą liczbą osób, które zwą informatykę 
"czarną magią" przedstawiam listę różnic między 
informatykiem a czarnoksiężnikiem:

Czarnoksiężnik krzyczy "hokus-pokus" i "abra-kadabra".
Informatyk: "bash" "grep" czy "sed"

Czarnoksiężnik odeśle cię do diabła.
Informatyk wyśle cię do /dev/null

Czarnoksiężnik przenosi przedmioty wzrokiem.
Informatyk obsługuje komputer bez myszki.

Czarnoksiężnicy porozumiewają się telepatycznie.
Informatycy używają komunikatorów.

W domu czarnoksiężnika są tajemna komnaty.
W komputerze informatyka są ukryte foldery.

Aby coś było niewidzialne, czarnoksiężnik używa różdżki.
Informatyk dodaje tylko kropkę przed nazwą.

Ogólnie nasi czytelnicy oskarżali się na fakt, że obie grupy społeczne
używają niezrozumiałych słów (zaklęć, poleceń), noszą dziwne ubrania
(szaty, koszulki z napisami), otaczają się nietypowymi przedmiotami
(różdżki w parasolach, pen-drive'y w pluszakach) a co najważniejsze -
posiadają dziwną i niepojętą dla zwykłego śmiertelnika wiedzę tajemną,
pozwalającą im rozwiązywać problemy (o których zasadniczo nikt nie
wie) w sposób, którego nikt nie rozumie.

                               /* nadesłał: Grzegorz Mucha, IS 2012 */

DO PRZYGOTOWANIA

Samodzielnie należy przed tym laboratorium przygotować:

Dodatkowo przeglądnąć (w celu ew. skorzystania w czasie zajęć):

WPROWADZENIE

Rola skryptów w administrowaniu

  • pozwalają na łatwe zautomatyzowanie często wykonywanych zadań,
  • upraszczają administrowanie systemem,
  • umożliwiają dostosowanie narzędzi administracyjnych do swoich celów,
  • jak również stworzenie swoich własnych narzędzi.

Czym są skrypty

  • skrypty są plikami zawierającymi programy w języku skryptowym.
  • ten język jest najczęściej interpretowany,
  • w pewnym stopniu spowalnia to jego pracę,
  • ale ułatwia pisanie i uruchamianie.
  • dostarcza wielu narzędzi „wysokopoziomowych”

Języki i narzędzia do pisania skryptów

Istnieje wiele różnorodnych języków i narzędzi do pisania skryptów. Najpopularniejsze to:

  • Sh,
  • Csh/Ksh,
  • AWK,
  • Perl,
  • Tcl,
  • Python.

Skrypty powłoki Sh

Skrypt sh jest to:

  • plik tekstowy zawierający dowolne polecenia wykonywalne oraz wyrażenia języka sh,
  • nawet prosta sekwencja poleceń, normalnie wydawanych w powłoce sh, zapisana w pliku staje się skryptem.

Uruchamianie pliku skryptu

  • Aby skrypt można było wykonywać bezpośrednio poprzez podanie nazwy, należy nadać mu atrybut wykonywalności (+x).
  • Wykonywalny plik tekstowy zawierający polecenia jest uruchamiany najczęściej przy pomocy powłoki logowania użytkownika.
  • Aby mieć pewność, że skrypt zostanie uruchomiony przy pomocy odpowiedniego interpretera, trzeba to w nim zapisać.
  • Pierwsza linia skryptu powinna mieć postać:
    #!/pelnasciezka/interpreter opcje
  • Co w przypadku skryptów sh wygląda tak:
    #!/bin/sh
  • Od znaku hash (#) zaczyna się komentarze, sekwencja #! na początku pliku jest traktowana jako podanie interpretera.

Przydatne narzędzia

Pisząc skyrpty korzysta się z dowolnych poleceń Unixa. Tym niemniej największą rolę odgrywają zestawy podstawowych narzędzi GNU.

Proszę przeczytać manual do:

  • textutils
  • fileutils
  • sh-utils

Dodatkowo przydatne narzędzia to:

  • find
  • xargs
  • sed
  • awk

Podstawianie wyników pracy poleceń

Podstawianie wyników poleceń w linii poleceń jest realizowane przez odwrotny apostrof (klawisz tyldy, nad tabulatorem), na przykład:

$ echo "To jest system" `uname` "na maszynie "`hostname`

Find

Program find służy do wyszukiwania plików w systemie plików. Podstawowe użycie to:

find sciezka -name nazwapliku -print

Pozwala na zadawanie wielu kryteriów wyszukiwania, łączonych operatorami boolowskimi.

Język Sh

  • Zmienne - podstawy
  • Dowolne polecenia dostępne w systemie
  • Zmienne i polecenia zewnętrzne - odwrócony apostrof,
  • Instrukcje warunkowe: if, test i case,
  • Funkcje
  • Parsing opcji z linii poleceń (przykład parser.sh)
  • Inne…

Szczegóły w artykule Podstawy programowania skryptów Sh

ĆWICZENIA

1 Przydatne narzędzia

Find

Znaleźć przy pomocy find:

  • w katalogu /usr/bin wszystkie pliki o nazwie zaczynającej się na au,
  • w katalogu /tmp wszystkie pliki należące do użytkownika root,
  • w katalogu /tmp wszystkie pliki modyfikowane w ciągu ostatnich 24 godzin,
  • w katalogu /tmp wszystkie pliki zwykłe o uprawnieniach 700.

Podstawianie wyników pracy poleceń

Przy pomocy odwróconego apostrofu (obok Tabulatora!) napisać polecenie przypisujące do zmiennej WYNIK:

  • aktualną datę,
  • napis o treści System pracuje od A, jest zalogowanych B uzytkownikow, gdzie za A i B mają być wstawione odpowiednie informacje z polecenia uptime

Przykład:

WYNIK="To jest system `uname` na maszynie `hostname`"; echo $WYNIK
To jest system Linux na maszynie deathstar

2 Zaawansowane filtry

Napisać filtr, który:

  • wyświetli 7 pierwszych, posortowanych alfabetycznie, nazw plików o nazwie kończącej się na p znajdujących się w katalogu /usr/bin.
  • poda liczbę wszystkich plików zawierających w nazwie słowo ubuntu, znajdujących sie w katalogu /usr/bin.
  • zapisze do pliku spis posortowaną alfabetycznie listę użytkowników aktualnie zalogowanych z komputerów mających początek adresu IP: 192.168.0 (inna opcja to w przypadku wyświetlania nazw domen: w domenie .agh.edu.pl).
  • wybierze z 6 ostatnich linii pliku spis te, które zawierają słowo cos i poda ilość występujących w nich znaków. (plik testowy należy stworzyć).

3 Proste skrypty

Edytory

Oglądnąć jak przebiega edycja w edytorze mcedit i GNU Emacs (w razie potrzeby włączyć: M-x sh-mode i M-x font-lock-mode)

Tworzenie skryptów

Napisać poprawny skrypt, który wyświetli:

  • aktualną datę, nazwę i czas pracy systemu,
  • spis zalogowanych użytkowników i spis sesji osoby uruchamiającej skrypt,
  • wyświetli prawa dostępu do pliku podanego jako parametr z linii poleceń: skrypt plik i poda typ/opis tego pliku
  • do powyższego skryptu dopisać (najlepiej w postaci funkcji) kod sprawdzający czy właściciel pliku jest zalogowany, a jeżeli tak to wyświetli informacje o nim i jego otwarte sesje.
  • napisać skrypt (np. do użycia jako CGI) generujący dynamicznie stronę WWW (plik HTML) o tytule: To jest spis plikow w katalogu KATALOG zawierającą spis i opis plików w podanym z lini poleceń katalogu, na każda pozycja spisu jest hiperpołączniem do odpowiedniego pliku.

4 Złożone skrypty

Przeanalizować działanie skryptów podanych na starej stronie

Jeśli chcesz wiedzieć więcej

  • Napisz skrypt, który dla każdego z plików podanych jako argumenty wywołania wyświetli w kolejnych liniach 3 najczęściej powtarzające się w nim słowa.
  • Napisz skrypt, który dla każdego z plików podanych jako argumenty sprawdzi (np. za pomocą polecenia file) zastosowany na nim typ kompresji, a następnie zastosuje odpowiedni program do rozpakowania go. Jeżeli plik wejściowy nie jest spakowany, skrypt powinien wyswietlić ostrzeżenie i nie podejmować żadnej akcji względem tego pliku.
  • Napisz skrypt, który zarchiwizuje wszystkie pliki z Twojego katalogu domowego zmodyfikowane w przeciągu ostatnich 24 godzin (można użyć polecenia find).
  • Napisz skrypt, który wyświetli po jednym wszystkie pliki z katalogu domowego większe niż 100kB. Dla każdego wyświetlonego pliku skrypt ma zapytać, czy uzytkownik chce skompresować czy usunąć plik, postapić zgodnie z jego wyborem, i przejść do nastepnego pliku. Skrypt ma zapisać do pliku nazwy i czas usunięcia usuniętych plików.
  • Napisz skrypt „bezpiecznego usuwania” srm.sh, który podane jako argumenty pliki skompresuje (o ile już nie są skompresowane - należy to sprawdzić, np. przy pomocy polecenia file) a następnie przeniesie je do folderu /home/user/trash. Przy wywołaniu skrypt powinien sprawdzić folder trash i usunąć z niego pliku starsze niż 48 godzin.
  • Napisz skrypt, który rozwiązuje równanie kwadratowe (przyjmując jako argumenty parametry równania), użyj polecenia bc.
  • Lista mailingowa. Napisz skrypt, uzywając polecenia mail, który zarządza prostą listą mailingową. Skrypt ma za zadanie co miesiąc odczytywać treść zadanego pliku (podanego jako 1.argument) i rozsyłać go adresatom umieszczonym na liście w pliku podanym jako 2. argument.
pl/dydaktyka/unix/lab_skrypty.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0