Przykłady plików wejściowych:

plik1.txt
Tomasz Konopski:651545752155412462321652315541256312133215121321211121
Robert Blum:165231554125631213321512132121112165154575215541246232
Anna Maj:215221322115251421122152623121122112323121211521212211
Joanna Lis:212121211121212121212112123124112121133122122121231212

plik2.txt

Adam Blue:111121212211121211121212123211111212121211212311111112113312212121231212
Jerzy Nielot:111121212211121211121212123212321212122222212312411212312332212121231212

plik3.txt

01-06-2015
j.nowak Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.
a.brat Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.
j.kubaszewska Ten adres pocztowy jest chroniony przed spamowaniem. Aby go zobaczyć, konieczne jest włączenie w przeglądarce obsługi JavaScript.
plik4.txt
To jest nagłówek pliku z dnia 2015-01-05
plik5.txt
Adam Blue:111121212211121211121212123211111212121211212311111112113312212121231212:107
Jerzy Nielot:111121212211121211121212123212321212122222212312411212312332212121231212:122
plik6.txt
-rw-rw---- 1 bogdan       mail 455560 sty  3 14:13 bogdan
-rw-rw---- 1 d.fry        mail  65304 sty  3 16:37 d.fry
-rw-rw---- 1 k.pol        mail    550 sty  3 14:02 k.pol
-rw-rw---- 1 mail         mail  38677 sty  3 14:29 mail
-rw-rw---- 1 m.kuj        mail 592212 sty  3 14:02 m.kuj
-rw-rw---- 1 m.rad        mail    400 sty  3 14:06 m.rad
-rw-rw---- 1 m.sto        mail    290 gru 26 19:44 m.sto
-rw-rw---- 1 p.zar        mail    840 sty  3 14:31 p.zar
-rw-rw---- 1 r.nel        mail    380 gru 27 21:39 r.nel
-rw-rw---- 1 t.kol        mail    450 sty  3 16:38 t.kol
-rw-rw---- 1 t.zal        mail  34764 sty  4 14:03 t.zal
plik7.txt
372340    /home/bogdan
40      /home/d.fry
4034      /home/k.pol
3634434      /home/m.kuj
40      /home/m.rad
445     /home/m.sto
48      /home/p.zar
36      /home/r.nel
323434      /home/t.kol
80      /home/t.zal

Zadania

Zadanie 1

Nalezy przygotować skrypt, który będzie możliwy do wykonania przez administratora. Skrypt będzie bazował na pliku wejściowym, którego format przedstawiono w pliku wejściowym plik3.txt. Zadaniem skryptu jest wygenerowanie innego skryptu, który po wykonaniu przez administratora wykona nastepujące operacje:

- utworzenie konta uzytkownika o nazwie z pierwszej kolumny, konto powinno wygasać po dacie znajdującej się w pierwszej linii pliku wejściowego.

- konto powinno mieć przypisane hasło automatycznie wygenerowane, zawierać minimum 12 znaków, co najmniej 1 litera mała, co najmniej 1 duża i co najmniej 1 cyfra. Mogą byc tez znaki specjalne w haśle.

- Po przygotowaniu konta użytkownika do pliku powstale.txt powinny byc zapisane informacje:
     login_użytkownika haslo data wygaśnięcia konta
     Dla kazdego konta dokładnie jedna linia zapisu

Skrypt docelowy powinien równiez wysłać e-mail na adres podany w pliku plik3.txt z informacją o powstaniu konta oraz o haśle.

UWAGA: W zadaniu należy wykorzystać funkcję szyfrowania hasła, ponieważ podanie go w komendzie useradd lub adduser spowoduje uzycie hasła jako zaszyfrowanego. W efekcie nie mozna będzie się zalogowac na to konto za pomocą tego hasła...

Wszelkie komendy wymagające uprawnień administratora nalezy przetestować na linuxie live np. Ubuntu.

Zadanie 2A, 2B,  2C, 2D

Plik wejściowy zawiera dane jak w plikach wejściowych plik1.txt i plik2.txt. każda linia zawiera imię i nazwisko oraz po dwukropku cyfry z zakresu 1-7. Inne cyfry są niedopuszczalne. Jeżeli wprowadzona zostanie inna cyfra, skrypt powinien to zakomunikować użytkownikowi.

Cyfr w danym pliku wejściowym jest zawsze tyle samo dla każdej osoby. ilość ta musi być zawsze podzielna przez 18 czyli może być 18, 36, 54,...,216 cyfr.

Skrypt ma za zadanie:

a) sprawdzic poprawnośc przygotowanych danych, zsumowac cyfry i dopisac sumę do każdej linii po znaku ':", a następnie posortować plik od najmniejszego wyniku do największego
    linia przykladowa wyglądać powinna tak:

