Ve skolnim roce 2010/2011 vedu cviceni z predmetu Uvod do UNIXu (NSWI095), najdete nas v laboratori SU2 kazde utery od 15:40. Tady najdete podminky pro zapocet, seznam domacich ukolu, a dle moznosti se budu snazit tvorit i nejake kratke zpravodajstvi ze cviceni. Cvicim skupinu c. 33, ovsem i studenti odjinud jsou vrele vitani!
Pokud ke mne chcete chodit na cviceni, musite se zapsat
v grupicku _a_ zaroven mi
poslat mail.
(Evolucne stabilni strategii je psat do subjectu [NSWI095].)
Cilem cviceni je seznamit Vas se zaklady praktickeho a efektniho pouzivani UNIXu a jeho prikazove radky a shelloveho interpreteru. Radu uloh, at uz se tykaji automatizace Vasi prace ci Vaseho systemu, nebo treba zpracovani velkeho mnozstvi dat, ktere byste museli drive zdlouhave delat rucne nebo na ne psat specialni programy, po absolvovani cviceni zvladnete naskriptovat behem nekolika minut prostou kombinaci hrsti UNIXovych prikazu. Podminkou k ziskani zapoctu je bud napsat zapoctovou pisemku a nejaky ten domaci ukol, nebo odevzdat zapoctak.
Cesta ditete: Semestr je rozdelen na tri bloky po cca ctyrech tydnech, na konci kazdeho bloku dostanete ctyri domaci ukoly, na jejich odladeni a finalni odevzdani budete mit 14 dni. Z kazdeho bloku byste pritom meli odevzdat alespon jednu ulohu; pokud nejaky blok propasnete, muzete si ulohu nahradit, ale jen ulozkou z dalsiho bloku. (Ovsem s prubehem semestru se slozitost zadani bude samozrejme zvysovat. ;-) Ukoly poslete co nejdrive, abyste do zacatku dalsiho cviceni stihli jeste proiterovat pripadna opravena reseni, budu-li mit vyhrady (coz se stava dost casto).
Zapoctova pisemka se bude programovat na poslednim cviceni (pokud budete planovat predtermin, dejte mi vcas vedet). Pisemka bude obnaset napsani (na pocitaci) nejakeho jemne netrivialniho programu (v tom spravnem jazyce, pochopitelne. Primarni ucel pisemky je dat Vam moznost si na vetsi uloze vyzkouset, co Vas ceka pri zkousce a jake mate sance si s tim poradit. Pocet opravnych pokusu neni omezen, ovsem obtiznost zadani roste.
Cesta lva: Zapoctovy program by mel byt v rozsahu minimalne dvojnasobku zkouskove pisemky, a to v libovolne kombinaci shellu, sedu a awku. Tato moznost je v zasade urcena pro ty, kteri se jiz s UNIXem dobre kamaradi, neco velkeho uz napsali a ted je nebavi chodit na cviceni a otravovat se s nejakou pisemkou - v posuzovani zapoctaku tedy budu relativne prisny. Na zapoctaku se se mnou pokud mozno domluvte predem a to do nejake trochu rozumne doby (pokud mozno ne 24. zari vecer). Na cvicenich budete samozrejme stale vitani. (Nemate-li zadny napad, co psat, zkuste bych se podivat na stranky cviceni z minulych let a vybrat si nektery z nejtezsich domacich ukolu: napada mne shop, nejaka lehce rozsirena verze jednoho z stur, rall, cprp, seex, shvm, find... Ovsem fantazii se meze nekladou!
Heuristika: Napiste one-liner, ktery jednoduse spocita vzdalenost dvou znaku v abecede. Zvladnete-li to bez potizi behem minuty, s UNIXem si asi celkem dobre rozumite.
Obecna poznamka: Ulohy nejsou dokonale formulovane, s takovymi se obvykle nepotkate ani v realnem zivote programatora; soucasti zadani je tedy aplikace Vaseho zdraveho rozumu. Kreativni (ale chytre) interpretace a reseni vitana.
| 22. 2. | mlrg | 0 | Poslete mi mail, ze ke mne budete chodit na cviceni - staci, kdyz napisete sve jmeno. Tahle uloha je povinna pro uplne vsechny! |
| sshl | 0 | Vyzkousejte se zalogovat pres ssh do labu: ssh VASLOGIN@u-pl27.ms.mff.cuni.cz
(Na Windows pouzijte program PuTTY.)
| |
| 15. 3. | smsl | 1 | Rozsireni SMS ulozky ze cviceni (varianta "ruska ruleta",
tedy posila se nahodna SMS, nikoliv prvni).
Hodi se nejak evidovat, kdy jste Vasi drahe polovicce poslali jakou SMSku.
Rozsirte tedy velkou ulozku tak, aby nejen SMSku poslala,
ale take ji zalogovala do souboru; rozdelte logy do zvlastnich souboru podle let.
Nezapomente do logu ulozit krome textu i datum a snad i cil zpravy.
Bude se Vam hodit prikaz date(1).
|
| jpnm | 1 | Predstavte si, ze nase laborator je v Japonsku: soubor passwd (v labu vygenerujete
prikazem getent passwd) prepiste tak, jak se casto prepisuji japonska
jmena v anglosaskem svete - napr. "Hayao Miyazaki" se prepise na "MIYAZAKI Hayao".
Treba radku pasky:x:2089:100:Petr Baudis:/home/pasky:/bin/bash byste
tedy meli prepsat na pasky:x:2089:100:BAUDIS Petr:/home/pasky:/bin/bash.
Muzete predpokladat, ze kazde jmeno se bude skladat alespon ze dvou slov.
| |
| wcfq | 1 | Napiste skript, ktery na standardnim vstupu dostane nejaky cesky nebo anglicky text
se slovy oddelenymi mezerami a obsahujici interpunkcni znamenka "." a "," (idealni
text je napriklad (pravda latinske) Lorem ipsum).
Vypiste deset nejcasteji se vyskytujicich slov (hint: tr(1) s \n)
a spoctete (celkovy ci jednotlivy) percentualni podil techto slov na celkovem poctu
slov v souboru (zkuste si z poctu slov vygenerovat automaticky aritmeticky vyraz a bc(1); procvicime
jeste asi na pristim cviceni).
| |
| ucol | 1 | Vypiste jmena vsech uzivatelu v peti sloupeccich
(proste v klasicke sloupcove sazbe, kterou znate treba z novin nebo z ls).
Muze se Vam hodit treba prikaz paste(1). Pokud by nejaky uzivatel
mel moc dlouhe jmeno, muzete jej oriznout. (Hint: Budete-li chtit ruzne dlouhe
radky predelat na fixne dlouhe, muzete se zamyslet treba nad chytrou kombinaci
prikazu yes(1), paste(1) a cut(1);
zamyslete se nad jejich manualovymi strankami. Ale moznych cest je samozrejme
mnohem vice.)
| |
| 12. 4. | poke | 1 | Parser Pokedexu: Pokemoni jsou podivne male potvurky, ktere ziji ve vlastnim svete,
maji ruzne atributy a specialni utoky a existuje kolem nich spoustu ruznych
RPG-like her atd. Seznamu vsech pokemonu se rika Pokedex, jeden takovy najdete
na http://kam.mff.cuni.cz/~pasky/pokedex.txt a vasim ukolem je prechroustat jej
do skriptove privetivejsi podoby - se souborem v puvodnim formatu se automaticky
pracuje velice nesikovne (chceme-li napriklad delat statistiky pokemonu, nebo si
napsat vlastni RPG). Vasim ukolem je navrhnout vhodnou reprezentaci Pokedexu a napsat konvertor z pokedex.txt do teto reprezentace. Reprezentace by mela umoznovat snadny pristup k mnozine pokemonu i lookup konkretniho pokemona. Pro jednoduchost muzete ignorovat informace o special moves, TMs, HMs atd. - staci z pokedexu cist pro kazdeho pokemona atributy jen po prvni prazdnou radku. |
| emlr | 1 | Sestavte regularni vyraz matchujici e-mailovou adresu. (Nemusite osetrovat uplne vsechny
zakouti formatu adresy, na druhou stranu by vas regularni vyraz mel matchovat s rozumne
vysokou pravdepodobnosti, nemelo by jim tedy projit uplne cokoliv obsahujici zavinac a
zaroven by mel zamitnout co nejmene validnich adres. Vyraz byste meli doprovodit nejakym
vysvetlujicim komentarem - proc matchuje zrovna tu kterou podmnozinu validnich adres, pripadne
kde ma naopak "diry", pokud o nejakych vite, apod...) Dale opatrete regularni vyraz skriptem, ktery ze vstupu extrahuje vsechny matchujici vyskyty, tedy vsechny e-mailove adresy. | |
| hari | 1 | Evidence Haribo medvidku: Za drobne rady, vyresene domaci ukoly, pomocne sluzby v domacnosti
atd. odmenujeme sve pratele Haribo medvidky. Navrhnete reprezentaci male "databaze"
pratel s jejich e-mailovymi adresami a informacemi o dluznych medvidcich ruznych barev.
Napiste tri skripty:
| |
| ccom | 1 | Napiste skript, ktery spolehlive prekonvertuje v C/C++/C# zdrojaku //-komentare na /*-*/-komentare. Spolehlive rozumi se tak, aby osetril mozny vznik vnorenych komentaru, pokud se uvnitr //-komentare objevi /*-*/-komentar. Zaroven by se mel pokusit vyresit alespon jednu ze dvou moznych situaci - vyskyt // uvnitr retezce (tam by konverze probihat nemela) nebo elegantni konverze viceradkovych //-komentaru na pouze jeden /*-*/ blok. | |
| 10. 5. | shrk | 1 | Kreslime zraloka - Vas skript dostane na vstupu posloupnost radku
se souradnicemi ve formatu
[x,y] ca pro kazdy radek na souradnici x,y virtualniho platna nakresli znak c. Na konci vstupu program platno vykresli na obrazovku. Skript bere jako dva povinne parametry sirku a vysku platna, a jako dalsi nepovinny parametr -b - v takovem pripade
nakresli kolem platna ramecek. (Predpokladejte, ze znaku na platne
budou az tisice, kresleni by tedy melo byt rozumne efektivni. Platno
bude obvykle velke radove 120x40.)Testovaci sada (pamatujte, rozbalite prikazem tar xvvfj shrk.tar.bz2).
|
| mcal | 1 | Kalendar: Naimplementujte jednoduchou verzi prikazu cal,
ktera vypise bud aktualni mesic, nebo mesic podle dvojice parametru
MONTH YEAR. Vystupni format by mel byt identicky jako
u prikazu cal (nebo lepsi) - nemusite ale zvyraznovat aktualni den.
K vypoctu cisla dne v tydnu muzete pouzit bud nektery ze standardnich
publikovanych vzorecku (pak byste jej ale meli pochopit), nebo vyuzit
prikaz date.
| |
| a2rp | 1 | Napiste konvertor z absolutnich cest na relativni; bude se spoustet
jako a2rp [PATH1] PATH2 a prevede absolutni cestu PATH2,
aby byla relativni k PATH1 (defaultne . neboli aktualni
adresar). Tedy napr.
a2rp /home/pasky /home/brm ../brm a2rp /var/lib/postfix /var/spool/mail ../../spool/mail a2rp /var/lib/postfix /usr/lib/postfix ../../../usr/lib/postfixDobre si poradte i s pripady, ze dostanete nejakou divne napsanou cestu (treba a2rp /home//brm/../pasky
/home/pasky/./src/////x/), cesta na vystupu by mela
vypadat presto normalne (treba src/x nebo
./src/x/).
Osetrete chybove pripady. (V pripade, ze ve skriptu vyuzijete prikaz
cd, musite si uvedomit potencialni problemy!)
| |
| rtab | 1 | Napiste tabulacni program. Na vstupu dostanete soubor treba ve formatu CSV a vypiste jej se sloupeckami zarovnanymi tak, aby zacinaly na kazdem radku na te same x-ove souradnici. Ve vychozim rezimu by mel sirky sloupecku nastavit automaticky podle nejdelsi polozky v kazdem sloupecku. Pomoci parametru na prikazove radce by melo jit zmenit mezeru mezi dvema sloupecky a rucne nastavit sirku urciteho sloupecku (klidne i tak, ze nektere radky jeho obsah budou muset mit oriznuty). |
Ukoly poslane od nedele 22. 5. 2011 probereme interaktivne spolu s resenim zapoctove pisemky.
Pokud sami v mailu nenapisete opak, souhlasite s pripadnym vystavenim Vaseho dilka na webu.
$((...)),
prikazova substituce $(...) resp. `...`,
velmi jemny uvod do promennych x=...; echo $x.
Rozsireni "ruska ruleta" (nahodna SMS misto prvni).getent passwd.
Idiom na nejcastejsi radky: sort | uniq -c | sort -n.ps axu | awk '{print$1}'.while read, navratove kody, ...). Vlastni implementace seq.trap. eval a hledani bezpecnostni diry. Parsovani parametru; idiom: while [ -n "$1" ]; do case "$1" in -r) rep=1;; -m) shift; max="$1";; *) echo "Bad parameter: $1" >&2; exit 1;; esac shift done
(Jde pouze o datum posledni aktualizace tabulky. V privalu desitek ukolu muze trvat nekolik dni, nez se dostanu k tomu Vasemu. Nepanikarte, neozvu-li se do 3-4 dni, pripomente se, prosim.)
| Jmeno | Priklady | Bodu | Pisemka | Z |
|---|---|---|---|---|
| Tibor Balaz | hari(1) shrk(1) mcal(1) | 3 | + | Z |
| Juraj Citorik | jpnm(1) poke(1) mcal(1) | 3 | + | Z |
| Votejch Dziewiecki | emlr(1) hari(1) mcal(1) | 3 | + | Z |
| Martin Forst | jpnm(1) a2rp(1) shrk(1) | 3 | + | Z |
| Jozef Gandzala | hari(1) shrk(1) mcal(1) | 3 | + | Z |
| Jakub Hajic | smsl(1) ucol(1) wcfq(1) poke(1) mcal(1) | 3 | + | Z |
| Jiri Hudec | ucol(1) hari(1.5) shrk(1) | 3.5 | + | Z |
| Tobias Hudec | ccom(1) emlr(1) shrk(1) | 3 | + | Z |
| Petr Chudoba | smsl(1) ccom(1) shrk(1) | 3 | + | Z |
| David Jirout | ucol(1) emlr(1) a2rp(1) | 3 | + | Z |
| Jan Klimovic | ccom(1) rtab(1) a2rp(1) | 3 | + | Z |
| Honza Kokoska | jpnm(1) ucol(1) smsl(1) wcfq(1) | 1 | ||
| Jaroslav Kubat | jpnm(1) ccom(1) shrk(1) | 3 | + | Z |
| Daniel Lovasko | wcfq(1) emlr(1) a2rp(1) | 3 | + | Z |
| Jan Matejka | z | Z | ||
| Oskar Maxa | jpnm(1) ccom(1) mcal(1) | 3 | + | Z |
| Vendula Michlikova | jpnm(1) hari(1) mcal(1) | 3 | + | Z |
| Michal Ondrejas | jpnm(1) | 1 | + | |
| Palko Otto | 0 | |||
| David Pegrimek | jpnm(1) ucol(1) smsl(1) wcfq(1) ccom(1) poke(1) rtab(1) | 3 | + | Z |
| Martin Pilny | jpnm(1) emlr(1) shrk(1) | 3 | + | Z |
| Renata Sevcikova | jpnm(1) ucol(1) smsl(1) wcfq(1) poke(1) | 2 | ||
| Vita Smid | z | Z | ||
| Jakub Stasta | ucol(1) emlr(1) shrk(1) | 3 | + | Z |
| Pavel Taufer | jpnm(1) poke(1) ccom(1) shrk(1) | 3 | + | Z |
| Michal Vavrek | smsl(1) ccom(1) shrk(1) | 3 | + | Z |
| Ondrej Tazlar | 0 | |||
| --- Pan Po --- | 0 |
Potrebujete-li s necim poradit, udelate nejlepe, kdyz mi napisete mail. Konkretni dotazy muzeme vyresit rovnou po mailu.
Pokud budete mit nejake obecnejsi nejasnosti, nezoufejte, domluvime se a nekdy se potkame (na MS byvam temer kazdy den). Cas mivam obvykle po cviceni, jinak se na MS vyskytuji nikoliv uplne pravidelne, lec kazdopadne velmi casto, v kancelari c. 322 (3. patro, naproti S3) nebo v malostranskem Starbucks. ;-)