Kurs pracy w systemie Linux - pracownia

Semestr zimowy 2009/10
poniedziałek 12:15-14:00, sala 137


Informacje:

Pracownia 5.X

Zapoznanie sie z systemem Unix, zadania na stronie kursu (Podstawowe polecenia: help, man, man man)

Pracownia 12.X: Wprowadzenie i emacs

  1. Zapoznać się z podstawowymi możliwościami edytora emacs, przeczytac instrukcje ze strony kursu. Nabyć umiejętność uruchamiania edytora w oknie terminala tekstowego, przechodzenia do końca i początku linii, o słowo, iksaowania słowa, treści do końca wiersza, zamiany całego słowa na duże lub małe litery itp....
  2. Przetestowac i wykorzystywać podstawowe skróty klawiszowe emacsa w bash'u
  3. Zrealizować zadania do 1 pracowni ze strony kursu (bez list ACL).

Pracownia 19.X: Proste skrypty

  1. Stworzyć strukturę podkatalogów o głębokości co najmniej 2 zawierająca poza innymi kilka plików o takiej samej nazwie i dla niektórych takiej samej zawartości. Korzystając z poleceń np. find,sort,uniq,read i potoków: | napisać złożoną instrukcje wypisującą duplikaty plików w sensie tej samej nazwy, występujące w danym poddrzewie katalogów.
  2. Napisać skrypt realizujący powyższe zadanie, który wywołany bez argumentu wypisze sposób poprawnego wywołania, a z argumentem potraktuje go jako nazwe katalogu (intrukcja if). Dodać modyfikacje gdy drugi argument będzie 'md5' to skrypt ma wypisywać duplikaty tylko jeśli pliki będą miały zawartość o tej samej sumie kontrolnej (polecenie md5sum).
  3. Wypisać ciąg liczb parzystych od 0 do 200 przy uzyciu petli while. Można zastosowac zmienne, instrukcje expr, oraz apostrofy `` zwracające wyjście z programu.
  4. Napisać skrypt, który dla danego katalogu, podanego jako argument znormalizuje w nim wszystkie nazwy plików: "*.jpg" "*.Jpg" "*.JPG",... w ten sposób aby zamienić w nazwach wszystkie litery duże na małe (patrz polecenie tr).
  5. Wykonaj polecenie 'ls -l' na wszystkich plikach znalezionych przy pomocy polecenia find z nazwą zgodną ze wzorcem "*.c*". Napisz polecenie na dwa sposoby: find'a z poleceniem -exec i przy użyciu polecenia xargs.
  6. Napisz skrypt liczący sumę wszystkich liczb podanych jako argumenty. Można wykorzystać polecenie shift. Czy potrafisz połączyć skrypt liczący sume z zadaniem 3 tak aby policzyc sume liczb parzystych od 0 do 200 ? Następnie napisz polecenie, które z listy plików (ls -l) wytnie rozmiary plików i zsumuje je za pomocą tego skryptu.

Pracownia 26.X: Zmienne bash i X-windows

  1. Zapoznać się ze zmiennymi środowiskowymi PS1, PATH i ogólnie sposobem ich ustawiania i odczytywania w bash'u (np. man bash (PROMPTING). Zmodyfikować zmienną PS1 tak aby znak zachety (prompt) był aktualny w postaci
    "Witaj: 'nazwa_uzytkownika' w katalogu 'kat biezacy' o godzinie ... >"
    Dodać do zmiennej PATH katalog ~/bin i katalog bieżący tak aby można było wykonywać skrypty bez podawania ścieżki np. zad1.sh zamiast ./zad1.sh
  2. Korzystająć z instrukcji read i petli while napisac skrypt wybierajacy ze standartowego wejscia zadane pola np. 1 i 3 jak np. program cut. Zmieniając znak rozgraniczający pola ze spacji na : przy pomocy zmiennej IFS wypisać na podstawie pliku /etc/passwd nazwy uzytkowników i ich katalogi domowe (pola oddzielic spacja).
  3. Zadania z X windows: 1-5 ze strony kursu (pracownia nr 3) Po wykonaniu zadania 4 przy uruchomionym X przetestuj uruchamianie zarzadcow okienek np. twm, blackbox, fluxbox, metacity.

