[unix2016]. Skripty prosím (až na opravdu velké)
nepřikládejte jako přílohu, ale vložte prosím přímo do textu mailu.
Zápočet je nutnou podmínkou pro přihlášení na zkoušku a lze získat dvěma způsoby:
Získání dostatečného počtu bodů
Kde dostatečný počet jsou 2/3 celkového počtu bodů za domácí úlohy. Ty budou
buď malé (= řešení dodána mailem do začátku příštích cvičení), nebo velké (ty budou 2–3
za semestr a na jejich vyřešení budete mít 2 týdny). Kromě toho bude možné získat bonusové body.
Zápočtový program
Alternativním způsobem k získání zápočtu je napsat rozsáhlejší zápočtový program,
kterým ukážete, že máte UNIX v malíčku.
Téma zápočtového programu si musíte vymyslet sami, a je nezbytné ho se mnou
prodiskutovat dopředu, nejpozději do 31.5., nejlépe na začátku semestru.
Po odevzdání se dá předpokládat několik iterací (mé komentáře a výtky / Vaše opravy),
než usoudím, že program na zápočet stačí; ve vlastním zájmu tak nenechávejte
odevzdání na září.
awk, hard/soft linky — ln, strucne rozbalovani, diff, patch.
/etc/group, ale nejsou použita v /etc/passwd. Použijte příkaz comm.awk skript, který rozdělí vstup (stdin) do souborů pojmenovaných F1, F2, ..., přičemž každý soubor obsahuje hlavičku (první řádek vstupu), 3 řádky (odpovídající řádkům 1 + 3*(X-1) až 1+3*(X), je-li jméno souboru FX) a patičku (poslední řádku vstupu). Například na vstupu budou soubory vypadat takto:
F1,
F2,
F3,
F4getline, přesměrování výstupu funkce print.awk
sedawk skript, který vypíše pozpátku řádky vstupu (stdin) a to: pokud jsou sudé (číslo řádku vstupu je sudé), nebo celá řádka tvoří palindrom. Help: split, while, funkce.awk skript, který z html (čteného na vstupu) vypíše adresy, na které se odkazuje (to jest za značku <a href="adresa"> vypíše adresa). Pozor na to, že ta značka může být rozložena přes víc řádků a můžou tam být kolem a, href mezery. Help: nastavte vhodně RS a FS.export, spouštění na pozadí. eval
:(){ :|:& };: aget, aset, (třeba pomocí eval a shellových proměnných). Obě funkce by asymptoticky neměly pracovat pomaleji, než zápis/čtení z shellové proměnné.
Můžete předpokládat, že klíče odpovídají regexpu [0-9a-zA-Z]*. Příklady použití:
$ aset 1 'Hloupý Honza' $ aget 1 Hloupý Honza $ aset 2 'princ Bajaja' $ aset pokus 'kouzelník Hackustón' $ aget pokus kouzelník Hackustón
find (bez použití find). Minimální nutná funkcionalita je find /cesta/kde/hledat. Bonusové body budou přidělovány podle toho, jak bude Vaše řešení dobré v porovnání s nejlepším odevzdaným řešením. Nápověda: ls, funkce, rekurze.
sed skript co vypíše věk uživatelů co se jmenují mirek, vstup má 3-řádkové záznamy (id, jmeno, vek), viz lide.txt.
nvidia-smi
vypadá takto. Napište skript, který vypíše gpuX, kde X je id (vedle jména karty) gpu, které je nejméně zaneprázdněné
(nejchladnější co má alespoň půl volné paměti, není-li taková, tak jen nejchladnější).
Váš program by měl fungovat pro libovolný počet karet ve výpisu, ne jen 2 jako v příkladu. Zamyslete se, jak poznat začátek seznamu karet a jak ho vyfiltrovat.
Váš skript by neměl spoléhat na přesný počet mezer oddělující políčka, nebo přesnou velikost ascii-art rámečku (řekněme, že obě mohou záležetet na šířce terminálu),
naopak pořadí políček a jejich význam lze brát za daný.sedrename.sh pro hromadné přejmenování mnoha souborů pomocí regexpů nad jmény souborů.
Můžete se inspirovat třeba u Perlového rename. Vaše řešení
by mělo používat sed (nebo jiné technologie z přednášky), a měli byste mít rozmyšleno pro jaké ošklivé znaky v názvech souborů funguje,
a pro jaké ne (a proč je v takovém případě těžké to pro dané znaky rozšířit). Skript by měl být připraven na např. následující usecasy:
printf 'soubor1.srt\nsoubor2.srt\nsoubor3.srt\n' | rename 's/srt$/sub/'sed příkaz(y), co:
/etc/passwd na UPPERCASE
(jako první úkol z 4-tých cvik), hint y.sed -n '1p'.
[unix2016] auta kill, ps, pstree. wait, sleep.bg, fg, Ctrl+Z, spouštění na pozadi s &.killall, stačí implementovat jen option -s. Tzn, příklady spuštění: killall firefox, a killall -s 9 soffice.bin.find, xargs, sed
xargs,
který byl na cvičeních vyložen mlhavě./tmp (nebo podadresářích).
Použijte jen příkaz find (žádné |, narozdíl od následujícího příkladu).
find příkazu xargs v kombinaci s rm.getconf ARG_MAX, xargs --show-limits).
nasobilka.sh, který vypíše pěknou (nějak hezky naformátovanou) tabulku s násobilkou o velikosti N*N, kde N dostane skript jako argument.
Např: ./nasobilka.sh 3 může vypsat:
* 1 2 3 1 1 2 3 2 2 4 6 3 3 6 9
grep, regexpy, trochu find
mff.cuni.cz),user@mff.cuni.cz),https://mapy.cz/s/yp84)sort -n.
u-ss.ms.mff.cuni.cz běží Solaris, vyzkoušejte přenositelnost svých domácích úkolů!
$(()), expr, bc. Programování v shellu if, for, while, argumenty $1, $2, ...
sort
a locale (viz priklady5.sh).seq. Musí fungovat (alespoň) ve třech variantách (LAST, FIRST a INCREMENT jsou čísla), obdobně jako originál:
./seq LAST ./seq FIRST LAST ./seq FIRST INCREMENT LAST
$ ./count_zeros_fact 10 2
cut, join, tr
root:x:0:0:ROOT:/root:/bin/bashNápověda: slajdy.
666 romeo
681 julie
...
Nápověda v příkladech.
echo
/dev/null; clear; echo -n "Hello ";whoami|tr -d '\n';echo -e '!\nThat was a bad idea. Don'"'"'t copy code from websites you don'"'"'t trust!\n\nRead more: https://news.ycombinator.com/item?id=5508225\n'
echo
'Ahoj, jak se dnes vede? 123456789' — co se stane a proč?ls -l) všech složek (pouze složek) v pracovním adresáři.'"''" bez použití backslash'"''" s použítím backslash;`echo -e "\n"`echo.
cat s | cat >> s.
ssh (Putty), scp, who, write, mesg, nl, grep, du, watch, chmod, mail.
mcedit (pozor, na to jsem zapomněl), vim, nano, souborový manager mc.
chmod a další manipulace s právy je nutné zkoušet v e.g. lokálním adresáři — třeba /tmp.
vim. Například zde,
nebo v labu příkazem vimtutor.
skript.sh. Jakým příkazem mu nastavíte práva tak,
aby ho vlastník mohl číst a spouštět, členové skupiny ho mohli upravovat a číst a ostatní jen spouštět?
Vyjádřete to jak v textové, tak v osmičkové (číselné) notaci (tzn, 2 ekvivalentní příkazy).
Ahoj, je 01.03.2016, 14.32:12 pražského času a na stroji u-pl4 je právě zalogováno 4 uživatelů. Tvůj jinak neužitečný program!
command [OPTION]... [FILE]...
man, ls, cd, cp, mv, mkdir, rmdir, cat, echo, head, tail, sort, seq
| > >>, zběžně stdin, stdout, (stderr), cat soubor vs. cat < soubor
cat soubor >> soubor? Raději: cat soubor soubor > soubor_tmp ; mv soubor_tmp soubor
seq 100 > soubor)Máte-li nějaký technický problém či dotaz a nepomáhá ani přemýšlení a Google, napiště mi, nebo si se mnou domluvte konzultaci.
E-mail/Hangout: J.Moudrik@gmail.com