Informace níže se nevztahují k současnému semestru.
Stránka pro aktuální semestr je zde.
Tato stránka poskytuje přehled očekávaných učebních výstupů ze všech cvičení. Může se hodit pokud hledáte nějaké konkrétní téma, ale nepamatujete si, na kterém cvičení se probíralo.
Cvičení #1
Znalosti konceptů
- vysvětlit, proč není grafické uživatelské rozhraní pevnou součástí Linuxu
- vyjmenovat několik rozdílů mezi různými grafickými rozhraními dostupnými v systému Linux
- vysvětlit v širších souvislostech, co je to distribuce Linuxu
- vysvětlit, co lze chápat pod pojmem unixová rodina operačních systémů
- vyjmenovat několik druhů objektů, které jsou obvykle potřebné pro softwarové projekty
- vysvětlit v širším významu, co je to verzovací nástroj
- vysvětlit základní (vysokoúrovňové) operace verzovacích nástrojů
Praktické dovednosti
- nastartovat vlastní počítač do Linuxu (buď použitím USB disku, dual-bootem nebo přes virtuální stroj)
- přihlásit se do grafického linuxového prostředí
- přihlásit se do fakultní instance GitLabu
- vytvořit nový projekt na GitLabu
- nahrát nové změny na GitLab pomocí webového rozhraní a vytvořit na něm commit
- upravit existující soubory v GitLabovém projektu (ve webovém rozhraní GitLabu)
- upravit nastavení upřednostňovaného (Linuxového) grafického prostředí
- vytvořit jednoduchou GitLabovou issue v projektu
Cvičení #2
Znalosti konceptů
- vysvětlit, kdy je rozhraní příkazového řádku lepší (či horší) volbou než grafická aplikace
- vysvětlit rozdíl mezi (emulátorem) terminálu a shellem
- vysvětlit, co je to cesta k souboru
- vysvětlit rozdíl mezi relativní a absolutní cestou
- vysvětlit, jak fungují tzv. shell wildcards (názvy souborů)
- vysvětlit, co jsou argumenty příkazové řádky (options, switches)
- vysvětlit užitečnost oddělovače
--
(při použití wildcardů u zvláštně pojmenovaných souborů) - vysvětlit, co je domovský adresář (home directory)
Praktické dovednosti
- spustit a ukončit emulátor terminálu
- nastavit si oblíbený emulátor terminálu
- procházet souborový systém pomocí nástrojů textového uživatelského rozhraní (např.
mc
neboranger
) - procházet souborový systém pomocí příkazů
ls
acd
- použit základní přepínače příkazu
ls
, jako jsou-l
,-h
nebo-a
- použít zástupné znaky (wildcards) pro omezení příkazů na určité podmnožiny souborů
- spustit Pythoní skript z příkazové řádky
- zobrazit obsah textových soubor pomocí utility
cat
- zobrazit obsah binárních souborů jako hexadecimální výpis pomocí programu
hexdump
- identifikovat typ souboru pomocí nástroje
file
- využívat vestavěné manuálové stránky (základní operace)
- používat schránky dostupné v grafických prostředích Linuxu
- používat doplňování tabelátorem pro rychlejší psaní názvů souborů a cest
- používat soubory se neobvyklými názvy
Cvičení #3
Znalosti konceptů
- vysvětlit, co znamená skript (v kontextu Linuxového prostředí)
- vysvětlit, co je to shebang a jak ovlivní spuštění skriptu
- chápat rozdíl mezi tím, zda skript má nebo nemá nastavený spustitelný bit
- vysvětlit, co je pracovní adresář (working directory)
- vysvětlit, proč je pracovní adresář soukromou “vlastností” běžícího programu
- vysvětlit, jak jsou argumenty (parametry) předané skriptu s shebangem
- vysvětlit, co je standardní výstup a vstup
- vysvětlit, proč přesměrování standardního vstupu/výstupu není (přímo) viditelné uvnitř programu
- vysvětlit, jak se liší
cat foo.txt
acat <foo.txt
- vysvětlit, jak může být více programů používajících standardní vstup/výstup složeno (propojeno) dohromady
- volitelné: vysvětlit, proč
cd
nemůže být normální spustitelný soubor jako/usr/bin/ls
Praktické dovednosti
- vytvořit Linuxový skript se správným shebangem
- nastavit executable bit skriptu pomocí utility
chmod
- přistupovat k argumentům příkazové řádky ve skriptu Pythonu
- přesměrovat standardní vstup a výstup programů v shellu
- používat standardní vstup a výstup v Pythonu
- použít rouru (pipe)
|
pro řetězení více programů dohromady - používat základní filtry:
cut
,sort
, … - použít
grep -F
pro filtrování řádků odpovídajících zadanému vzoru
Cvičení #4
Znalosti konceptů
- vysvětlit, co je pracovní kopie Gitu (klon, working copy)
- vysvětlit, proč existují dva druhy výstupu (výstupních proudů): stdout a stderr
- vysvětlit co je návratový kód programu (exit code)
- vysvětlit rozdíly a typická využití pro pět hlavních rozhraní, která může využít CLI program: argumenty, stdin, stdout, stderr a návratová hodnota (exit code)\n
- volitelné: vysvětlit, co je to deskriptor souboru (z pohledu aplikace, nikoliv OS/kernelu)
Praktické dovednosti
- nastavit informace o autorovi v Gitu
- nastavit výchozí editor v shellu (nastavení
EDITOR
v~/.bashrc
) - naklonovat Gitový repozitář v shellu přes HTTPS
- prohlédnout změny v Gitové pracovní kopii (příkaz
git status
) - vytvořit commit v Gitu z příkazové řádky (příkazy
git add
agit commit
) - nahrát nové commity na Git server nebo stáhnout nové do pracovní kopie\n(za předpokladu projektu s jedním uživatelem, příkazy
git push
agit pull
)\n - prohlédnout si souhrnné informace o předchozích commitech pomocí
git log
- volitelné: upravit si chování Gitu pomocí aliasů
- přesměrovat standardní výstup a standardní chybový výstup programu v shellu
- změnit návratovou hodnotu (exit code) pro Pythoní skripty
- používat speciální soubor
/dev/null
- používat standardní chybový výstup v Pythonu
- volitelné: upravit si chování shellu pomocí aliasů
- volitelné: upravit si konfiguraci shellu pomocí
.bashrc
a.profile
skriptů - volitelné: upravit si vzhled promptu pomocí proměnné
PS1
Cvičení #5
Znalosti konceptů
- vysvětlit základní principy síťové komunikace (bez ohledu na OS/zařízení)
- vysvětlit základní principy asymetrické kryptografie
- do detailu vysvětlit, jak se dá použít asymetrická kryptografie (privátní a veřejný klíč) pro autentizaci uživatele\n
- vysvětlit, co je SSH a jaké funkce nabízí
- vysvětlit, jak se liší spouštění programů lokálně a vzdáleně přes SSH
- vysvětlit rozdíl mezi používáním Gitu přes HTTPS a přes SSH
- vysvětlit, proč je použití
nmap
obvykle omezeno/zakázáno správci sítě
Praktické dovednosti
- nastavit proměnnou
PS1
pro rozlišení různých strojů - použít příkaz
ssh
na přihlášení se ke vzdálenému stroji - spouštět příkazy na vzdáleném stroji pomocí SSH
- používat příkaz
hostname
- přenášet soubory přes SSH pomocí
cat
- nastavit přihlašování bez hesla na vzdáleném Linuxovém stroji pomocí páru privátního a veřejného klíče
- nastavit autentizaci veřejným klíčem na GitLabu
- použít
git clone
(apull
apush
) přes SSH - volitelné: nastavit zkratky pro SSH
- volitelné: používat základní funkce terminálového multiplexeru
tmux
- použít
nc
pro základní operace - použít
nmap
pro základní skenování sítě - použít
ip
k dotazování na stav aktuální síťové konfigurace - použít utility
ping
atraceroute
jako základní nástroje pro ladění síťových problémů - volitelné: použít NetworkManager k nastavení statických IP adres
Cvičení #6
Znalosti konceptů
- vysvětlit rozdíl mezi forkem projektu a klonem (pracovní kopií) repozitáře
- vysvětlit, co je větev v Gitu
- vysvětlit, co je feature branch
- vysvětlit, co je mergování větví v Gitu
- vysvětlit, co je to merge (pull) request a kdy je užitečný
- vysvětlit, co je to Git remote
- vysvětlit, kdy může dojít ke konfliktu při slučování (merge) v Gitu a jak jej lze vyřešit
- vysvětlit, co se obvykle míní tzv. upstream repozitářem (projektem)
Praktické dovednosti
- vytvořit větev v Gitu lokálně pomocí příkazu
git branch
- nahrát novou větev v Gitu na vzdálený server
- vytvořit merge request (žádost o začlenění) z feature větve v GitLabu
- přepínat mezi větvemi (
git checkout
) - sloučit (merge) lokální větve Gitu pomocí
git merge
- řešit konflikty při mergování
- nastavit Git remotes
- volitelné: používání prográmku
youtube-dl
- volitelné: používání VLC z příkazové řádky
Cvičení #7
Znalosti konceptů
- vysvětlit, co je to proměnná prostředí
- vysvětlit, jak v shellu funguje omezení viditelnosti (scoping) proměnných
- vysvětlit rozdíl mezi neexportovanou a exportovanou proměnnou (prostředí) v shellu
- vysvětlit, jak je proměnné
$PATH
používána v shellu - vysvětlit, jak změna
$PATH
ovlivní spouštění programů - vysvětlit, jak funguje expanze v shellu a rozdělení na argumenty příkazové řádky
- vysvětlit problémy se souběžností, které mohou nastat při používání dočasných souborů
- vysvětlit, co je to kontrola stylu a linter
- vysvětlit, jaké problémy mohou odhalit nástroje pro kontrolu stylu
- volitelné: vysvětlit, proč
$PATH
obvykle neobsahuje aktuální adresář
Praktické dovednosti
- použít Pandoc pro převod mezi různými textovými formáty
- nastavovat a číst proměnné prostředí v shellu
- vyhodnocovat matematické výrazy v shellu pomocí konstrukce
$(( ))
- používat nahrazování příkazů (command substitution,
$( )
) - skládat programy pomocí
&&
a||
v shellových skriptech - vytvářet a používat funkce v shellu
- využít subshell pro seskupení několika příkazů
- používat a interpretovat výsledky ShellChecku
- používat bezpečně v shellových skriptech dočasné soubory
- volitelné: číst proměnné prostředí v Pythonu
- volitelné: vytvoření vlastních šablon pro Pandoc
Cvičení #8
Znalosti konceptů
- vysvětlit, jak a proč je software distribuován ve formě balíčků
- vysvětlit jaké druhy účtů existují na Linuxu a čím se liší (např.
johndoe
,root
anobody
) - vysvětlit rozdíl mezi účtem
root
a ostatními účty - vysvětlit, proč se obecně nedoporučuje provádět neadministrativní úlohy pod účtem
root
- obecně vysvětlit, jak lze
sudo
použít pro správu systému - porozumět nebezpečím používání
sudo
- vysvětlit, co je to služba (démon)
- vysvětlit životní cyklus a možné stavy služeb
- vysvětlit, co je to protokol programu a jak jej lze spravovat
Praktické dovednosti
- používat
getent
na získání informací o existujících uživatelských účtech - používat
sudo
pro zvýšení oprávnění spouštěného programu - používat správce balíčků (package manager) pro instalaci a odinstalaci balíčků
- používat správce balíčků (package manager) pro upgrade celého systému
- používat systemctl ke spuštění/zastavení služeb
- používat
systemctl
pro zajištění automatického spuštění služby při startu počítače - tisknout a skenovat v Linuxu
- volitelné: používat
journalctl
k zobrazení logů - volitelné: používat
useradd
pro vytvoření nového uživatelského účtu
Cvičení #9
Znalosti konceptů
- vysvětlit, jak exit kódy umožňují řídit podmínky a cykly v shellových skriptech
- vysvětlit pro konstrukci shellu
if true; then echo "true"; fi
, jaké příkazy se v ní provádějí a jakým způsobem se vyhodnocuje - vysvětlit, jaká hlediska jsou důležitá při rozhodování mezi použitím shellu a Pythonu
Praktické dovednosti
- používat v shellových skriptech řídicí struktury (
for
,while
,if
,case
) - použít příkaz
read
- používat
getopt
pro parsování argumentů příkazové řádky - používat
.
asource
k načtení funkcí z různých souborů - použít
scp
na kopírování souborů mezi místním a vzdáleným počítačem - volitelné: použít
rsync
pro synchronizaci celých adresářů
Cvičení #10
Znalosti konceptů
- vyjmenovat několik kroků, které jsou často nutné k vytvoření distribuovatelného softwaru\n(např. balíčku nebo instalačního programu) ze zdrojového kódu a dalších základních artefaktů\n
- vysvětlit, proč by sestavování softwaru mělo být reprodukovatelným procesem
- vysvětlit, jak je možné zachytit proces sestavení softwaru
- vysvětlit pojmy jazyků, které se používají pro zachycení potřebných kroků\npro sestavení (distribuci) softwaru\n
- vysvětlit, co je to regulární výraz (regex)
Praktické dovednosti
- sestavit projekty používající
make
- vytvořit Makefile, který řídí sestavení jednoduchého projektu
- používat pravidla se zástupnými znaky v
Makefile
- volitelné: používat proměnné v
Makefile
- volitelné: používat základní rozšíření GNU Make pro zjednodušení složitějších
Makefile
- vytvářet a používat jednoduché regulární výrazy na filtrování textu
grep
em - provádět nahrazení vzoru pomocí
sed
u
Cvičení #11
Znalosti konceptů
- vysvětlit, jaká jsou základní přístupová práva na unixových operačních systémech pro soubory a pro adresáře
- vysvětlit, co znamenají jednotlivá oprávnění
r
,w
ax
pro běžné soubory a pro adresáře\n - vysvětlit, co je to signál v kontextu Linux procesů
- vysvětlit rozdíl mezi normálním (obyčejným) souborem, adresářem, symbolickým odkazem, souborem zařízení a souborem reprezentujícím stav systému (např. ze souborového systému
/proc
)\n - vyjmenovat základní adresáře nejvyšší úrovně v typické instalaci Linuxu a popsat jejich funkci
- vysvětlit v obecné rovině, jak je strom adresářů vytvořen připojením jednotlivých (souborových) podsystémů
- vysvětlit, proč Linux zachovává oddělení archivace a komprese (např.
tar
agzip
) - vysvětlit, co je to set-uid bit
- vysvětlit, co je proces a jak se liší od spustitelného souboru
- vysvětlit rozdíl mezi vlastnictvím souboru a běžícího procesu
- volitelné: vysvětlit, co je POSIX ACL, jen základní přehled
Praktické dovednosti
- zobrazovat a měnit základní přístupová oprávnění souborů
- pomocí
ps
zobrazit seznam existujících procesů (včetně přepínačů-e
,-f
a--forest
) - použít
pgrep
pro vyhledání konkrétních procesů - poslat signál běžícímu procesu
- použít
htop
k interaktivnímu sledování existujících procesů - připojit a pracovat s disky pomocí příkazu
mount
(jak s fyzickými tak s obrazy disků) - získat souhrnné informací o využití disku pomocí příkazu
df
- použít pro práci se standardními linuxovými archivy
tar
neboatool
- použít
find
se základními predikáty (-name
,-type
) a akcemi (-exec
,-delete
)
Cvičení #12
Znalosti konceptů
- vysvětlit rozdíl mezi (normálním) přesměrováním SSH portu a tzv. reverzním přesměrováním
- vysvětlit, co jsou požadavky (závislosti na knihovnách)
- vysvětlit základy sémantického verzování
- vysvětlit, jaké jsou výhody a nevýhody instalace závislostí pro celý systém vůči\njejich instalaci ve virtuálním prostředí\n
- poskytnout vysokoúrovňový přehled virtuálních prostředí
- vysvětlit výhody a nevýhody uvedení tranzitivních závislostí ve srovnání s uvedením jen přímých\n
- vysvětlit výhody a nevýhody uvedení přesné verze nebo jen minimální
Praktické dovednosti
- použít přesměrování portu SSH pro přístup ke službě dostupné na vzdáleném zařízení loopback
- použít reverzní předávání portů SSH pro připojení k počítači za NATem
- vytvořit nové virtuální prostředí (pro Python) pomocí
python3 -m venv
- aktivovat a deaktivovat virtuální prostředí
- nainstalovat závislosti projektu do virtuálního prostředí pomocí
pip
- vyvíjet program uvnitř virtuálního prostředí (s projektem používajícím
setup.cfg
apyproject.toml
)\n - nainstalovat projekt, který používá
setup.cfg
- volitelné: připravit projekt Pythonu pro instalaci
Cvičení #13
Znalosti konceptů
- vysvětlit, co je to kontejner
- porovnat kontejner s virtuálním strojem a procesem
- vysvětlit, kde se hodí izolace, kterou nabízí kontejnery
- vysvětlit životní cyklus kontejneru
- vysvětlit, proč použití virtuálních prostředí (nebo jiných typů sandboxů)\nnení uvnitř kontejneru obvykle potřeba\n
- vysvětlit rozdíl mezi běžícím kontejnerem a obrazem kontejneru
- vysvětlit principy continous integration
- vysvětlit výhody používání continous integration
- vysvětlit v širším smyslu, jak funguje GitLab CI
Praktické dovednosti
- spustit v Podmanu interaktivní kontejner
- spustit kontejner Podmanu se službou
- zpřístupnit (publish) porty kontejneru
- připojit svazek dovnitř kontejneru
- vymazat nepoužívané kontejnery a obrazy
- nastavit GitLab CI pro jednoduché projekty
Cvičení #14
Znalosti konceptů
- používat
xargs
- vysvětlit výhody používání automatizovaných testů funkčnosti
- vysvětlit, co je to obraz disku
- vysvětlit, proč nejsou zapotřebí žádné speciální nástroje pro práci s obrazy disků
Praktické dovednosti
- spouštět testy založené na BATS
- porozumět základní struktuře testů BATS
- volitelné: použít
lsblk
ke zjištění informací o úložných zařízeních - volitelné: vytvářet jednoduché testy BATS
- volitelné: opravit poškozené souborové systémy pomocí programů z rodiny
fsck
- volitelné: používat
photorec
k obnově souborů z poškozeného souborového systému