Cvičení se konají pondělí, 10:40 a 12.20 v SU2 na Malé Straně. Na obou cvičeních se probírá zhruba stejná látka, pokud se vám jedno nehodí, můžete v omezené míře přijít na druhé. Dlouhodobé přesuny či přesuny více lidí prosím konzultujte předem.
Podmínky k získání zápočtu
Zápočet získáte jedním z následujících způsobů:
- splněním 2/3 domácích úkolů (budou zadávány na cvičení a uvedeny zde na webu) - vždy do dalšího týdne, NEBO (kolik má kdo splněno můžete zjistit na stránce úkoly)
- vypracováním netriviálního zápočtového programu v shellu nebo awk, rozsahu asi 3-krát většího než zkoušková písemka - pro více informací mi napište email nebo se zeptejte na hodině
Domácí úkoly
Domácí úkoly, které se dají odevzdat mi prosím posílejte jako přílohy emailu. Úkoly, které nejde odevzdat,
nebudu nijak kontrolovat (ale ani se nepočítají jako body ke splnění zápočtu), je ale ve vašem zájmu je splnit.
- Vytvořte soubor
a/b/--help
, učiňte cd a/b
a následně tento soubor smažte. Zašlete alespoň dvě možná řešení.
- V adresáři
fotky
vypište soubory (soubory s příponou .jpg nebo .JPG) větší než 1MB.
- V adresáři
/usr/lib
je spoustu souborů a symbolické odkazy na ně. Vypište soubory, na které žádný přímý symbolický odkaz z /usr/lib
nevede (tedy pokud vede z /lib
, jako by nebyl. (Nápověda: o symbolických odkazech pomůže man ln
. Možná se budou hodit sort
a uniq
. Buďte vynalézaví.)
- Napište jednoduchý skript
mktemp
: skript vytvoří soubor v /tmp
s jedinečným jménem (podle nějaké šablony, kterou si můžete zvolit) a vypíše jeho plnou cestu na standardní výstup. Pokud skriptu předáte nějaký argument, použije se namísto /tmp
.
- Tentokrát máme dva podúkoly:
- Napište skript rev v sedu (každou řádku napíše pozpátku).
- Napište skript, který smaže duplicitní prázdné řádky.
- Napište skript
permcut
, který prohází až 9 sloupečků souboru podle libovolné permutace (umí i vynechat). Skript jako parametry bere oddělovač (jednoznakový) a následně permutaci sloupečků, jaká má být na výstupu. Příklad: permcut : 7 5 1 2
- Napište skript
unpackgood
, který dostane jediný argument (archiv .tar, .tar.gz, .zip, ...) a chytře ho rozbalí: pokud by po rozbalení vzniklo více adresářů či souborů (tedy by to udělalo bordel), vytvoří podadresář a rozbalí do něj.
- Stáhněte si soubor se seznamem letišť a států a vypište všechny mimo USA ve formátu
kod (napr. PRG) (tab) nazev letiste (tab) kod zeme
(použijte co nejvíce awk).
- Napište skript
vcp
, který pomocí dd
bude kopírovat soubory a vykreslovat progress bar, kolik je již okopírováno (v bytech). Skript fungující pro jeden soubor je za bod, pro více souborů za dva body (progress bar ukazuje celkovoé velikosti).
Probraná látka
1. hodina (17. 2. 2014)
- Seznámení s prostředím, shell
- Základní příkazy -
man
, cd
, ls
, mkdir
, rmdir
, rm
, mv
, touch
- Úlohy ze cvičení:
- Použijte
man
a seznamte se s příkazy, které budeme používat.
- Vytvořte adresáře
a
, a/b
, a/bb/c
(zkuste také pouze jedním příkazem všechny naráz).
- Vytvořte soubor
a/b/c
, a/b/cd
a a/b/.c
(zkuste také pouze jedním příkazem všechny naráz).
- Vypište soubor v
a/b
končící na písmeno c
.
- Vytvořte soubor, v adresáři, s obsahem, víceřádkovým.
- Vytvořte soubor
a/b/*
a pak ho po sobě smažte. Dejte si pozor, ať toho nesmažete víc!
- Vytvořte soubor
a/b/--help
, učiňte cd a/b
a následně tento soubor smažte. (Toto se stalo prvním domácím úkolem).
- Úloha B: Vytvořte soubory
-r
, -f
, ~
, *
a a
.
- Úloha C: Smažte soubory z úlohy B. Pozor: váš cvičící neručí za to, že se vám nestane něco ošklivého při provádění této úlohy. Na vlastní nebezpečí.
2. hodina (24. 2. 2014)
Zaskakoval Martin Pelikán.
- Roury a přesměrování.
- Základy programu find: -name, -type, -exec.
- Příkazy
head
, tail
, cat
, wc
,rev, echo
, tee
, last
3. hodina (3. 3. 2014)
- Práce s editorem vi(m): otevření a zavření souboru (
vi soubor
, :wq!
a variace), editace
(i, I
, a
, A
, o
, O
, x
, dd
, yy
, p
, P
, h
, j
, k
, l
).
- Nepovinný nácvik používání hjkl: arachnid (pouze na druhém cvičení).
- Psaní a volání jednoduchých scriptů.
- Jednoduché použití subshellu:
( ...; ... )
- Úlohy ze cvičení:
- Během plnění následujících úloh si procvičte operace s vim-em (primární úkol).
- Napiště script, který spočte nespustitelné soubory v adresářích
/bin
, /usr/bin
, /lib
, /usr/lib
- ... a setřiďte tyto počty od největšího
- ... a vypište k nim legendu, jaký počet patří jakému adresáři
- BONUS:Udělejte to pro adresáře, které script získal na příkazové řádce.
- BONUS2:... a zajistěte, aby si postěžoval, pokud mu někdo předá soubor.
5. hodina (17. 3. 2014)
- Práce s proměnnými, podmínkami, cykly.
- Argumenty skriptu jako proměnné $n.
- Příkazy env, test, read.
- Úlohy ze cvičení:
- Prozkoumejte proměnné prostředí.
- Napište skript, který pozdraví uživatele, který ho spustil (celým jménem).
- Napište skript, který vypíše $PATH, každou cestu na vlastní řádek (a pro každou spočítá spustitelné soubory, které obsahuje).
- Napište skript, který bere jako argument username uživatele a vypíše jeho celé jméno (pokud neexistuje, ať si postěžuje; bere i více uživatelů najednou).
- Napište skript, který najde soubory (v adresáři zadaném jako argument), které vlastníte, ale nemáte na ně právo číst. Pro každý takový se optá, zda to má napravit a pokud odpovíte "ano", napraví.
- Napište analogii příkazu which.
- Napište skriptá "hádej číslo od do", který říká, zda uživatel hádal větší, menší, nebo že uhodl. (Uprav ho tak, aby jednou za hru v náhodném místě zalhal)
- Vypište soubory v $PATH, které nemáte právo spustit.
6. hodina (24. 3. 2014)
- Práce s regulárními výrazy, příkaz
grep
- Úlohy ze cvičení (na některá cvičení jsme použili slovník):
- Najděte všechny uživatele, kteří mají login pouze ze samohlásek.
- Najděte všechny uživatele, kteří mají iniciály složené ze samohlések (ze stejných písmen).
- Najděte ve slovníku všechna "šestnáctková" slova, tedy slova zaměnistelná s číslem v šestnáctkové soustavě.
- Najděte slova obsahující trojpísmeno.
- Najděte slovo s nejvíce souhláskami.
- Najděte slovo s nejlepším poměrem souhlásek a samohlásek (zkuste oba extrémy).
- Napište regulární výraz na zjištění platné emailové adresy (nemusí být úplně podle standardu; zkuste ji použít na vypreparování emailových adres z webové stránky).
- Další úlohy k procvičení:
- Ve slovníku nalezněte slova, která mají několik (stejných, různých, nezajímá) zdvojených písmen. Zkuste najít slovo s nejvíce zdvojenými písmeny.
- Napište skript, který z webové stránky vypreparuje všechny odkazy.
- Napište regulární výraz na poznání palindromů délky 5.
- Napište regulární výraz rozpoznávající nezáporná čísla menší, než 110 (ostře).
7. hodina (31. 3. 2014)
- Další regulární výrazy, příkaz
sed
- Úlohy ze cvičení (vše pište v sedu):
- Rozepište věty na vstupu tak, aby na každém řádku byla jedna věta. Věta se pozná tak, že začíná velkým písmenem a končí tečkou. Předpokládejte, že se nikde nevyskytují vícenásobné mezery, ani žádné tabulátory. Jednodušší varianta navíc předpokládá, že žádná věta není obsažena na dvou řádcích, těžší již nikoliv. Zkuste napsat alespoň nějaké řešení a potom nejelegantnější.
- Napište skript, který setřídí posloupnost 0 a 1 zadanou na jednom řádku vstupu.
- Napište skript, který z textu vymaže slova délky nanejvýš 3. Zkuste napsat alespoň nějaké řešení a potom nejelegantnější.
- Zamyslete se, jak v sedu implementovat grep -o pro fixní regulární výraz.
- Napište tac.
8. hodina (7. 4. 2014)
- Procvičování
sed
u.
- Úlohy ze cvičení (vše pište v sedu):
- Napište generátor Makefilů (nebo Mejfajlů?): skript v sedu dostane na každém řádku název souboru ve tvaru src/*.text a transformuje ho na pravidlo, třeba:
dst/a.html: src/a.text
compile src/a.html dst/a.text
- Napište skriptý podobný skriptu
cut
, který umí prohodit pořadí sloupečků (pro fixní oddělovač a sloupečky, pro libovolné za domácí úkol).
- Napište skript rozpoznávající palindrom na každém řádku. Před každý palindrom připíše (ano), před ostatní řádky (ne).
- Napište skript, který smaže všechny řádky, které mají různý počet souhlásek a samohlásek.
9. hodina (14. 4. 2014)
- Job control, funkce v shellu.
- Úlohy ze cvičení:
- Vyzkoušejte si job control: spusťe si true, vim, mc (a cokoliv dalšího); něco na pozadí, něco na popředí, přpněte se mezi programy a zkuste je zabít.
- Napište webového pavouka: pavouk bude stahovat stránky z dané adresy, hledat odkazy a následovat jed; přitom shromažďuje informaci dle vašeho výběru (seznam odkazů, emaily, telefonní čísla,...)
10. hodina (21. 4. 2014)
11. a 12. hodina (28. 4. 2014)
Zaskakoval Martin Pelikán.
- Programování v awk, job control
13. hodina (21. 4. 2014)
- Zkoušková písemka na nečisto: programovala se kalkulačka s výrazama v postfixu a proměnnýma.
Doporučená literatura
Pokud jste něco nepochopili na přednášce, cvičení, nebo se chcete jenom zdokonalit, nabízím několik hodnotných odkazů,
kam má cenu se podívat.
Další odkazy
- PuTTY - SSH klient pro windows