1. Prikazy cd, ls, cat ---------------------- V adresari cd_cat je soubor START. Ten ma tvar: znak: 'x' dalsi: 'abc' Sestavte prikaz ze znaku v souborech v podstromu adresaru cd_cat. V kazdem souboru je jeden znak a jmeno dalsiho souboru (ktery obsahuje dalsi znak). Posledni soubor v retezci nema odkaz na dalsi soubor. Co vypise sestaveny prikaz? 2. Jmeno souboru slozene ze specialnich znaku --------------------------------------------- V adresari divna_jmena jsou 4 soubory. Zjistete jejich jmena (obsahuji bile a netisknutelne znaky. Jak byste takove soubory vytvorili? 3. Hromadne kopirovani ---------------------- Napiste prikaz, ktery vezme vsechny soubory v aktualnim adresari, ktere nezacinaji teckou a konci priponou .txt, a zkopiruje je se stejnym jmenem, ale s priponou .bak (ekvivalent DOS-ovskeho copy *.txt *.bak). 4. grep, /etc/passwd -------------------- Vypiste radky souboru /etc/passwd, ktere NEOBSAHUJI uzivatele - studenty. Studenti maji v login-name 4 pismena nasledovana 4 cislicemi. 5. grep, cut, /etc/passwd ------------------------- Vypiste pouze full_name (5. polozka) uzivatelu ziskanych v (4). 6. grep, cut, tr, awk, /etc/passwd ---------------------------------- Vypiste uzivatele ziskane ve (4) ve tvaru UID=full_name 7. Procesy v roure (bash) ------------------------- Co vypise tento radek (v shellu) a proc? a=hlavni;b=hlavni;{ a=levy;echo $a >&2;}|{ b=pravy;echo $b;};echo "A=$a,B=$b" 8. du user ---------- Napiste program duser [-b blocksize] user dir ktery spocita celkovou velikost souboru, ktere v podstromu 'dir' patri uzivateli 'user' (uzivatele jsem zadat pomoci jmena nebo uid). Velikost souboru se zaokrouhluji nahoru na velikost bloku danou volitelnym parametrem -b. 9. printlinks ------------- Napiste program printlinks html_document ktery dostane jako parametr jmeno HTML dokumentu a vypise vsechny URL, na ktere z daneho dokumentu vedou odkazy. Predpokladejte odkazy ve tvaru , kde 'A HREF' muze byt lib. kombinaci malych a velkych pismen. 10. rwho -------- Napiste klient-server aplikaci (nad TCP), ktera realizuje sluzbu rwho. Klientovi se zada jmeno pocitace. Jako odpoved se vypisi jmena vsech uzivatelu, kteri jsou nalogovani na zadanem pocitaci. 11. listman ----------- Napiste program, ktery vypise nazvy vsech manualovych stranek v systemu. Seznam je rozdelen do sekci a v kazde sekci setrideny podle nazvu jednotlivych stranek. Manualove stranky se hledaji ve standardnich adresarich, dale v ceste zadane v promenne MANPATH. Na Linuxu berte v uvahu soubor /etc/man.config. 12. Presmerovani ---------------- Co dela tento prikaz (v shellu) a proc? { { { echo 1aaa;echo 2bbb >&2;} 3>&1 1>&2 2>&3|\ { tr 'a-z' 'A-Z';echo 2tr >&2;} 2>&1 } 3>&1 1>&2 2>&3 }>out 2>err 13. Zruseni zacatku stderr (motivace pro 12) -------------------------------------------- Kompilator MIPS C/C++ 7.2, pokud nema instalovane licence, pise pri kazdem spusteni na zacatek stderr upozorneni, ze nenalezl licenci. Dal bezi normalne. Napiste shell skript, ktery zachova stdout i stderr kompilatoru, pouze zrusi uvodni (vzdy stejny) usek stderr tykajici se licenci. Obecne zadani: mame program, stdout chceme zachovat beze zmeny, stderr chceme zpracovat pomoci nejakeho filtru (tj. poslat skrz rouru). 14. Filtrace stdout i stderr ---------------------------- Mame program pis_out_err, ktery neco pise na stdout a stderr. Napiste prikaz, ktery zavola pis_out_err a v jeho stdout zmeni vsechna pismena na velka a posle na stdout, podobne ve stderr zmeni pismena na mala a posle na stderr. 15. Offline ftp --------------- Napiste program ftpget server dir user password ktery se naloguje na FTP server s danym jmenem a heslem a cely podstrom pod adresarem dir stahne na lokalni disk do aktualniho adresare. 16. Mail sort ------------- Napiste program, ktery rozdeli doslou postu ze zadaneho folderu podle odesilatele. Pri praci se ridi konfiguracnim souborem. Jeho radky maji tvar: folder:regexp nebo jen folder Pro kazdou zpravu se prochazi konfiguracni soubor (radky zacinajici znakem '#') jsou komentare a neuvazuji se pri zpracovani. Pokud se najde radek, s regularnim vyrazem, ktery odpovida odesilateli zpravy, pak se tato zprava ulozi do prislusneho folderu. Radek bez regularniho vyrazu definuje default folder, kam se ukladaji zpravy, pro ktere nebyl nalezen jiny folder. 17. find in find ---------------- Co udela nasledujici prikaz? find `find / -mount -type d -name "*bin*" 2>/dev/null` \ -name "*sh*" -exec file {} \; 2>/dev/null 18. kalkulacka -------------- Napiste skript v shellu, ktery bude fungovat jako jednoducha kalkulacka pracujici v reverzni polske notaci (postfixova, zasobnikova notace). Pr. 5 3 + 2 / ---> 4 Skript cte stdin, pise na stdout, pouziva pouze celociselnou aritmetiku, funguji nasledujici operace: + - * / % ... bezne aritmeticke operace (/ celociselne deleni, % modulo) . ... vytiskne a smaze cislo na vrcholu zasobniku : ... duplikuje cislo na vrcholu zasobniku ? ... vytiskne cely zasobnik bez jeho zmeny. 19. CD katalog -------------- Na pocitacich SGI s operacnim systemem IRIX se software instaluje z distribucnich CD, ktere obsahuji instalacni baliky ve formatu pro instalacni programy 'inst' a 'swmgr'. V korenovem adresari nekterych CD je soubor '.IM' obsahujici identifikacni informace, nas zajimaji radky title = "nazev tohoto CD" part_num = "cislo tohoto CD" Vlastni instalacni baliky jsou v nejakem adresari na CD, obvykle '/dist'. Po vlozeni do mechaniky se CD automaticky primountuje do adresare '/CDROM'. Seznam vsech produktu na CD lze vypsat prikazem showprods -1nf /cd_root/dist_dir kde '/cd_root' je standardne '/CDROM' a 'dist_dir' je 'dist'. Priklad vypisu: Distribution: /CDROM/dist I = Installed, R = Removed Name Version Description european 1022361620 European Language Module, 1.3.1 iconv 1022347120 iconv converters 1.0 Napiste skripty pro vytvareni a prohledavani katalogu CD. Skript 'lsCD [DISTROOT] [DIST]' precte soubor '.IM' v 'DISTROOT' a ulozi jeho obsah do katalogu spolu se seznamem vsech baliku na CD v adresari 'DISTROOT/DIST'. Pokud CD neni namountovane, ceka, dokud se neprimountuje. Kdyz nenajde '.IM', zepta se na hodnoty polozek 'title' a 'part_num'. Skript 'getCDtitle string' vypise 'part_num' a 'title' vsech CD, jejichz nazev obsahuje zadany retezec. Skript 'getCDsubs string' vypise pro vsechny baliky, v jejichz popisu se vyskytuje zadany retezec, popis baliku, 'title' a 'part_num' vsech CD, ktere balik obsahuji. 20. automaticka konfigurace systemu ----------------------------------- Po nainstalovani operacniho systemu je ho treba jeste zkonfigurovat. Rucni konfigurace je pracna a trva dlouho. Je tedy rozumne tuto cinnost zautomatizovat, zvlaste kdyz se dela casto a na vetsim poctu stroju (napr. v UNIXove laboratori). V systemu je potreba nastavit napr. IP adresu, jmeno pocitace, adresy nameserveru, routovaci tabulky, konfiguraci sendmailu, finger, sdileni disku a uzivatelskych uctu po siti, zkontrolovat seznam nainstalovaneho software... Navrhnete soustavu skriptu a konfiguracnich souboru, ktera provadi automatickou konfiguraci systemu. Cely postup instalace systemu by mel vypadat zhruba nasledovne: 1. instalace zakladniho OS 2. rucni nastaveni nejnutnejsich veci v systemu (IP adresa, apod.) 3. namountovani adresare s konfiguracnimi skripty ze sitoveho serveru 4. automaticka konfigurace celeho systemu volanim jednoho skriptu Skripty by mely co nejmene interagovat s uzivatelem, poskytovat dostatecne podrobny log soubor o sve cinnosti, umoznovat provedeni pouze casti konfigurace (napr. po instalaci noveho software je treba opravit jen to, co se pri instalaci zmenilo), byt rozsiritelne (mnozina konfiguracnich akci by mela byt snadno menitelna) a umoznovat i zruseni provedenych zmen. 21. ls vsech souboru krome '.' a '..' ------------------------------------- Jak lze ziskat seznam vsech souboru v adresari krome '.' a '..'? Sve reseni muzete vyzkouset napr. v adresari ls_almost_all. 22. komentare v C/C++ --------------------- Jak zmenit C-ckove komentare "/* ... */" na C++-styl "// ..." a naopak? 23. blokove a radkove komentare ------------------------------- Upravte reseni prikladu 22 tak, aby pracovalo i s viceradkovymi komentari. Pr.: /* radek 1 // radek 1 radek 2 --> // radek 2 radek 3 // radek 3 radek 4 */ // radek 4 24. komentovani odstavcu ------------------------ Napiste skript, ktery v textu zakomentuje vsechny odstavce, ktere zacinaji komentarovym radkem. Znak uvozujici komentar je zadan jako argument, odstavce se oddeluji prazdnym radkem. Pr. (\n je znak konce radku) # radek 1 # radek 1 radek 2 # radek 2 radek 3 --> # radek 3 \n \n odstavec 2 odstavec 2 25. sed, /etc/passwd -------------------- V souboru /etc/passwd pridejte k full-name studentu (maji login name ve tvaru 4 pismena a 4 cislice) retezec "student". 26. sed, date ------------- Textovy soubor obsahuje na kazdem radku datum. Napiste prevod mezi ruznymi formaty data, napr. dd.mm.rrrr, tt tt mm/dd/rrrr kde: dd=den, mm=mesic, rrrr=rok, tt=den v tydnu 27. vacation ------------ Napiste program vacation, ktery automaticky odpovida na doslou postu (napr. pokud si uzivatel nemuze delsi dobu vybirat postu). Z kazdeho dosleho dopisu se vezme adresa odesilatele a hleda se v konfiguracnim souboru. Radek souboru ma tvar: regexp interval msgfile Vezme se prvni radek, na nemz regularni vyraz odpovida adrese a posle se odesilateli obsah souboru 'msgfile'. Aby se neposilalo prilis mnoho mailu, odpoved se posle, pouze kdyz od posledni odpovedi stejnemu uzivateli uplynul cas delsi nez 'interval'. 28. Oznameni o dorucene poste ----------------------------- Napiste program, ktery vezme z kazdeho dosleho dopisu hlavicky Date:, From: a Subject: a celkovou delku mailu a tyto informace posle na zadanou adresu. Vzdy se posilaji najednou hlavicky z nekolika mailu (pocet lze nastavit). Jestlize nedojde dostatecny pocet mailu pred vyprsenim nastaveneho timeoutu, posle se oznameni obsahujici informace o mensim poctu mailu. 29. cmd ------- Napiste program, ktery pomoci ssh spousti stejny prikaz na nekolika zadanych pocitacich. 30. putfile ----------- Napiste program, ktery zkopiruje (pomoci ssh, resp. scp) zadane soubory na stejne misto v hierarchii adresaru na nekolik zadanych cilovych stroju. 31. fmt ------- Napiste program fmt, ktery formatuje text po odstavcich (oddeluji se prazdnym radkem) do zadaneho poctu sloupcu. Program vzdy vezme odstavec a napise ho na co nejmensi pocet radku tak, aby k prechodu na novy radek nedochazelo uprostred slova. 32. mailcmd ----------- Napiste program pro spousteni prikazu pomoci e-mailu. Program dostane na vstup dopis ve tvaru: From: Subject: pusti prikaz a na vstup mu da . Vystup prikazu (standardni i chybovy) a navratovy kod posle zpet na adresu . 33. lsprograms -------------- Jak se daji zjistit jmena vsech programu, ktere muze aktualni uzivatel spustit bez udani plne cesty (tj. vsechny soubory v adresarich napsanych v promenne $PATH, ke kterym ma uzivatel pravo execute)? 34. zamykani souboru -------------------- Jak se da vyresit situace, kdy vice procesu chce naraz psat do jednoho souboru? Typicky nejaky program muze byt spusten vicekrat a vsechny instance pouzivaji stejny logfile.