Adam Blue:111121212211121211121212123211111212121211212311111112113312212121231212:107
Jerzy Nielot:111121212211121211121212123212321212122222212312411212312332212121231212:122

W przypadku niezgodności pliku z założeniami, uzytkownik powinien byc powiadomiony o tym jaki problem wystąpił, aby mógł go w szybki sposób skorygować. Niedopuszczalne są komunikaty ogólnikowe typu: Wystapił błąd. Popraw dane wejściowe.

b) przygotować plik wynikowy: wyniki.txt, w którym zapisane zostaną nastepujące dane:

Adam Blue:111121212211121211121212123211111212121211212311111112113312212121231212:24:27:25:31:107
Jerzy Nielot:111121212211121211121212123212321212122222212312411212312332212121231212:24:31:33:34:122

W każdym wierszu liczby są sumami kolejnych 18 cyfr co zostało powyżej zaznaczone odpowiednimi kolorami. Na końcu linii powinna być zapisana suma wszystkich cyfr. Na zakończenie skrypt powinien posortować wyniki od najmniejszego do największego.

c) przygotować plik html z danych zapisanych w dwóch plikach plik4.txt i plik5.txt. Dane maja byc przygotowane w postaci tabeli (znaczniki <table><td><tr>) Plik wynikowy wyniki.html po otwarciu w przeglądarce powinien wyglądać następująco:

--- Początek pliku ---

To jest nagłówek pliku z dnia 2015-01-05

Imię i Nazwisko R1 R2 R3 R4 Suma
Adam Blue 24 27 25 31 107
Jerzy Nielot 24 31 33 34 122

--- koniec pliku ---

W pliku html mają się pojawić kolumny: miejsce, Imię i nazwisko, R1 (suma pierwszych 18 cyfr), R2 (suma z nastepnej 18-tki) aż do ukończenia wszystkich cyfr w najdłuższym ciągu i na końcu kolumna suma.

Uwaga: ilość cyfr początkowych po nazwisku może być różna. Ilość tych liczb jest wielokrotnością 18. Dla każdej "18-tki" należy przycpisać nagłówek kolumny: R1 - dla pierwszych 18 cyfr, R2 dla następnych 18 cyfr, jeśli wystąpią itd.

Inne przykłady plik5.txt (6R - 6 bloków po 18 cyfr):

Adam Blue:111121212211121211121212123211111212121211212311111112111121212211121211121212123211111212121211212311111112:152
Jerzy Nielot:111121212211121211121212123212321212122222212312411212111121212211121211121212123212321212122222212312411212:176

lub 3R

Adam Blue:111121212211121211121212123211111212121211212311111112:76
Jerzy Nielot:111121212211121211121212123212321212122222212312411212:88

d) dopisze do pliku w formacie pokazanym w zadaniu 2b) dodatkowe informacje po dodatkowym dwukropku największą liczbę kolejnych "jedynek". Następnie uszereguje linie w pliku od największej liczby jedynek. Przykładowy plik wynikowy powinien wyglądać tak:

Adam Blue:111121212211121211121212123211111212121211212311111112113312212121231212:24:27:25:31:107:7
Jerzy Nielot:111121212211121211121212123212321212122222212312411212312332212121231212:24:31:33:34:122:4

W tej części zadania nie zwracamy uwagi na podział na 18-to cyfrowe bloki.

Wynik końcowy powinien być posortowany wg największej ilości jedynek pod rząd od największej wartości do najmniejszej.

UWAGA: zadania 2a, 2b, 2c, 2d są oddzielnymi zadaniami.

Zadanie 3

Przygotować skrypt, który przygotuje w postaci pliku w formacie html tabelę jak na rysunku poniżej:

Użytkownik home mail Suma
t.morski 45 MB 12 MB 57 MB
a.lis 1 MB 40 MB 41 MB
z.waski 41 MB 2 MB 43 MB

 

Dane do tabeli należy pobrać z systemu: kolumna home to łączna zajętość folderu domowego uzytkownika na dysku, mail to długość pliku /var/mail/login_name. kolumna suma powinna zawierać sumę wartości z kolumny home i mail.

Zadanie należy przygotować na wersji systemu, w którym uzytkownik posiada prawa administracyjne. Ewentualnie mozna bazować na plikach danych plik6.txt i plik7.txt. Oczywiście wyświetlone pliki są przygotowane fikcyjnie. Osoba, która podejmie się tego zadania, powinna oczywiście wiedzieć jak powstał plik7.txt. :) Nalezy także zwrócic uwagę w jakich jednostkach podane są liczby po uruchomieniu odpowiednich komend lub wyświetlanych w plikach.

Zadanie 4

Plik /etc/passwd zawiera linie w postaci:

bogdan:x:1001:1001:Bogdan,123,+48555555555,:/home/bogdan:/bin/bash

oraz komenda last zwraca takie informacje (fragment wydruku):

