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ř.
mcneboranger) - procházet souborový systém pomocí příkazů
lsacd - použit základní přepínače příkazu
ls, jako jsou-l,-hnebo-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.txtacat <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č
cdnemůž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 -Fpro 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í
EDITORv~/.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 addagit 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 pushagit 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í
.bashrca.profileskriptů - 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í
nmapobvykle omezeno/zakázáno správci sítě
Praktické dovednosti
- nastavit proměnnou
PS1pro rozlišení různých strojů - použít příkaz
sshna 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(apullapush) přes SSH - volitelné: nastavit zkratky pro SSH
- volitelné: používat základní funkce terminálového multiplexeru
tmux - použít
ncpro základní operace - použít
nmappro základní skenování sítě - použít
ipk dotazování na stav aktuální síťové konfigurace - použít utility
pingatraceroutejako 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 switch) - 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é
$PATHpoužívána v shellu - vysvětlit, jak změna
$PATHovlivní 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č
$PATHobvykle 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 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
getoptpro parsování argumentů příkazové řádky - používat
.asourcek načtení funkcí z různých souborů - použít
scpna kopírování souborů mezi místním a vzdáleným počítačem - volitelné: použít
rsyncpro synchronizaci celých adresářů
Cvičení #9
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,rootanobody) - vysvětlit rozdíl mezi účtem
roota ostatními účty - vysvětlit, proč se obecně nedoporučuje provádět neadministrativní úlohy pod účtem
root - obecně vysvětlit, jak lze
sudopouží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
getentna získání informací o existujících uživatelských účtech - používat
sudopro 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
systemctlpro zajištění automatického spuštění služby při startu počítače - tisknout a skenovat v Linuxu
- volitelné: používat
journalctlk zobrazení logů - volitelné: používat
useraddpro vytvoření nového uživatelského účtu
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
grepem - provádět nahrazení vzoru pomocí
sedu
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,waxpro 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ř.
taragzip) - 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í
pszobrazit seznam existujících procesů (včetně přepínačů-e,-fa--forest) - použít
pgreppro vyhledání konkrétních procesů - poslat signál běžícímu procesu
- použít
htopk 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
tarneboatool - použít
findse 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.cfgapyproject.toml)\n - nainstalovat projekt, který používá
setup.cfg - volitelné: připravit projekt Pythonu pro instalaci