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 | 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