Pracownia 9.XI: Wyrażenia regularne

Zapoznaj się z programami: grep, tr, sed. Powinienneś potrafić np. zamienić przy pomocy każdego z dwóch ostatnich litery małe na duże lub wybrane.

Wykonaj zadania z 4 listy z kursu dotyczącej wyrażeń regularnych. Zadania 1-4 są do wykonania w trakcie pracowni, zadania 5-8 na następną pracownię. W zadaniu 4 napisz skrypt na nie używając polecenia find, można przedstawić także alternatywne rozwiązanie z find.

Pracownia 23.XI: Bezpieczeństwo, szyfrowanie, podpisy cyfrowe

Wykonaj zadania z 5 listy z kursu. Zadania 1,2,3,5 są do wykonania w trakcie pracowni, zadanie 4 wykonaj w domu.

Pracownia 30.XI: cos innego: openssl

Można pokazać i wytłumaczyć rozwiązania zadań na nastepnych zajęciach.

Pracownia 7.XII: Procesy, sygnały, śledzenie procesów strace

  1. Napisz skrypt, który w petli bedzie cos robił (np. co sekunde wypisywał biezaca godzine). Sprawdz wysyłanie do procesu róznych sygnałów (SIGTERM, SIGINT, SIGQUIT, ale takze SIGFPE, SIGILL), a nastepnie rozbuduj skrypt o przechwytywanie tych sygnałów (trap) i sprawdz, ze to działa. Sprawdz mozliwosc usmiercenia sygnałem SIGKILL procesu, który przechwytuje wszystkie 15 sygnałów.
  2. Sprawdz mozliwosc zawieszania procesu sygnałem SIGSTOP i wznawiania sygnałem SIGCONT. Sprawdz, ze zamiast powyzszych sygnałów mozna wykorzystywac polecenia Ctrl+Z, fg i bg.
  3. Sprawdz wartosci priorytetów procesów i ich liczby nice, a nastepnie przecwicz obnizanie priorytetu pracujacego w tle procesu (nice/renice).
  4. Napisz skrypt A, który uruchomi skrypt potomny B, który zabije proces swojego rodzica (A). Sprawdz (np. poleceniem pstree), czy osierocony proces zostanie poprawnie adoptowany przez proces init.
  5. Nie korzystajac z dobrodziejstw oferowanych przez ulimit, napisz skrypt, który przyjmie 3 parametry: nazwe programu do uruchomienia i dwie liczby naturalne x i y, a nastepnie uruchomi zadany program. Jesli program bedzie działac jeszcze po x sekundach (mozna to sprawdzac np. co sekunde poleceniem ps z odpowiednimi parametrami), to nalezy spróbowac go zabic, wysyłajac mu sygnał SIGTERM. Jesli program bedzie działac nadal po y sekundach, to nalezy go zabic sygnałem SIGKILL. Nastepnie wypróbuj działanie powyzszego skryptu, piszac dwa skrypty do uruchomienia – jeden, który daje sie zabic przez SIGTERM i drugi, który na to nie pozwala.
  6. Uruchom jakiś program np. przeglądarke WWW ze śledzeniem programem strace. Przećwicz podłączania się i śledzenie strace'em już uruchomionego programu, czy jeśteś w stanie śledzić dowolny proces ? Jaki jest powód błędu segmentacji programu core wskazanego przez prowadzącego i jak go mozna wyeliminowac (mamy tylko gotowy program binarny).

Pracownia 14.XII: Procesy, sygnały,.. (ciąg dalszy)

Zadania 8,9 i 11-17 z listy wprowadzenie do procesów

Pracownia 21.XII: Skrypty c.d. bash/awk/...