bogdan@zabytek:~$ last
d.komoro pts/1        89-66-48-80.dyna Tue Jan  6 21:30   still logged in
bogdan   pts/0        89-77-200-156.dy Tue Jan  6 20:51   still logged in
l.dolny  pts/1        ogt146.internetd Tue Jan  6 18:42 - 18:43  (00:01)
l.dolny  pts/0        ogt146.internetd Tue Jan  6 18:24 - 20:37  (02:13)
bogdan   pts/0        89-77-200-156.dy Tue Jan  6 17:23 - 17:49  (00:26)
m.kujawi pts/0        89-79-234-59.dyn Tue Jan  6 12:37 - 12:38  (00:00)
m.kujawi pts/0        89-79-234-59.dyn Tue Jan  6 12:37 - 12:37  (00:00)
p.redzim pts/0        host-62-61-41-68 Mon Jan  5 22:57 - 23:08  (00:10)
d.frymar pts/0        62.233.149.18    Mon Jan  5 06:38 - 06:39  (00:01)
t.zalews pts/2        213.17.194.162   Sun Jan  4 14:14 - 14:48  (00:34)
t.zalews pts/1        213.17.194.162   Sun Jan  4 14:00 - 16:18  (02:18)
bogdan   pts/0        89-77-200-156.dy Sun Jan  4 11:56 - 15:35  (03:38)
bogdan   pts/0        89-77-200-156.dy Sat Jan  3 19:32 - 23:40  (04:07)
a.koj    pts/0        109241207185.gda Sat Jan  3 19:14 - 19:16  (00:01)
l.kosmin pts/25       213.17.194.162   Sat Jan  3 16:36 - 16:46  (00:10)
r.nelec  pts/24       213.17.194.162   Sat Jan  3 16:36 - 16:47  (00:10)
t.koltun pts/23       213.17.194.162   Sat Jan  3 16:35 - 18:58  (02:22)

Zadanie polega na napisaniu skryptu który przygotuje tabelkę html w nastepującej postaci:

login imie i nazwisko Data 1 Data 2 Data 3 Data 4 Data 5
bogdan (tu imie i nazwisko pobrane z pliku /etc/passwd) 6.01.2015 6.01.2015 4.01.2015 3.01.2015 -
l.dolny - " - 6.01.2015 6.01.2015 - - -
d.komoro - " - 6.01.2015 - - - -

Oczywiscie w nastepnych wierszach powinny się znaleźć informacje o logowaniach pozostałych uzytkowników serwera.

Zadanie 5.

Napisać skrypt, który uruchamiany regularnie pozwoli na sprawdzanie co obecnie dzieje się na serwerze. Skrypt ma powiadamiać administratora (jego adres mailowy zapisany w pliku adres.txt) o nastepujących zdarzeniach na serwerze:

a) gdy ilość miejsca na którejkolwiek partycji spadnie poniżej progu 10% całkowitej wielkosci partycji (przyda się komenda df). Oczywiście w przypadku braku miejsca na CD-R lub DVD nie powinna powiadamiac o błędzie.

b) gdy wielkość pliku poczty użytkownika będzie większa od założonej wartości.

Dane są sprawdzane dla dowolnego wybranego użytkownika. Nie ma potrzeby sprawdzania wszystkich użytkowników serwera.

Zadanie 6.

Napisac skrypt, który pobierze ze wskazanego serwera plik lub pliki i spakuje je i połączy do jednego pliku i zapisze w wybranym katalogu pod nazwą: backup_rrrr.mm.dd_gg.mm.ss.tgz gdzie rrrr.mm.dd to data uruchomienia skryptu, a gg.mm.ss to godzina, minuta i sekunda uruchomienia skryptu. Spis plików do pobrania powinien być zapisany w pliku: pliki_do_pobrania.txt. Zakładamy, że w jednej linii tego pliku jest wskazany 1 link.

Zadanie 7.

Przygotowac skrypt, który będzie operował na wskazanym jako parametr katalogu i policzy w nim ilość plików, ilość podfolderów oraz nazwę i ścieżkę najdłuższego znalezionego pliku w folderze.

Zadanie 8.

Należy napisać skrypt, który za pomocą maila wyśle komunikat o treści:

W dniu (dzisiejsza data) o godzinie (bieżąca godzina) serwer działa. :)

Pliki backupów:

......... (konkretne nazwy) (konkretna data i godzina)  (konkretna długość pliku w jednostkach przyjaznych dla człowieka)

mają daty NIEAKTUALNE/aktualne.

mail ma być wysłany na adres lokalny np.: student@localhost za pomocą programu mutt.

Nazwy plików, których datę trzeba sprawdzić znajdują się w pliku: .pliki_do_sprawdzenia który zawiera nazwy plików, przykładowo:

 

/home/student/backup.tgz
/home/student/backupy/plik.txt