[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
sed
awk
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ý.sed
rename.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