Zadanie 1 do zrobienia na pracownie, zadanie 2 do oddania na następnymch zajęciach.
  1. Napisz skrypt rysujący choinkę w postaci tekstowej o wysokości zadanej przez parametr N w postaci dla N=3:
                      
            ^
           *|*
          **|**
         ***|***
            | _
    
    Skrypt można napisać w bash'u awk lub też użyć sed'a Oceniana będzie zwartość i czytelność. Ilość punktów będzie zależeć od rozmiaru skryptu (maksimum osiągnie osoba która odda najkrótszy skrypt).
  2. Napisać skrypt generujący galerie obrazków w HTML mając opis w postaci pliku tekstowego w którym mamy w każdej linii dwa pola nazwa pliku i opis oddzielone znakiem ':'. Skrypt powinien generować galerie z plikami HTML z odpowiednimi podpisami i odpowiednio przeskalowanymi plikami graficznymi (przy pomocy np. programu convert z pakietu ImageMagic, lub programów pakietu netpbm: np. pnmscale) w postaci jak przykładowa galeria

    http://cepc09.ii.uni.wroc.pl/gallery2/

    Tytuł galerii oraz linie z copyrightem można przekazać jako parametr lub dodać do pliku opisu.

Pracownia 4.I.2010:

  1. Wyszukaj i ściągnij źródła jakiegoś popularnego prostego narzędzia uruchamianego w wierszu poleceń - może to być na przykład gzip. Poniższa instrukcja dotyczy tego programu, ale możesz próbować wykonać ją na prawie każdym innym kodzie źródłowym. Rozpakuj źródła, przeczytaj plik INSTALL i postępuj zgodnie z instrukcjami. Zainstaluj program do wybranego przez siebie katalogu (utwórz go poprzednio). Sprawdź na przykładach, że skompilowana przez Ciebie wersja działa tak samo jak gzip istniejący już w systemie.
  2. Wyłap dowolny komunikat pojawiający się przy użyciu gzipa oraz kawałek strony pomocy man. Odszukaj je w plikach źródłowych; przetłumacz je na język polski. Skompiluj program na nowo i sprawdź, że zmiany odniosły skutek.
  3. Przygotuj dwa katalogi, jeden z oryginalnymi a drugi ze zmodyfikowanymi przez Ciebie źródłami. Zapoznaj się z poleceniem diff i wyprodukuj poprawkę (patch) w formacie unified, który zawiera różnicę między tymi dwoma katalogami. Zrób kopie oryginalnych i zmodyfikowanych źródeł, przy czym zmień nazwę zawierających je katalogów; kolejne polecenia wykonuj na kopiach.

    Zapoznaj się z programem patch, ze szczególnym uwzględnieniem opcji -p. Wejdź do katalogu zawierającego oryginalne źródła i nałóż wykonaną poprawkę (na początku wypróbuj działanie wykorzystując opcję --dry-run). Podobnie zrób ze zmodyfikowanymi źródłami; tam za pomocą poprawki usuń swoje modyfikacje.

  4. Wykonaj kolejne kopie katalogów. Tym razem sprawdź, jakie modyfikacje pliku (zmiana kluczowych wierszy, zmiana wierszy oddalonych od miejsca, którego dotyczy łatka, dodanie, usunięcie wierszy) pozwalają jeszcze nałożyć łatkę. Dodaj białe znaki w kluczowych miejscach, odszukaj opcję patch odpowiedzialną za ich ignorowanie i spróbuj ponownie nałożyć łatkę.

    Pracownia 11.I.2010:

    Zadania z sieci lista 8a ze strony kursu

    Pracownia 18.I.2010:

    Zadania z gnuplot'a lista 10 ze strony kursu

    Punktacja:

    Na pracowniach od 12.X do 26.X można było uzyskac 30 punktów za wszystkie zadania (czyli po około 4-5 punktów za zadanie). Za zadania oddawane z opóźnieniem tygodniowym można uzyskać 2/3 punktów. Poniżej w tabelce tymczasowa punktacja, dla każdego tygodnia sumaryczna ilość punktów za bieżące zadania, a pomiędzy za zadania zaległe oddane z opóźnieniem:


Andrzej Łukaszewski (anl(at)ii.uni.wroc.pl)