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

Přejít na stránku cvičení

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

Přejít na stránku cvičení

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 nebo ranger)
  • procházet souborový systém pomocí příkazů ls a cd
  • 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

Přejít na stránku cvičení

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 a cat <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 v Pythonovém skriptu
  • 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

Přejít na stránku cvičení

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
  • 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 a git 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 a git 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

Přejít na stránku cvičení

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 a nobody)
  • 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 a x 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 (a pull a push) přes SSH
  • 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 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

Přejít na stránku cvičení

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

Přejít na stránku cvičení

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í #8

Přejít na stránku cvičení

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 bezpečně v shellových skriptech dočasné soubory
  • 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 . a source 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í #9

Přejít na stránku cvičení

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 grepem
  • provádět nahrazení vzoru pomocí sedu
  • 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
  • spouštět testy založené na BATS
  • porozumět základní struktuře testů BATS
  • volitelné: vytvářet jednoduché testy BATS

Cvičení #10

Přejít na stránku cvičení

Znalosti konceptů

  • 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, 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, proč Linux zachovává oddělení archivace a komprese (např. tar a gzip)

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
  • 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 nebo atool
  • volitelné: použít lsblk ke zjištění informací o úložných zařízeních

Cvičení #12

Přejít na stránku cvičení

Znalosti konceptů

  • 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 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í

Praktické dovednosti

  • používat xargs
  • použít find se základními predikáty (-name, -type) a akcemi (-exec, -delete)
  • 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
  • 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 a pyproject.toml)\n
  • nainstalovat projekt, který používá setup.cfg
  • volitelné: připravit projekt Pythonu pro instalaci

Cvičení #13

Přejít na stránku cvičení

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

  • spustit v Podmanu interaktivní kontejner
  • spustit kontejner Podmanu se službou
  • zpřístupnit (expose) porty kontejneru
  • připojit svazek dovnitř kontejneru
  • vymazat nepoužívané kontejnery a obrazy
  • volitelné: tisknout a skenovat v Linuxu

Cvičení #14

Přejít na stránku cvičení

Znalosti konceptů

  • vysvětlit, proč je použití nmap obvykle omezeno/zakázáno správci sítě
  • vysvětlit, co je to signál v kontextu Linux procesů
  • 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

  • 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 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 a traceroute jako základních nástrojů pro ladění síťových problémů
  • nastavit GitLab CI pro jednoduché projekty
  • volitelné: použít NetworkManager k nastavení statických IP adres
  • 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