Seminár k operačným systémom: záverečné zadania 2019

Spoločné vlastnosti

  1. Termín odovzdania sú uvedené v AIS2. Prihláste sa na ne obvyklým spôsobom.
  2. Vypracujte obe zadania.

    • jedno zadanie vypracujte v PowerShelli.
    • druhé zadanie vypracujte v unixovskom shelli.
  3. Zadanie musí implementovať celú požadovanú funkcionalitu. Vynechanie ktoréhokoľvek bodu má za následok zamietnutie zadania a hodnotenie FX.

  4. Hodnotenie sa odvíja od spôsobu implementácie zadania a od odpovedí na kontrolné otázky zamerané na pochopenie vypracovania.

  5. Zadanie spokojne vzájomne konzultujte. Vypracovanie však musí byť samostatné a jednoznačné.

  6. Plagiátorstvo a identický kód je trestaný okamžitým hodnotením FX. Ak využijete kusy kódu alebo rady z internetu, ste povinní uviesť do zdrojového kódu odkaz na zdroj (URL blogu, odkaz na StackOverflow a pod.) V opačnom prípade je zadanie zamietnuté ako plagiát.

  7. Zadanie bude obhájené individuálne a ústne v termíny uvedené v AIS2.

Zadanie 1: Zálohovanie

Vytvorte sadu shell skriptov, ktoré realizujú zálohovanie ľubovoľného adresára na vzdialené úložisko v duchu nástroja rsync.

Zvoľte jeden vhodný typ vzdialeného úložiska, inšpiráciou môže byť:

  • HTTP upload
  • FTP
  • SCP

Každá záloha adresára nech je vo vzdialenom úložisku identifikovaná časovou značkou, ktorá je jednoznačná.

Požadované operácie

Nástroj nech podporuje nasledovné operácie:

  • odzálohovanie ľubovoľného adresára zadaného z parametra do úložiska

    Odporúča sa využiť niektorý z komprimačných nástrojov.

    Create-Backup C:\Users\novotnyr\Documents
    
  • výpis všetkých záloh na vzdialenom úložisku

    $> Get-Backup
    
        Zoznam zaloh:
        2011/10/10
        2011/12/1
        2012/1/2
    
  • obnovenie zálohy na základe zadanej časovej značky do zadaného adresára

    Restore-From-Backup 2011/10/10 C:\Users\rn\novotnyr\Document
    

Záloha musí byť obnovená do identického stavu, v akom sa nachádzala pri zálohovaní, čo platí pri obnove súborov do existujúceho adresára. Ak používateľ obnovuje do existujúceho adresára, vyžadujte od neho potvrdenie.

  • zistenie zoznamu rozdielnych súborov (pribudnutých, odbudnutých, zmenených) medzi dvoma zálohami.

    Compare-Backups 2011/10/10 2012/1/2
        + index.html
        + wiki/wiki.html
        - chata.jpg
        - ozierka.jpg
        # changelog
        # zoznamuloh.jpg
    

Odporúčania

  • Jedno z riešení odošle na server spolu s komprimovaným adresárom aj súbor obsahujúci cesty pre každý zo zoznamu súborov.
  • Skúste použiť HTTP upload, pričom na strane servera vytvorte jednoduchý PHP skript a na strane shellskriptu využite triedu System.Net.WebClient a jej metódy Upload***.

Zadanie 2: Spracovanie log súborov

Majme systém, ktorý generuje logovací súbor, ktorý vyzerá nasledovne:

2017-12-10 10:21:16.993  INFO --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : unknown: Restarting Consumer: tags=[{amq.ctag-cIlAPNJRXDylTM1UAH5GsA=user.aml-check-status-requested}], channel=Cached Rabbit Channel: AMQChannel(amqp://ft-iam@127.0.0.1:5672/ft,11), conn: Proxy@56e7f0b Shared Rabbit Connection: SimpleConnection@2a5586ac [delegate=amqp://ft-iam@127.0.0.1:5672/ft, localPort= 50737], acknowledgeMode=AUTO local queue size=0
2017-12-10 10:21:17.007  INFO --- [cTaskExecutor-2] o.s.a.r.c.CachingConnectionFactory       : unknown: Created new connection: SimpleConnection@1afb1d2f [delegate=amqp://ft-iam@127.0.0.1:5672/ft, localPort= 53079]
2017-12-10 10:21:17.953  WARN --- [cTaskExecutor-1] o.s.a.r.l.SimpleMessageListenerContainer : unknown: Consumer raised exception, processing can restart if the connection factory supports it
2017-12-10 10:21:18.212  WARN --- [cTaskExecutor-3] c.g.n.MessageService : root: Handling message: OK

Na každom riadku je jeden záznam v nasledovnom tvare:

  • časová pečiatka (rok-mesiac-deň hodina:minúta:sekunda.milisekunda)
  • dve medzery
  • úroveň hlášky: jeden z reťazcov DEBUG alebo INFO alebo WARN alebo ERROR.
  • medzera a tri pomlčky a medzera
  • názov vlákna (thread) v hranatých zátvorkách
  • medzera
  • názov Java triedy, ktorá vygenerovala hlásenie
  • medzera, dvojbodka a medzera
  • meno aktuálne prihláseného používateľa, pre ktorého sa vygenerovala hláška alebo unknown ak používateľ nie je známy
  • dvojbodka
  • text logovacej hlášky

Požiadavky

Implementujte nástroj filter-log s nasledovnou funkcionalitou:

  • vypíšte logovacie záznamy za posledných 5 minút
  • vypíšte logovacie záznamy za poslednú hodinu
  • vypíšte logovacie záznamy pre zadaného používateľa
  • vypíšte logovacie záznamy, ktoré obsahujú v texte logovacej hlášky zadaný text
  • vypíšte logovacie záznamy, ktoré sa týkajú jednej zadanej Java triedy
  • vypíšte logovacie záznamy, ktoré sú dôležitejšie alebo rovné ako zadaná úroveň hlášky. Ak používateľ vyžiada hlášky úrovne WARN, vypíšte hlášky úrovne WARN a ERROR, ale už nie DEBUG a INFO. Priority úrovní sú DEBUG < INFO < WARN < ERROR.

Obmedzenie unixovského shellu

  • Zadanie v shelli demonštrujte na serveri student.ics.upjs.sk alebo na vlastnej inštalácii Linuxu.
  • V zadaní použite len nástroje vymenované v norme POSIX.
  • Zadanie skontrolujte nástrojom shellcheck dostupnom buď online alebo na serveri student.ics.upjs.sk.
  • vyhnite sa využitiu bashismov, teda konštrukcií, ktoré fungujú len v bashi. Najlepšie je spúšťať skript pod shellom dash, ktorý je dostupný na serveri s.ics.upjs.sk.
  • alternatívne využite skript checkbashism (viď dokumentácia)

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *