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ětlete, 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ů)
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 pracovní kopie Gitu (klon, working copy)
- volitelné: vysvětlit, proč
cd
nemůže být normální spustitelný soubor jako/usr/bin/ls
- volitelné: rozumět hlavním rozdílům mezi
/bin/sh
a/bin/bash
shebangy
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 v Pythonovém skriptu
- nastavit informace o autorovi v Gitu
- nastavení výchozího editoru 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ření commitu 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ů
Cvičení #4
Znalosti konceptů
- 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, proč existují dva druhy výstupu (výstupních proudů): stdout a stderr
- 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
- 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
- přesměrovat standardní (chybový) výstup a vstup CLI programů v shellu
- změnit návratovou hodnotu (exit code) pro Pythoní skripty
- používat speciální soubor
/dev/null
- 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 - 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é druhy účtů existují na Linuxu a čím se liší (např.
johndoe
,root
anobody
) - 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, jaká jsou základní přístupová práva na unixových operačních systémech 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 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 programu
- volitelné: vysvětlit, co je POSIX ACL, jen základní přehled
Praktické dovednosti
- nastavení proměnné
PS1
pro rozlišení různých strojů - použít příkazu
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řenos souborů 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žití
git clone
(apull
apush
) přes SSH - zobrazovat a měnit základní přístupová oprávnění souborů
- pomocí
ps
zobrazít seznam existujících procesů (včetně přepínačů-e
,-f
a--forest
) - použít
htop
k interaktivnímu sledování existujících procesů - volitelné: nastavit zkratky pro SSH
- volitelné: používat základní funkce terminálového multiplexeru
tmux
Cvičení #6
Znalosti konceptů
- vysvětlit, co je to proměnná prostředí
- vysvětlit, jak v shellu funguje omezení oblasti platnosti (scoping) pro proměnné
- 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
- 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ů
- volitelné : číst proměnné prostředí v Pythonu
- volitelné: vytvoření vlastních šablon pro Pandoc
Cvičení #7
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
- používat aliasy Gitu pro efektivnější práci
- volitelné: používání prográmku
youtube-dl
- volitelné: používání VLC z příkazové řádky
Cvičení #8
Znalosti konceptů
- vysvětlit, co je to kontrola stylu a linter
- vysvětlit, jaké problémy mohou odhalit nástroje pro kontrolu stylu
- vysvětlit problémy se souběžností, které mohou nastat při používání dočasných souborů
- 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 dočasné soubory bezpečným způsobem
- 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žívat a interpretovat výsledky ShellChecku
- 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ů
- vysvětlit, jak a proč je software distribuován ve formě balíčků
- vysvětlit, co je to regulární výraz (regex)
- 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
- vysvětlit výhody používání automatizovaných testů funkčnosti
Praktické dovednosti
- vytvářet a používat jednoduché regulární výrazy na filtrování textu
grep
em - provádět nahrazení vzoru pomocí
sed
u - 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 - volitelné: používat
journalctl
k zobrazení logů - volitelné: používat
useradd
pro vytvoření nového uživatelského účtu - volitelné: používat SANE pro přístup ke skenerům v Linuxu
- spouštět testy založené na BATS
- porozumět základní struktuře testů BATS
- volitelné: vytvářet jednoduché testy BATS
Cvičení #11
Znalosti konceptů
- vysvětlit, co je to obraz disku
- vysvětlit, proč nejsou zapotřebí žádné speciální nástroje pro práci s obrazy disků
- 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, 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 vs\njejich instalaci ve virtuálním prostředí\n
- poskytnout vysokoúrovňový přehled virtuálních prostředí
- vysvětlit výhod 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í
- vysvětlit, proč Linux zachovává oddělení archivace a komprese (např.
tar
agzip
)
Praktické dovednosti
- 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
- 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é: použít
lsblk
ke zjištění informací o úložných zařízeních - volitelné: připravit projekt Pythonu pro instalaci
Cvičení #12
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
Praktické dovednosti
- používat
xargs
- použít
find
se základními predikáty (-name
,-type
) a akcemi (-exec
,-delete
) - spustit v Podmanu interaktivní kontejner
- spustit v Podmanu kontejner se službou
- zpřístupnit (expose) porty kontejneru
- připojit svazek dovnitř kontejneru
- vymazat nepoužívané kontejnery a obrazy
Cvičení #13
Znalosti konceptů
- vysvětlit, proč je použití
nmap
obvykle omezeno/zakázáno správci sítě - vysvětlit rozdíl mezi (normálním) přesměrování SSH portu a tzv. reverzním přesměrováním
- vysvětlit, co je to signál v kontextu Linux procesů
Praktické dovednosti
- použít
nc
pro základní operace - použít
pgrep
pro vyhledání konkrétních procesů - poslat signál běžícímu procesu
- použít přesměrování portu SSH pro přístup ke službě dostupné na zařízení loopback
- použít reverzní předávání portů SSH pro připojení k počítači za NAT
- 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 utilit
ping
atraceroute
jako základních nástrojů pro ladění síťových problémů - volitelné: použít SSH agenta a SSH klíče chráněné pomocí passphrase
- volitelné: použít NetworkManager k nastavení statických IP adres
- volitelné: tisknout a skenovat v Linuxu
- 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
Cvičení #14
Znalosti konceptů
- vysvětlit principy continous integration
- vysvětlit výhody používání continous integration
- vyjmenovat několik kroků, které jsou často nutné k vytvoření distribuovatelného softwaru\n(např. balíček nebo instalační program) 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 v širším smyslu, jak funguje GitLab CI
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
- nastavit GitLab CI pro jednoduché projekty
- volitelné: používat proměnné v
Makefile
- volitelné: používat základní rozšíření GNU Make pro zjednodušení složitějších
Makefile