Výber Linuxu
Pozrieme sa, aké distribúcie existujú, vyskúšame si ich priamo v prehliadači a každý si vyberie tú svoju.
0.1 Prečo si vyberať?
Linux nie je operačný systém je to iba jadro(kernel). Keď o rozšírime o programy GNU stane sa s neho operačný systém ktorý voláme GNU/Linux. Ale pre jednocuchosť budeme chápať pod linuxom jeho distribúcie.
Tri hlavné rodiny, ktoré dnes stretneš:
- Debian / Ubuntu / Mint - balíkový systém
apt, najviac učebných materiálov, veľmi stabilné. - Fedora / RHEL - balíkový systém
dnf, novšie verzie softvéru, používa ho veľa firiem. - Arch - balíkový systém
pacman, pre pokročilých, všetko si skladáš sám.
Na krúžku bude každý pracovať na vlastnej VM s distribuciou, ktorú si vyberie. Neexistuje jedna správna voľba - dôležité je, aby ti vyhovovala, pretože na nej stráviš celý kurz.
- Desktop prostredie - ako systém vyzerá a ovláda sa (GNOME, KDE, Cinnamon, XFCE...).
- Stabilita vs novinky - Debian a Mint dávajú overené verzie, Fedora novšie.
- Balíkový systém -
aptalebodnf, oba sa v kurze naučíš. - Podpora a komunita - čím väčšia, tým ľahšie nájdeš odpoveď na problém.
0.2 Traja kandidáti
Na krúžku si môžeš vybrať z troch distribúcií. Všetky sú na učenie výborné, líšia sa prostredím a filozofiou:
| Debian | Fedora | Linux Mint | |
|---|---|---|---|
| Balíkový systém | apt | dnf | apt |
| Predvolené prostredie | GNOME | GNOME | Cinnamon |
| Stabilita | veľmi stabilná | novšie verzie | veľmi stabilná |
| Hodí sa pre | univerzálne použitie | kto chce novinky | začiatočníkov, prechod z Windows |
0.3 Vyskúšaj si ich - distrosea
Nemusíš nič inštalovať. Na stránke distrosea.com beží Linux priamo v prehliadači (WebVM) - klikneš a o pár sekúnd vidíš plný systém.
U každého z troch kandidátov vyskúšaj:
- Nájdi a otvor terminál.
- Spusti
cat /etc/os-releasea pozri, ktorá verzia systému beží. - Poobzeraj sa po pracovnej ploche - páči sa ti, ako sa ovláda?
dnf.
0.4 Rozhodnutie
Na konci hodiny sa každý rozhodne a zapíše si svoju voľbu. Domov si stiahne ISO obraz svojej distribúcie z oficiálnej stránky: debian.org, fedoraproject.org alebo linuxmint.com.
0.5 Rodiny distribúcií
Distribúcie sa delia na rodiny podľa toho, od koho pochádzajú. Každá rodina zdedila od svojho predka balíkový systém, štruktúru a filozofiu, takže keď spoznáš jednu, ľahšie pochopíš aj jej sesternice.
- Rodina Debian - Debian (1993, autor Ian Murdock, jedna z najstarších, konzervatívna a stabilná, obľúbená na serveroch). Odvodené:
Ubuntu,Mint,Raspbian,Kali(penetračné testovanie),Clonezilla(klonovanie diskov),RescueCD(záchrana systému). - Rodina Red Hat - Red Hat (1994, najstaršia komerčná, dnes pod IBM). Odvodené:
Fedora,CentOS. - Rodina Slackware - Slackware (1993, autor Volkerding, spartánske, pre „pravých" linuxákov). Odvodené:
SUSE,Slax. - Rodina Arch - Arch (2002, „linux na mieru", pre pokročilých). Odvodené:
Manjaro,BlackArch. - Gentoo - (2002) všetko si kompiluješ sám, najrýchlejšie, ale najnáročnejšie na údržbu.
- LFS (Linux From Scratch) - nie distribúcia, ale sada nástrojov na zostavenie vlastnej distribúcie.
A špeciálne účelové distribúcie:
- Slax - beží z USB priamo v RAM.
- Puppy a DSL - pre staré PC, DSL zvládne 64 MB RAM.
- Zorin - moderné, pre začiatočníkov.
- PoP_OS! - od System76, výborná podpora NVIDIA.
- Kubuntu - Ubuntu s KDE prostredím.
- Devuan - Debian bez
systemd. - Hannah Montana Linux - recesia. Takýchto projektov je viac.
0.6 Desktop prostredia
Grafické prostredia (desktop) sa delia podľa frameworku - sady knižníc, na ktorej sú postavené. Dve hlavné rodiny sú QT a GTK+.
Rodina QT
- KDE Plasma - vyzerá podobne ako Windows, prvé úspešné grafické prostredie na Linuxe, plne prispôsobiteľné kliknutím. Dnešná Plasma 6 beží na QT6, je komplexnejšia - vhodná na výkonnejšie PC.
- LXQt - ľahké, pre slabší hardvér.
Rodina GTK+
- GNOME - vznikol ako odpoveď na uzavretosť QT, GTK je plne open-source pod GNU/GPL, pripomína viac macOS, bez externých nástrojov ťažšie prispôsobiteľné, dnes na GTK4.
- MATE - fork starého GNOME 2, rýchle.
- Cinnamon - vyvíjané Mintom, využíva hardvérovú akceleráciu, pomalé na nekompatibilnej grafike.
- Xfce - samostatné, rýchle, obľúbené na staršom hardvéri.
- LXDE/LXQt - ľahké pre slabší HW.
- Napíš 3 dôvody, prečo si vybral svoju distribúciu.
- Čo ťa na distrosea.com najviac prekvapilo?
- Ktoré desktop prostredie ti sadlo najviac a prečo?
- Vysvetli vlastnými slovami, čo je balíkový systém a prečo sa ním distribúcie líšia.
Čo je Linux a VM
Úvod do operačného systému Linux, distribúcií a virtuálnych strojov.
1.1 Prečo Linux?
Linux beží na väčšine serverov na svete, v Androide, routeroch, superpočítačoch aj v tvojom smartfóne. Naučiť sa ho znamená porozumieť tomu, ako skutočne fungujú počítače.
Na tomto krúžku nikdy nebudeme len o tom, čo kliknúť. Budeme písať príkazy do terminálu, čítať výstup a rozumieť, čo systém robí. Preto je dôležité, aby sme začali správne - distribúciou, ktorá nám vyhovuje, a v bezpečnom prostredí virtuálneho stroja.
1.2 Čo je distribúcia?
Linux je iba jadro (kernel). Distribúcia pridáva k jadru programy, správcu balíkov a prostredie. Na tomto krúžku si môžeš vybrať z troch:
| Distribúcia | Kedy ju zvoliť | Balíkový systém |
|---|---|---|
Debian | Stabilná, veľa učebných materiálov | apt |
Fedora | Novšie verzie softvéru | dnf |
Linux Mint | Priateľské pre začiatočníkov | apt |
1.3 Štruktúra adresárov
V Linuxe nie sú písmená diskov ako C: alebo D:. Všetko začína v root /. Pár dôležitých adresárov:
/home- domovské adresáre používateľov/etc- konfiguračné súbory systému/var- meniace sa dáta, logy/usr- nainštalované programy/tmp- dočasné súbory
1.4 Praktická ukážka
Spustíme terminál a pozrieme si prvý výpis. Tlačidlo copy-paste zámerne nemáme - príkazy sa naučíš písať.
whoami ti povie aktuálneho používateľa, pwd (print working directory) aktuálnu cestu a ls / vypíše obsah root adresára.
1.5 GNU/Linux - prečo sa to tak volá?
Keď počuješ „Linux", väčšinou myslíš celý systém. Ale presný názov tohto systému je GNU/Linux - a za týmto spojovníkom sa skrýva zaujímavý príbeh.
Linux je iba jadro (kernel) - monolitické, teda jeden veľký program, ktorý riadi úplne všetko. Jeho rodokmeň siaha k systému UN*X: UNIX vznikol v roku 1969 v AT&T Bell Labs (autori Ken Thompson a Dennis Ritchie) a stal sa základom modernej výpočtovej techniky. Pre IBM PC ho zjednodušene skopíroval MINIX (klon UNIX) - a práve z MINIXu vyšiel v roku 1991 Linus Torvalds, ktorý napísal vlastné jadro a nazval ho Linux.
GNU je naopak slobodný projekt Richarda Stallmana - nie jadro, ale sada nástrojov a programov na prácu s OS: editory, shelly, kompilátory, debugery. Keď skombinuješ GNU nástroje + Linux jadro, dostaneš GNU/Linux - kompletný operačný systém. Mimochodom, aj moderný Android je distribúcia vychádzajúca z Linux jadra.
A čo je vlastne distribúcia? Je to jadro + GNU nástroje + správca balíkov + grafické prostredie. Presne toto ti ukáže tento krúžok.
1.6 Pod kapotou: kernel a userspace
Operačný systém sa delí na dve úrovne. Keď toto pochopíš, prestaneš sa báť terminálu:
- Kernel space - tu beží jadro. Má priamy prístup k hardvéru, spravuje pamäť, procesy, súborové systémy a sieť. Beží v privilegovanom režime (ring 0).
- Userspace - tu bežia všetky ostatné programy (
bash,systemd,sshd, prehliadač). Bežia v obmedzenom režime (ring 3) a s jadrom komunikujú cez syscalls (systémové volania).
1.7 Možnosti skúšania Linuxu
Linux sa dá vyskúšať tromi hlavnými spôsobmi. Každý má svoje výhody a nevýhody - výber závisí od toho, čo chceš:
| Spôsob | Výhoda | Nevýhoda |
|---|---|---|
| Virtuálny stroj | Najmenej invazívne, všetko sa dá zmazať a začať odznova | Vyžaduje výkonnejší počítač |
| Live USB | Absolútne neinvazívne - nabehneš z USB bez inštalácie | Pri „live" režime sa dáta stratia po vypnutí |
| Dualboot | Plný výkon, Linux beží natívne | Riziko pri inštalácii, bootloader |
Virtuálny stroj (VM)
Počítač vo vnútri tvojho počítača. Najlepšie na učenie:
- VirtualBox - jednoduchá inštalácia, dobrá podpora, zadarmo. Skvelá voľba na začiatok.
- VMware Workstation/Fusion - komerčné, ale výborná grafika a stabilita.
- QEMU/Proxmox - pokročilé, ideálne na virtualizáciu, zložitejšia konfigurácia.
Live USB
Nahráš ISO na USB kľúč (napr. dd alebo balenaEtcher) a nabootuješ z neho. Absolútne nič sa na tvojom PC nezmení. Pozor: v „live" režime sa dáta po vypnutí stratia - výnimkou sú distribúcie typu Slax, ktoré ukladajú dáta priamo na kľúč.
Dualboot
Súbežná inštalácia s iným OS. Pri bootovaní si vyberieš, čo spustíš. Pozor: odporúča sa nainštalovať najprv Windows/macOS a Linux až ako druhý, pretože Windows bootloader nevie bootovať Linux - GRUB/LILO treba inštalovať manuálne.
- Vysvetli vlastnými slovami: čo je jadro (kernel) a čo je distribúcia.
- Nakresli strom hlavných adresárov (
/,/home,/etc,/var,/usr) a ku každému pripíš, na čo slúži. - Prečo je na učenie bezpečnejšie používať VM ako reálny počítač? Napíš aspoň dva dôvody.
- Rozhodni sa, ktorú distribúciu (Debian, Fedora alebo Mint) chceš inštalovať, a napíš, prečo si vybral práve ju.
Inštalácia do VM
Praktická inštalácia Linux distribúcie do virtuálneho stroja.
2.1 Virtuálny stroj
Virtuálny stroj (VM) je program, ktorý vytvorí v tvojom počítači ďalší "počítač vo vnútri počítača". Nainštaluješ si operačný systém, ktorý beží izolovane od toho hlavného.
Dva najpoužívanejšie hypervisory:
- VirtualBox (Oracle) - zadarmo, funguje na Windows, Mac aj Linux. Na náš krúžok úplne postačí.
- VMware (Workstation Pro) - taktiež zadarmo pre študentov, trochu rýchlejší grafický výkon.
Obe riešenia fungujú na rovnakom princípe: vytvoríš virtuálny disk, pridelíš RAM a CPU jadrá, potom spustíš ISO obraz (kópiu instalačného disku) a nainštaluješ Linux tak, akoby šlo o reálny stroj.
2.2 ISO obraz
ISO obraz je digitálna kópia inštalačného DVD. Stiahneš si ho z webu distribúcie a VM z neho nabootuje ako keby si vložil fyzické CD. Koľko miesta zaberie?
Debian~3.7 GBFedora~2 GBLinux Mint~2.1 GB
2.3 Postup inštalácie
Kroky sú pre všetky distribúcie veľmi podobné. Tu je zjednodušený postup:
- Otvor VirtualBox a klikni Nový (New).
- Názov: napíš názov distribúcie, typ nechaj Linux, verzia zvoľ podľa ISO.
- RAM: 2048 MB (2 GB) je minimum, 4096 MB je ideál.
- Virtuálny disk: vytvor nový, typ VDI (VirtualBox) alebo QCOW2 (QEMU/KVM), veľkosť 20 GB.
- V Nastaveniach VM vlož ISO obraz do sekcie Storage → IDE Controller.
- Spusti VM, spustí sa inštalačný program.
- Keď sa pýta na rozdelenie disku, zvoľ použiť celý disk (Guided, use entire disk).
- Ostatné nastavenia nechaj na defaulte ( meno, heslo, časové pásmo).
/, /home a swap ponechaj na neskôr. S defaultným nastavením nič nepokazíš.
1234, ale ani nič príliš zložité, na krúžok postačí jednoduché slovo.
2.4 Overenie inštalácie
Po reštarte sa prihlás a spusti terminál. Overíme, či všetko funguje:
Príkaz uname -a ukáže informácie o jadre a systéme. cat /etc/os-release presne identifikuje, akú distribúciu a verziu máš nainštalovanú.
free -h ukazuje koľko RAM VM dostala a koľko sa používa. df -h (disk free) ukazuje veľkosť disku a koľko miesta zostalo. Ak vidíš tieto výpisy, máš funkčnú inštaláciu.
uname alebo iný príkaz- Napíš postup inštalácie VM v 5 krokoch vlastnými slovami, ako keby si ho vysvetľoval spolužiakovi.
- Vysvetli rozdiel medzi host a guest počítačom.
- Čo je ISO obraz a na čo slúži pri inštalácii?
- Prečo je pre začiatočníka bezpečné zvoliť pri inštalácii automatické rozdelenie disku?
Prvý login a terminál
Orientácia v termináli, prompt, základné príkazy a skryté súbory.
3.1 Čo je terminál?
Terminál je program, cez ktorý komunikuješ s Linuxom písaním príkazov. Volá sa aj konzola, CLI (Command Line Interface) alebo proste "príkazový riadok".
Desktopové prostredie (GNOME, KDE, XFCE) je to, čo vidíš po prihlásení. Terminál je len ďalší program, ktorý spustíš z plochy alebo cez klávesovú skratku Ctrl+Alt+T (funguje vo väčšine distribúcii).
Základné pojmy:
- Shell - program, ktorý interpretuje tvoje príkazy. Najčastejšie
bashalebozsh. - Prompt - text, ktorý ťa vyzve na zadanie príkazu. Väčšinou končí znakom
$. - Príkaz - program alebo príkaz shellu, ktorý napíšeš za prompt.
3.2 Štruktúra promptu
Vidíš niečo takéto:
| Časť | Význam | Príklad |
|---|---|---|
| student | Meno prihláseného používateľa | student |
@debian | Názov počítača (hostname) | debian |
| ~ | Aktuálny adresár (~ = domov) | ~, /etc |
$ | Znak normálneho používateľa (# = root) | $ |
3.3 Prvé príkazy
Otvor terminál a postupne napíš tieto príkazy. Všetky sú malým písmenom, bez diakritiky.
whoami ti povie meno používateľa. hostname názov stroja. pwd (print working directory) ukazuje, v ktorom adresári sa nachádzaš. A ls (list) zobrazí obsah aktuálneho adresára.
Príznak -l znamená "long format" (podrobný výpis), -a znamená "all" (vrátane skrytých súborov). Skryté súbory v Linuxe začínajú bodkou .. Bez -a by si ich nevidel.
3.4 Navigácia a čistenie
cd (change directory) ťa presunie do zadaného adresára. Samotný cd bez cesty ťa vráti domov. clear (alebo Ctrl+L) vyčistí obrazovku. exit zatvorí terminál.
cd ťa vráti domov, clear vyčistí terminál, exit zatvorí okno. Nikdy sa nemôžeš úplne stratiť.
3.5 Skryté súbory v domovskom adresári
Keď napíšeš ls -la ~, uvidíš všetky súbory vrátane skrytých. Všimni si:
.bashrc- konfigurácia shellu (prompt, farby, skratky).profile- spúšťa sa pri prihlásení, nastavuje premenné prostredia.bash_logout- spúšťa sa pri odhlásení
Tieto súbory upravíme neskôr, keď sa naučíme pracovať s textovými editormi. Zatiaľ stačí vedieť, že existujú a čo robia.
- Rozlúšti prompt
student@debian:~$- čo znamená každá časť? - Napíš spamäti aspoň 3 príkazy z hodiny a čo robia.
- Prečo začínajú skryté súbory bodkou a ako ich zobrazíš?
- Vysvetli, na čo slúži tab completion a prečo šetrí čas.
Navigácia a cesty
Ako sa pohybovať medzi adresármi, čítať cesty a používať príkazy cd, pwd a ls.
4.1 Absolútne a relatívne cesty
Každý adresár v Linuxe má presnú cestu. Tá sa buď začína od rootu, alebo od toho, kde sa práve nachádzaš.
Absolútna cesta začína lomítkom / a popisuje presnú polohu od rootu. Relatívna cesta začína bodkou . (aktuálny adresár) alebo dvoma bodkami .. (rodičovský adresár) a popisuje cestu voči miestu, kde sa nachádzaš.
| Cesta | Typ | Význam |
|---|---|---|
/home/student | Absolútna | Presne od rootu |
./dokumenty | Relatívna | Vnútri aktuálneho adresára |
../fotky | Relatívna | V rodičovskom adresári |
4.2 Príkaz cd
Príkaz cd (change directory) ťa presunie do ľubovoľného adresára. Funguje ako virtuálne "otvorenie priečinku".
cd /- presunie sa do rootucd ~alebo lencd- presunie sa domovcd ..- presunie sa o úroveň vyššiecd -- vráti sa tam, kde si bol predtýmcd ~peter- presunie sa do domova používateľa peter
4.3 pwd a ls
pwd (print working directory) ti povie, kde sa práve nachádzaš. ls zobrazí obsah adresára.
| Príkaz | Čo robí |
|---|---|
pwd | Vypíše aktuálnu cestu |
ls | Zoznam súborov a adresárov |
ls -l | Detailný zoznam (práva, veľkosť, dátum) |
ls -a | Zobrazí aj skryté súbory (bodku na začiatku) |
ls -la | Kombinácia: detailné + skryté |
ls -lh | Detailný zoznam s čitateľnými veľkosťami (KB, MB) |
ls -R | Rekurzívne zobrazí všetko vrátane podadresárov |
4.4 Praktická ukážka
Poďme si vyskúšať pohyb po adresároch. Začneme v domovskom adresári a postupne sa presunieme.
. odkazuje na aktuálny adresár a .. na rodičovský. Fungujú všade, nielen s cd. Príkaz cd - si pamätá predchádzajúcu adresu, takže sa ním rýchlo prepínaš medzi dvoma miestami.
pwd ti vždy povie, kde si. A cd ~ ťa vždy vráti domov. Tieto dva príkazy používaj často, kým si cesty zapamätáš.
- Vysvetli rozdiel medzi absolútnou a relatívnou cestou. Uveď príklad oboch.
- Nakresli strom adresárov
/home/student/Dokumentya ukáž šípkami, kam sa dostaneš príkazmicd /,cd ..acd -. - Čo vypíše
pwdpo príkazochcd /etca potomcd -? Vysvetli, prečo. - Prečo sa oplatí poznať
ls -lhnamiesto obyčajnéhols?
Súbory a adresáre
Vytváranie, kopírovanie, presúvanie a mazanie súborov a priečinkov.
5.1 Vytváranie a mazanie
Každý súbor aj adresár sa dá vytvoriť aj zmazať jedným riadkom. Dôležité je vedieť, ktorý príkaz slúži na čo.
touch vytvorí prázdny súbor (alebo aktualizuje čas existujúceho). mkdir vytvorí nový adresár. Pomocou mkdir -p vytvoríš celú cestu naraz.
5.2 Kopírovanie a presúvanie
cp vytvorí kópiu súboru alebo adresára. mv presunie súbor, alebo ho premenuje. Oba príkazy fungujú rovnako, len robia rôzne veci.
| Príkaz | Čo robí | Príklad |
|---|---|---|
cp | Kopíruje súbor | cp subor.txt kopia.txt |
cp -r | Kopíruje adresár | cp -r projekt backup |
mv | Presúva / premenuje | mv stare.txt nove.txt |
5.3 Mazanie súborov
rm vymaže súbor. rm -r vymaže adresár aj s obsahom. rmdir vymaže len prázdny adresár.
5.4 Typ súboru
Príkaz file zistí skutočný typ súboru podľa obsahu, nie podľa prípony. V Linuxe prípory nie sú také dôležité ako vo Windowse.
rm maže natrvalo. V Linuxe nie je žiadny kôš. Keď zmážeš súbor cez rm, je preč. Najmä sa vyhýbaj sudo rm -rf /. Nikdy. Ani zvedavosti.
sudo rm -rf / vymaže celý tvoj systém. Toto je prvý príkaz, ktorý by si mal poznať, aby si ho nikdy náhodou nenapísal.
5.5 Všetko je súbor: adresár /dev
Linux pristupuje k hardvéru rovnako ako k obyčajným súborom. Žiadne špeciálne rozhranie, žiadne zvláštne API. Jednoducho čítaš a zapisuješ.
Jednou z kľúčových filozofií Linuxu je: "Všetko je súbor." Každé hardvérové zariadenie, ktoré je pripojené k počítaču, sa sprístupňuje vo forme špeciálneho súboru v adresári /dev. Čítaš z neho, zapisuješ do neho a tým komunikuješ so zariadením. Jednotné rozhranie cez klasické súborové operácie (file I/O) znamená, že nepotrebuješ žiadnu špeciálnu knižnicu ani ovládač v používateľskom priestore.
Adresár /dev obsahuje device files, teda špeciálne súbory reprezentujúce hardvér. Kvôli bezpečnostným právam je rozumné ho len prezerať, nie upravovať. Pozri sa naň takto:
V prvom stĺpci výpisu vidíš typ zariadenia. Existujú dva hlavné typy:
| Znak | Typ | Ako komunikuje | Príklady |
|---|---|---|---|
b | Blokové | Blokového zariadenia sa číta/zapisuje po blokoch (napr. 512 bajtov naraz). Vhodné pre disky. | /dev/sda, /dev/nvme0n1 |
c | Znakové | Znakové zariadenia komunikujú po jednom znaku. Používajú sa pre terminály, zvuk, klávesnice. | /dev/tty, /dev/snd/* |
Niektoré zariadenia v /dev sú obzvlášť užitočné aj pre bežnú prácu v termináli.
/dev/nullje "čierna diera". Všetko, čo do nej pošleš, zmizne. Potlačíš ňou nechcený výstup:echo ahoj > /dev/null. Potlačíš aj chyby:command 2>/dev/null./dev/zeroprodukuje nekonečný prúd nulových bajtov. Hodí sa na vytvorenie testovacích súborov:dd if=/dev/zero of=test.bin bs=1M count=10ti vytvorí 10 MB plný nul./dev/randoma/dev/urandomgenerujú náhodné dáta./dev/randommôže prerušiť čakanie, ak systém nedostal dosť entropy (od jadra 5.6, tj. od roku 2020, blokuje už len na začiatku štartu systému)./dev/urandomje rýchlejší a vždy dostupný, takže sa používa častejšie./dev/ttyje aktuálny terminál. Hodí sa, keď chceš napriek redirekcii niečo zobraziť priamo na obrazovku:echo AHOJ > /dev/tty.
cat /dev/sda by načítal celý RAW obsah tvojho disku. Nikdy to nespúšťaj naozaj, mohol by si čítať citlivé dáta a navyše to trvá veľmi dlho. Toto je len ukážka sily filozofie "všetko je súbor" aj v takejto forme. Na čítanie diskov sa používajú špecializované nástroje ako dd alebo xxd s rozumnými obmedzeniami.
Zaujímavosťou je aj /proc. Je to virtuálny súborový systém generovaný priamo jadrom. Súbory tam neležia na disku, jadro ich generuje na požiadanie. Môžeš v ňom čítať informácie o systéme:
5.6 Odkazy: hardlink a symlink
Súbory v Linuxe sa dajú odkazovať viacerými spôsobmi. hardlink a symlink sú dva rozdielne mechanizmy s rozdielnym správaním.
Hardlink je druhé meno pre TEN ISTÝ súbor. Oba názvy odkazujú na rovnaký inode (interný identifikátor súboru na disku). Hardlink funguje len v rámci jedného súborového systému a vytvoríš ho príkazom:
ln subor odkaz
Symlink (symbolický odkaz) je malý súbor, ktorý obsahuje cestu k inému súboru alebo adresáru. Funguje podobne ako zástupca (shortcut) vo Windowse. V ls -l ho spoznáš podľa písmena l na začiatku a šípky -> ukazujúcej cieľ. Vytvoríš ho takto:
ln -s ciel odkaz
Hlavný rozdiel sa prejaví, keď pôvodný súbor vymažeš:
- Hardlink stále funguje. Dáta na disku zmiznú až vtedy, keď zmizne posledný názov (hardlink), ktorý na ne ukazuje.
- Symlink sa "pretrhne" (broken). Ukazuje na cestu, ktorá už neexistuje. Takýto symlink zobrazí chybu pri pokuse o čítanie.
| Vlastnosť | hardlink | symlink |
|---|---|---|
| Vytvorenie | ln subor odkaz | ln -s ciel odkaz |
Typ v ls -l | Vyzerá ako obyčajný súbor | Začína l, ukazuje -> cieľ |
| Keď zmizne pôvodný súbor | Funguje ďalej (rovnaký inode) | Pretrhne sa (broken symlink) |
| Cez súborové systémy | Nie (len v rámci jedného FS) | Áno (ukazuje na cestu) |
| Aktualizácia cieľa | Nie (pevne viazaný na inode) | Áno (upravíš cestu) |
| Veľkosť | 0 bajtov (iba odkaz) | Veľkosť textu cesty |
- Vysvetli rozdiel medzi príkazmi
cpamv. Kedy použiť ktorý? - Napíš, čo sa stane:
mkdir pokus && cd pokus && touch a.txt && ls- čo postupne spraví každý príkaz? - Prečo je
rm -rfnebezpečný príkaz? Rozlúšti, čo znamená-ra-f. - Na čo slúži príkaz
filea kedy sa ti môže hodiť?
Čítanie súborov a wildcards
Ako zobraziť obsah súborov rôznymi spôsobmi a používať zástupné znaky.
6.1 Čítanie obsahu súborov
Linux ponúka viacero spôsobov, ako zobraziť obsah súboru. Každý sa hodí na inú situáciu.
| Príkaz | Kedy použiť |
|---|---|
cat | Vypíše celý súbor na obrazovku. Ideálne pre krátke súbory. |
less | Otvorí súbor so scrollovaním. Pre veľké súbory. |
head -n 10 | Zobrazí prvých 10 riadkov. |
tail -n 10 | Zobrazí posledných 10 riadkov. |
tail -f | Sleduje pridávané riadky v reálnom čase. |
V less sa pohybuješ šípkami alebo Page Up / Page Down. Stlač q na ukončenie. Ak hľadáš text, stlač / a napíš hľadané slovo.
6.2 Wildcards
Wildcards (zástupné znaky) fungujú v príkazoch ako ls, cp, rm. Shell ich rozšíri ešte pred spustením programu.
| Znak | Význam | Príklad |
|---|---|---|
* | Ľubovoľný počet znakov | ls *.txt |
? | Presne jeden znak | ls ?.txt |
[abc] | Jeden znak zo zoznamu | ls [ab].txt |
[0-9] | Jeden znak z rozsahu | ls [0-3].txt |
* a ? nerozširuje samotný program, ale shell. Keď napíšeš ls *.txt, shell najprv nájde všetky .txt súbory a až potom ich odovzdá príkazu ls. Preto echo * vypíše názvy súborov, lebo echo nedostane hviezdičku, ale už rozšírený zoznam.
- Vysvetli rozdiel medzi
cataless. Kedy použiť ktorý? - Kedy použiješ
heada kedytail? Uveď príklad použitiatail -f. - Máš súbory
ahoj.txt,obraz.png,test.txt,skript.sh. Čo vypíšels *.txta čols ?est.*? - Vysvetli vlastnými slovami, čo rozširuje wildcards - shell alebo program?
História a nápoveda
Ako pracovať s históriou príkazov, tabulačným dokončením a manuálovými stránkami.
7.1 História príkazov
Shell si pamätá všetky príkazy, ktoré si napísal. Nemusíš ich písať znova, stačí ich zavolať späť.
Stlač ↑ (šípka hore) pre opakovanie predchádzajúceho príkazu. Stlač ↓ pre vrátenie sa dopredu. Každým stlačením prechádzaš históriou.
Niektoré skratky z histórie fungujú okamžite:
!!- zopakuje celý posledný príkaz!n- spustí príkaz s číslomnz histórie
7.2 Spätné hľadanie
Kombinácia Ctrl+R otvorí interaktívne vyhľadávanie v histórii. Píšeš text a shell hľadá posledný príkaz, ktorý ho obsahuje.
7.3 Tabulačné dokončovanie
Stlač Tab a shell sa pokúsi automaticky dokončiť príkaz alebo cestu. Ak je viac možností, stlač Tab dvakrát pre zoznam.
7.4 Manuály a help
Príkaz man otvorí manuálovú stránku akéhokoľvek príkazu. Je to najdôležitejší nástroj na získavanie informácií. Ak potrebuješ rýchlu odpoveď, použi --help.
V manuáli sa pohybuješ šípkami alebo medzerníkom. Vyhľadávaš cez / a potom napíšeš slovo. Ďalší výsledok cez n, predchádzajúci cez N. Odchod cez q.
man obsahuje kompletnú dokumentáciu ku každému príkazu. Ak nevieš, čo príkaz robí, man príkaz ti odpovie. --help je rýchlejšia alternatíva pre krátke zhrnie. A apropos ti pomôže, keď nevieš ani názov príkazu.
- Prečo je dôležité vedieť čítať manuálové stránky (
man) aj bez internetu? - Čo znamená
!!a!42? Kedy by si ich použil a kedy by si musel byť opatrný? - Vysvetli, ako funguje vyhľadávanie v histórii cez Ctrl+R.
- Napíš aspoň 2 klávesové skratky na navigáciu v man stránke (napr. vyhľadávanie, ukončenie).
Redirekcia a rúry
Ako presmerovať výstup príkazov, prepájať programy rúrami a pracovať s chybami.
8.1 Redirekcia výstupu
Každý príkaz produkuje výstup na obrazovku. Pomocou > a >> ho môžeš presmerovať do súboru.
>zapíše výstup do súboru (prepíše ho)>>pridá výstup na koniec súboru<nasmeruje obsah súboru ako vstup príkazu
Pozor, > prepíše súbor. Ak bude v súbore niečo dôležité, po > to zmizne. Používaj >>, keď chceš pridávať.
8.2 Rúry (pipes)
Rúra | prepojí výstup jedného príkazu so vstupom ďalšieho. Výstup nepôjde na obrazovku, ale do ďalšieho programu.
8.3 Chybový výstup
Programy majú dva výstupy: stdout (štandardný výstup) a stderr (chybový výstup). Oba idú na obrazovku, ale dajú sa presmerovať oddelene.
| Zápis | Čo robí |
|---|---|
2> | Presmeruje chyby (stderr) do súboru |
2>&1 | Zlúči chyby s normálnym výstupom |
&> | Oboje do súboru (skratka) |
8.4 Praktické kombinácie
Rúry a redirekcie sa dajú kombinovať. Toto sú príkazy, ktoré budeš používať často.
tee zobrazí výstup na obrazovku a zároveň ho uloží do súboru. Hodí sa, keď chceš vidieť výstup a zároveň ho archivovať.
ls /cesta 2>/dev/null, chyby zmiznú, lebo smerujú do /dev/null (ďura, ktorá všetko zahodí). Normálny výstup zostane na obrazovke.
- Vysvetli rozdiel medzi
>a>>pri presmerovaní výstupu. - Nakresli, ako pretekajú dáta cez rúru v príkaze
ls -la | grep txt. Ktorý výstup ide kam? - Vysvetli rozdiel medzi stdout a stderr. Uveď príklad, kedy sa ti zobrazí stderr.
- Prečo je kombinácia
history | grep aptužitočná? Čo presne robí?
Používatelia a sudo
Ako fungujú používateľské účty v Linuxe, prečo root nie je kamarát a kedy použiť sudo.
9.1 Kto som? Používateľské účty
Každý, kto sa prihlási do Linuxu, má svoj účet. Aj ty máš svojho "študenta", a systém presne vie, čo smieš a čo nie.
V Linuxe existujú dva typy používateľov, ktorí ťa zaujímajú: bežný používateľ a root. Root je superužívateľ, ktorý môže na systéme robiť úplne všetko. Môže mazať súbory, meniť nastavenia, inštalovať programy, dokonca vypnúť celý stroj. Bežný používateľ môže robiť len to, čo mu systém dovolí.
Príkaz whoami ti povie meno aktuálneho používateľa. Príkaz id ukáže viac: tvoje uid (číselný identifikátor), gid (identifikátor skupiny) a zoznam skupín, do ktorých patríš.
Ďalšie užitočné príkazy na zistenie, kto je práve prihlásený:
who zobrazí prihlásených používateľov. w ukáže to isté, navyše s informáciou, čo práve robia.
9.2 sudo: privíť sa s root právami
Ako bežný používateľ nemôžeš napríklad nainštalovať program alebo meniť systémové súbory. Na to slúži sudo (superuser do). Umožní ti spustiť jeden príkaz s root právami.
Vidíš to? Bez sudo systém povie "nemáš oprávnenie". So sudo ťa systém najprv popýta o heslo (to tvoje, nie root heslo) a potom príkaz spustí.
sudo je silný nástroj. Ak spustíš sudo rm -rf /, vymažeš celý systém. Nikdy nespúšťaj príkazy cez sudo, ak nevieš presne, čo robia. Hraj sa len so súbormi vo svojom domovskom adresári.
9.3 su: prepnutie na iného používateľa
Kým sudo spustí jeden príkaz ako root, su (switch user) ťa prepne na iného používateľa na dlhšie. Zadáš su a potrebuješ heslo toho používateľa.
Všimni si zmenu: prompt končí na # namiesto $. To znamená, že si root. Po skončení napíš exit a vrátiš sa späť.
sudo pre jednotlivé príkazy.
9.4 Prečo nepracovať ako root?
Ak by si bol root, každý príkaz by sa spustil bez pýtania. Žiadna ochrana. Žiadne "nemáš oprávnenie". Keď root vymaže súbor, je preč. Keď root prepíše konfiguráciu, systém nemusí nabudúce nabootovať.
Preto existuje zlaté pravidlo Linuxu: používaj root práva len keď musíš. Väčšina vecí funguje aj ako bežný používateľ.
Pozri sa, čo má root a ty nie:
9.5 Časový rozpis
| Časť | Čo robíme | Čas |
|---|---|---|
| Teória | Účty, root, sudo, su, bezpečnosť | 15 min |
| Prax | whoami, id, who, w, sudo, su, ls /root | 30 min |
| Úloha | Domáca úloha na konci | 10 min |
- Vysvetli rozdiel medzi bežným používateľom a rootom. Napíš 3 veci, ktoré môže len root.
- Prečo sa neodporúča pracovať stále ako root? Uveď aspoň 2 dôvody.
- Čo robí
sudoa aké heslo ťa pri ňom systém pýta? - Vysvetli rozdiel medzi
sudoasu.
Práva súborov
Čo znamenajú tie záhadné písmená v ls -l a prečo niečo nemôžeš spustiť.
10.1 Čo sú práva?
V Linuxe každý súbor a každý adresár má záznam o tom, kto ho môže čítať, meniť a spúšťať. Toto sa volá práva (permissions).
Sú tri typy práv a tri skupiny, ktorých sa týkajú:
- r (read) = čítanie, hodnota 4
- w (write) = zápis, hodnota 2
- x (execute) = spustenie, hodnota 1
A pre tri skupiny:
- user (u) = vlastník súboru
- group (g) = skupina vlastníka
- others (o) = všetci ostatní
10.2 Čítanie ls -l
Keď napíšeš ls -l, prvý stĺpec ti povie úplne všetko o právach. Poďme to rozobrať:
Poďme rozobrať prvý stĺpec drwxr-xr-x:
- Prvý znak:
d= adresár,-= obyčajný súbor - Znaky 2-4: práva vlastníka →
rwx= číta, píše, spúšťa - Znaky 5-7: práva skupiny →
r-x= číta, spúšťa, nepíše - Znaky 8-10: práva ostatných →
r-x= číta, spúšťa, nepíše
rwx = 4+2+1 = 7. r-x = 4+0+1 = 5. Takže drwxr-xr-x v číslach je 755.
10.3 chmod: zmena práv
Príkaz chmod (change mode) ti umožní meniť práva súborov. Dva spôsoby: symbolický a číselný.
Symbolicky: +x pridá spustenie pre všetkých, u+x len pre vlastníka, g-w odoberie zápis skupine.
Číselne: chmod 644 znamená owner=6 (rw), group=4 (r), others=4 (r).
10.4 Práva a spúšťanie
Právo x rozhoduje o tom, či môžeš niečo spustiť. Bez neho ti Linux povie "nie".
x. Skontroluj cez ls -l a pridaj chmod +x.
10.5 Praktická ukážka: práva v akcii
Súbor s právami 600 (rw-------) môže čítať a meniť len vlastník. Nikto iný sa k nemu nedostane.
10.6 Časový rozpis
| Časť | Čo robíme | Čas |
|---|---|---|
| Teória | Práva rwx, skupiny, ls -l, chmod | 15 min |
| Prax | chmod symbolicicky aj číselne, spúšťanie skriptov | 30 min |
| Úloha | Domáca úloha na konci | 10 min |
10.7 Špeciálne bity
Okrem klasických rwx práv existujú tri špeciálne bity, ktoré menia správanie súborov a adresárov.
SUID (setuid) — proces sa pri spustení spúšťa s UID vlastníka súboru (často root), nie s UID používateľa, ktorý ho spustil. Príklad: /usr/bin/passwd — bežný používateľ musí zmeniť heslo, a to si vyžaduje zápis do systémových súborov, na ktoré nemá práva; vďaka SUID sa passwd spustí s právami roota presne len na túto úlohu. Vo výpise ls -l sa zobrazuje ako s namiesto x (napr. -rwsr-xr-x).
SGID (setgid) — na súbore: proces beží s GID súboru; na adresári: nové súbory vytvorené v tomto adresári dedičia skupinu adresára (užitočné pre zdieľané adresáre, napr. tímový priečinok).
sticky bit — keď má adresár write právo pre všetkých (typicky /tmp), súbor v ňom môže odstrániť len jeho vlastník, vlastník adresára alebo root. Zabráni tomu, aby si ktokoľvek mazal cudzie súbory v zdieľanom adresári. Zobrazuje sa ako t na konci práv (drwxrwxrwt).
ACL (Access Control Lists) — rozšírenie klasických práv: umožňuje nastaviť práva jednotlivo pre konkrétnych používateľov a skupiny (príkazy getfacl a setfacl). Na kurze sa nimi nebudeme hrať, ale vedieť o nich treba.
s namiesto x
student@debian:~$ ls -ld /tmp
drwxrwxrwt 10 root root 4096 sep 8 08:05 /tmp
# sticky bit: t na konci
student@debian:~$ - Rozlúšti práva
-rwxr-xr-xznak po znaku: čo v jednotlivých skupinách znamená r, w, x? - Vysvetli číselný zápis práv: prečo
r=4,w=2,x=1a koľko je tedachmod 755? - Čo sa stane, keď skript nemá právo
xa ako to opravíš? - Prečo musí mať adresár právo
x, aby si doňho mohol vojsť (cd)?
chmod, chown, umask
Pokročilá správa práv: zmena vlastníka, skupiny a predvolené nastavenia.
11.1 chown: zmena vlastníka
Vlastník súboru určuje, kto má k nemu primárny prístup. Príkaz chown (change owner) ti umožní zmeniť, komu súbor patrí.
Formát: chown používateľ:skupina súbor. Keď zmeníš vlastníka na root, sám od seba ho už nemôžeš meniť.
11.2 chgrp: zmena skupiny
Príkaz chgrp (change group) mení len skupinu, nie vlastníka.
Ak skupina students neexistuje, príkaz zlyhá. Najprv musíš skupinu vytvoriť (to je ale na roota).
11.3 umask: predvolené práva
Ako vie Linux, aké má dať novému súboru práva? Používa umask (user mask). Predvolená umask je zvyčajne 0022.
Ako to funguje: maximálne práva pre súbor sú 666 (rw-rw-rw-), pre adresár 777 (rwxrwxrwx). Umask maže práva bit po bite (nie aritmetickým odčítaním) - bit nastavený v umask sa z maximálnych práv odoberie. Pri 022 stratia skupina a ostatní zápis: 666 → 644 (rw-r--r--). Preto nové súbory nemajú x.
x pridáš len keď naozaj potrebuješ niečo spustiť.
11.4 Praktické prípady
/etc/passwd je čitateľný všetkými (644), lebo obsahuje zoznam používateľov a každý program to potrebuje. /etc/shadow obsahuje heslá, preto je čitateľný len rootom (640). /usr/bin/python3 musí byť spustiteľný, má teda x pre všetkých (755).
chown na systémových súboroch. Ak zmeníš vlastníka na /usr/bin/ alebo /etc/, systém môže prestať fungovať. Meniť vlastníka smieš len na svojich súboroch v domovskom adresári, a aj to väčšinou len cez sudo.
11.5 Časový rozpis
| Časť | Čo robíme | Čas |
|---|---|---|
| Teória | chown, chgrp, umask, prečo nemajú súbory x | 10 min |
| Prax | chown, chgrp, umask, ls -la na systémové súbory | 35 min |
| Úloha | Domáca úloha na konci | 10 min |
- Vysvetli, čo robí
chown student:dokumenty subor.txt- čo sa zmení a pre koho. - Prečo majú nové súbory predvolene práva ako
-rw-r--r--a nie-rwxr-xr-x? Čo s tým má spoločnéumask? - Kedy by si súboru nastavil práva
600a kedy644? Uveď príklad pre každý prípad. - Prečo je nebezpečné meniť
chownna systémových súboroch?
Mini-projekt: práva
Zhrnutie všetkého z blokov 1 až 3 a praktický projekt s nastavením práv.
12.1 Rýchle opakovanie
Prešli sme si tri bloky. Poďme si pripomenúť kľúčové príkazy, než ich všetky spojíme do jedného projektu.
| Blok | Kľúčové príkazy | Čo robia |
|---|---|---|
| Blok 1 | whoami, pwd, ls | Zistenie polohy a okolia |
| Blok 2 | cd, mkdir, touch, cp, mv, rm | Pohyb a správa súborov |
| Blok 2 | cat, head, tail, grep | Čítanie súborov |
| Blok 2 | >, >>, |, < | Redirekcie a rúry |
| Blok 3 | sudo, su, id | Používatelia a root |
| Blok 3 | chmod, chown, ls -l | Práva súborov |
12.2 Projekt: priečinok "firma"
Vytvoríme realistickú štruktúru priečinkov pre fiktívnu firmu. Cieľ je použiť všetko, čo sme sa naučili. Ide o to, aby si si overil, že vieš ovládať terminál bez nápovedy.
Štruktúra, ktorú vytvoríme:
12.3 Krok 1: vytvorenie štruktúry
12.4 Krok 2: nastavenie práv
Vysvetlenie nastavení:
- dokumenty (
750): vlastník rwx, skupina r-x, ostatní nič. Len ty a tvoja skupina sa dostanú dnu. - verejne (
755): vlastník rwx, všetci ostatní r-x. Každý môže čítať a vstúpiť. - cennik.txt (
644): vlastník rw, ostatní len r. Čitateľný, ale nie prepísateľný.
12.5 Krok 3: vytvorenie a spustenie skriptu
info.sh, ktorý vypíše: koľko súborov je v firma/dokumenty, aké súbory sú v firma/verejne, a obsah /etc/hostname. Použi príkazy ls a cat vnútri skriptu.
12.6 Krok 4: overenie všetkého
./uvitanie.sh vráti "Permission denied", skontroluj ls -l. Chýba ti právo x. Oprav cez chmod +x uvitanie.sh. Ak dostaneš "command not found", pravdepodobne chýba prvý riadok #!/bin/bash (shebang).
12.7 Časový rozpis
| Časť | Čo robíme | Čas |
|---|---|---|
| Opakovanie | Rýchle zhrnutie blokov 1 až 3 | 10 min |
| Projekt | Vytvorenie firmy, práva, skripty | 35 min |
| Úloha | Domáca úloha na konci | 10 min |
- Nakresli štruktúru priečinku
firma(dokumenty, skripty, verejne) a ku každému pripíš, aké práva by si nastavil a prečo. - Vysvetli na príklade, prečo je kombinácia
755pre adresár bezpečná, ale777nie. - Zhrň 3 najdôležitejšie veci, ktoré si sa naučil v blokoch 1-3.
Premenné a echo
Prvý skript, premenné, vstup od používateľa a príkazová substitúcia.
13.1 Čo je skript?
Skript je obyčajný textový súbor, v ktorom sú príkazy postupne za sebou. Namiesto toho, aby si písal príkazy jeden po druhom do terminálu, napíšeš ich do súboru a shell ich spustí naraz.
Prvý riadok skriptu sa volá shebang. Hovorí systému, akým programom sa má súbor spustiť:
#!/bin/bashpre bash skripty#!/bin/shpre POSIX sh (obecnejší, ale menej funkcii)
Na našom krúžku budeme používať bash, takže shebang bude vždy #!/bin/bash.
13.2 Vytvorenie prvého skriptu
Otvor textový editor nano a vytvor súbor:
Napíš do neho toto:
Ulož (Ctrl+O), odíď z nano (Ctrl+X). Teraz musíš súboru dať oprávnenie na spustenie a spustiť ho:
./?./prvy.sh. Bez ./ shell hľadá program v adresároch uvedených v premennej PATH a tvoj skript tam nie je. Bez chmod +x dostaneš chybu "Permission denied".
13.3 Premenné a echo
Premenná je priestor, v ktorom shell uchováva hodnotu. Priradíš ju takto:
Všimni si: meno="Jano" nemá medzery okolo =. Pri priraďovaní je to prísne zakázané. Na čítanie hodnoty pridáš znak $ pred názov premennej.
=meno="Jano". Nesprávne: meno = "Jano". Shell by to interpretoval ako pokus o spustenie príkazu meno s argumentmi = a "Jano". Výsledok? Chyba.
13.4 Citácia: jednodvojitá vs jednoduchá
Typ uvozoviek mení, ako shell spracúva premenné:
- Dvojitá uvozovka
"...": shell nahradí premenné za ich hodnoty (tzv. rozšírenie). - Jednoduchá uvozovka
'...': všetko sa berie doslovne, žiadne nahradzovanie.
Väčšinou budeš používať dvojité uvozovky. Jednoduché si zapamätaj pre prípady, keď nechceš, aby shell niečo nahradil.
13.5 Načítanie vstupu: read
Príkaz read čaká, kým používateľ niečo napíše a stlačí Enter. Hodnotu uloží do premennej:
Aj read má voliteľný parameter -p pre výzvu, aby si nemusel písať echo zvlášť:
13.6 Príkazová substitúcia: $(...)
Výsledok akéhokoľvek príkazu môžeš uložiť do premennej pomocou $(príkaz):
Vnútri zátvoriek sa spustí príkaz a jeho výstup sa dosadí namiesto $(...). Funguje to všade, kde môžeš použiť premennú.
13.7 Kompletný príklad: pozdrav
Vytvor súbor pozdrav.sh:
Nezabudni: chmod +x pozdrav.sh a potom ./pozdrav.sh.
- Vysvetli rozdiel medzi
'$meno'a"$meno"- v ktorom prípade sa premenná rozšíri na hodnotu? - Čo je shebang
#!/bin/basha prečo sa dáva na začiatok skriptu? - Napíš na papier malý skript: pozdraví používateľa menom zadaným cez
reada vypíše dnešný dátum. Bez počítača, len syntax. - Prečo pri priradení
meno=Janonesmú byť medzery okolo=?
Podmienky if
Rozhodovanie v skriptoch: if, else, elif a testovanie podmienok.
14.1 Syntax príkazu if
Príkaz if spustí blok príkazov len vtedy, keď je podmienka pravdivá. Základná štruktúra vyzerá takto:
Slovo fi na konci je "if" pozpäť. Áno, vážne. Shell má rád takéto vtipy. Pre viaceré vetvenia použiješ elif:
14.2 Testovanie súborov
Shell má zabudované testy, ktoré začínajú znakom -. Najčastejšie používané:
| Test | Význam | Príklad |
|---|---|---|
-e | Súbor existuje | [ -e /etc/passwd ] |
-f | Je to obyčajný súbor | [ -f prvy.sh ] |
-d | Je to adresár | [ -d /home ] |
-r | Súbor je čitateľný | [ -r prvy.sh ] |
-w | Súbor je zapisovateľný | [ -w prvy.sh ] |
-x | Súbor je spustiteľný | [ -x prvy.sh ] |
Kvôli čitateľnosti ale takto krátke if-y v skriptoch nepíšeme. Radšej:
14.3 Porovnávanie reťazcov a čísel
Na porovnávanie hodnôt sa používajú ďalšie operátory:
| Typ | Operátor | Význam | Príklad |
|---|---|---|---|
| Stringy | = | rovna sa | [ "$a" = "ahoj" ] |
| Stringy | != | nerovna sa | [ "$a" != "ahoj" ] |
| Čísla | -eq | rovna sa | [ "$a" -eq 5 ] |
| Čísla | -ne | nerovna sa | [ "$a" -ne 5 ] |
| Čísla | -gt | väčšie ako | [ "$a" -gt 5 ] |
| Čísla | -lt | menšie ako | [ "$a" -lt 5 ] |
| Čísla | -ge | väčšie alebo rovné | [ "$a" -ge 5 ] |
| Čísla | -le | menšie alebo rovné | [ "$a" -le 5 ] |
> a < nie sú porovnávacie operátory!> a < operátory presmerovania (output/input). Ak by si napísal [ $a > 5 ], shell by vytvoril prázdny súbor s názvom "5" a porovnal by niečo úplne iné. Na číselné porovnávanie vždy používaj -gt, -lt atď.
test je to isté ako [ ]test -e /etc/passwd robí presne to isté ako [ -e /etc/passwd ]. Zátvorky sú len alternatívny zápis. Na našom krúžku budeme používať [ ], pretože je to častejšie v literatúre.
14.4 Praktický príklad
Vytvor skript kontrola_suboru.sh, ktorý zistí, či zadaný súbor existuje a či je to súbor alebo adresár:
[ a ] sú povinné[ "$a" = "b" ] funguje. ["$a"="b"] nie. Zátvorky sú v skutočnosti príkaz test a ako každý príkaz potrebujú medzery medzi argumentami. Bez medzier dostaneš "command not found" alebo chybný výsledok.
- Nakresli vetviaci diagram
if/elsepre skript, ktorý skontroluje, či súbor existuje. - Vysvetli rozdiel medzi
[ "$a" = "b" ]a[ "$a" -gt 5 ]- na čo sa porovnáva v oboch. - Prečo sú medzery okolo
[a]povinné? Čo by sa stalo bez nich? - Vysvetli, kedy použiješ
elifnamiesto ďalšieho samostatnéhoif.
Cykly for a while
Opakovanie príkazov: for cyklus, while, break a continue.
15.1 For cyklus
Cyklus for spustí rovnaké príkazy pre každú hodnotu v zozname. Základný vzor:
Jednoduchý príklad, ktorý vypíše čísla 1, 2, 3:
Na dlhšie telo cyklu použijeme viacriadkový zápis:
15.2 Postupnosť čísel: seq
Namiesto vypisovania čísel jedno po druhom môžeš použiť seq:
for subor in *.txt; do, shell najprv rozšíri *.txt na zoznam súborov (presne ako keď píšeš ls *.txt) a potom prejde každý z nich. Ak žiadne .txt súbory neexistujú, cyklus sa spustí raz s doslovným reťazcom *.txt. Na to pozor.
15.3 Prechádzanie súborov
Praktický príklad: vypíšeme všetky shell skripty v aktuálnom adresári:
15.4 While cyklus
while opakuje príkazy, kým je podmienka pravdivá. Často sa používa s počítadlom:
$((cislo + 1)) vykoná matematickú operáciu. Inak by cislo=$cislo+1 bolo len spojenie reťazcov: "1+1" namiesto 2. Arithmetiku vždy dávaj do $(( )).
15.5 break a continue
Ako v ostatných programovacích jazykoch, aj tu máme prerušenie cyklu:
break- ukončí cyklus okamžitecontinue- preskočí zostávajúce príkazy a ide na ďalšiu iteráciu
15.6 Praktický príklad: hromadný rename
Nasledujúci skript premenuje všetky .txt súbory na .bak:
Výraz ${subor%.txt} odstráni príponu .txt z konca reťazca. Je to jednoduchšie ako sed alebo iné nástroje.
- Čo vypíše tento cyklus?
for i in 1 2 3; do echo "Pokus $i"; done- rozpíš každý krok. - Kedy použiješ
fora kedywhile? Uveď príklad pre oba. - Vysvetli, čo robí
breakacontinuev cykle - aký je medzi nimi rozdiel? - Napíš hlavičku cyklu
for, ktorý prejde všetky súbory*.txtv aktuálnom adresári.
Funkcie a parametre
Vlastné funkcie, argumenty skriptu a návratové hodnoty.
16.1 Vlastné funkcie
Funkcia je blok kódu, ktorý si pomenúš a môžeš ho volať viackrát. Šetrí opakovanie a robí skripty čitateľnejšie.
Príklad s funkciou, ktorá vypíše uvítaciu správu:
Funkciu definuješ pred tým, ako ju zavoláš. Volanie je jednoducho názov funkcie bez zátvoriek. Argumenty pre funkciu sa odovzdávajú rovnako ako pre skript, cez medzery za názvom.
16.2 Parametre skriptu
Keď spustíš ./skript.sh prvy druhy treti, jednotlivé slová sa dostanú do špeciálnych premenných:
| Premenná | Význam | Príklad |
|---|---|---|
$0 | Názov spusteného skriptu | ./skript.sh |
$1 | Prvý argument | prvy |
$2 | Druhý argument | druhy |
$# | Počet argumentov | 3 |
$@ | Všetky argumenty | prvy druhy treti |
$? | Návratový kód posledného príkazu | 0 (úspech) |
16.3 Návratové hodnoty
Každý príkaz v Linuxe po skončení vráti exit status. Štandardne platí:
0- príkaz prešiel úspešne1 a viac- niečo sa pokazilo
Hodnotu uložíš príkazom return (vo funkcii) alebo exit (zo skriptu). Prečítaš ju cez $?:
$? je 0 len keď všetko prešloecho $? vráti 0, ak posledný príkaz bol úspešný. Akékoľvek iné číslo (1, 2, 127...) znamená problém. Toto je základ, na ktorom stojí väčšina kontrol v shell skriptoch.
Vo funkcii môžeš vrátiť hodnotu cez return. Pozor, return vie vrátiť len číslo 0-255. Na vrátenie reťazca sa používa echo a $(...):
16.4 Praktický príklad: spracovanie argumentov
Skript, ktorý pozdraví prvý a druhý argument, ale overí, či boli zadané:
$# na začiatku skriptu je zvyk, ktorý sa oplatí.
- Čo znamenajú
$1,$2,$#a$0pri skripte? - Napíš na papier funkciu, ktorá prijíma 2 čísla a vypíše ich súčet, plus volanie funkcie. Bez počítača.
- Čo znamená návratová hodnota
$?a čo ti prezradí o minulom príkaze? - Prečo je
$?rovný 0, keď príkaz prešiel, a 1 alebo viac, keď zlyhal?
Praktický skript: záloha
Zostavíme funkčný zálohovací skript od nuly po riadkoch.
17.1 Čo budeme robiť
Na tejto hodine vytvoríme skript, ktorý automaticky zálohuje vybraný adresár do komprimovaného archívu. Názov archívu bude obsahovať dátum, aby sme vždy vedeli, kedy bola záloha vytvorená.
Zálohovanie je príklad reálneho prípadu, kedy sa skript oplatí. Namiesto toho, aby si každý deň ručne písal tar príkaz, necháš to na skript.
17.2 Príkaz tar
tar je štandardný nástroj na vytváranie archívov. Jeho základné príznaky:
| Príznak | Význam |
|---|---|
-c | Vytvor archív (create) |
-z | Komprimuj cez gzip |
-f | Názov výstupného súboru (file) |
-x | Rozbaľ archív (extract) |
-v | Podrobný výpis (verbose) |
Jednoduchý príkaz na zálohu celého adresára:
-czf-c vytvorí, -z zbalí cez gzip, -f určuje meno súboru. Príznak -f musí byť vždy posledný pred názvom súboru, lebo berie nasledujúci argument ako názov. -cfz zaloha.tar.gz by nefungovalo správne.
17.3 Dátum v názve
Na automatické pridanie dátumu do názvu použijeme $(date +%F):
Formát %F je skratka pre %Y-%m-%d, teda rok-mesiac-deň. Takýto názov sa pekne zoradí chronologicky.
17.4 Celý skript: záloha.sh
Poďme si to celé zostaviť. Vytvor súbor zaloha.sh:
17.5 Rozbor po riadkoch
Prejdime si kľúčové časti:
mkdir -p vytvorí adresár vrátane všetkých nadriadených. Bez -p by mkdir /home/student/zalohy fungovalo, ale mkdir /home/student/zalohy/test by zlyhalo, ak zalohy ešte neexistuje.
-C "$(dirname "$zdroj")" zmení pracovný adresár pred archiváciou. Vďaka tomu archív obsahuje priečinok Documents/ a nie úplnú cestu /home/student/Documents/. Pri rozbaľovaní by to spôsobilo nepríjemnú štruktúru.
du -h zobrazí veľkosť súboru v čitateľnom formáte (KB, MB, GB). cut -f1 vezme len prvý stĺpec (číslo veľkosti) bez názvu súboru.
17.6 Rozbaľovanie zálohy
Na rozbalenie archívu slúži tar -xzf:
tar sa používa na oboje.
- Rozlúšti prepínače
tar -czf: čo robíc,zaf? - Prečo je dobré dávať do názvu zálohy dátum? Aké problémy by nastali bez neho?
- Nakresli postup zálohovacieho skriptu ako flowchart (kontrola priečinka → tvorba archívu → výpis výsledku).
- Prečo je lepšie zálohovať do archívu (tar.gz) ako len kopírovať priečinok?
Mini-projekt: skript
Samostatná práca: zostavíme "Systémového reportéra".
18.1 Zadanie projektu
Dnes si všetko vezmeš do vlastných rúk. Tvojou úlohou je napísať skript report.sh, ktorý vypíše prehľad o aktuálnom stave systému.
Skript má vypísať tieto informácie:
| Informácia | Ako získať |
|---|---|
| Dátum a čas | date |
| Meno používateľa | whoami |
| Názov počítača | hostname |
| Vyťaženie pamäte | free -h | head -2 |
| Miesto na disku | df -h / |
| Procesy používateľa | ps -u $(whoami) |
| Počet súborov v adresári | ls | wc -l |
Skript ulož ako ~/report.sh a nastav mu oprávnenie chmod 755.
18.2 Štruktúra riešenia
Rozdeľ si skript na funkcie. Každá funkcia sa postará o jednu sekciu reportu. Toto je ozaj dobrý návyk, ktorý sa ti zíde v každom väčšom skripte.
Funkcia sekcia() len pekne formatuje nadpisy. Vďaka nej nemusíš písať echo "=== ... ===" stále dokola. Kód zostáva čistý a ľahko sa mení.
18.3 Spustenie a overenie
18.4 Pomocné tipy
Ak sa niečo nedarí, skús postupovať takto:
- Najprv otestuj každý príkaz zvlášť v termináli. Funguje
free -h | head -2? Fungujeps -u $(whoami)? - Pridávaj funkcie postupne. Najprv dátum, potom meno, potom pamäť. Nechaj vždy otestovať.
- Ak niečo nefunguje, pridaj
echopred problematický riadok a pozri, akú hodnotu má premenná. - Na ladenie môžeš dočasne pridať
set -xna začiatok skriptu. Shell bude vypisovať každý príkaz pred jeho spustením.
- Naplánuj na papier, aké sekcie by mal mať
report.sha ktorý príkaz v každej sekcii bude. - Prečo sa oplatí rozdeliť skript na menšie funkcie namiesto jedného dlhého kódu?
- Vysvetli, čo robí
date +%Fa ako by si ho využil v skripte. - Ktorá časť shell scriptingu ti doteraz robí najväčší problém a prečo?
Správa softvéru
Inštalácia, aktualizácia a odstraňovanie programov cez balíkový systém.
19.1 Čo je balíkový systém?
Balíkový systém je nástroj, ktorým sa v Linuxe inštalujú, aktualizujú a odstraňujú programy. Nemusíš nikam chodiť na web, sťahovať .exe súbory a klikať "Next". Všetko sa dá z terminálu.
Každý program je zabalený do balíka. Balíky sa ukladajú na serveri, ktorý sa volá repozitár. Keď napíšeš príkaz na inštaláciu, systém stiahne balík z repozitára, rozbalí ho a umiestni súbory na správne miesta. Automaticky vyrieši aj závislosti (ďalšie balíky, ktoré ten program potrebuje).
Rôzne distribúcie používajú rôzne balíkové systémy:
| Distribúcia | Správca balíkov | Príkaz |
|---|---|---|
Debian | apt | apt install nazov |
Linux Mint | apt | apt install nazov |
Fedora | dnf | dnf install nazov |
Na našom krúžku sú zmiešané distribúcie, takže si ukážeme oba varianty. Príkazy sú takmer identické, líši sa len názov správcu balíkov.
19.2 Aktualizácia systému
Pred akoukoľvek inštaláciou by si mal aktualizovať zoznam balíkov. Tým sa stiahne najnovší zoznam dostupných programov a ich verzií.
apt update iba stiahne zoznam, nič neinštaluje. Až apt upgrade nainštaluje samotné aktualizácie. Je to rozdiel: update = aktualizuj zoznam, upgrade = nainštaluj aktualizácie.
apt update (alebo dnf check-update). Bez toho môže systém hľadať balíky podľa starého zoznamu a nenájde ich, alebo nainštaluje staršiu veriu.
19.3 Hľadanie a inštalácia
Ak nevieš presný názov balíka, vyhľadaj ho:
Vyskúšame si inštaláciu programu tree, ktorý zobrazuje obsah adresárov ako strom:
19.4 Odstraňovanie programov
Ak program už nepotrebuješ, môžeš ho odstrániť. Dva príkazy: remove odstráni balík, ale ponechá konfiguračné súbory. purge odstráni všetko vrátane konfigurácie.
apt remove (alebo dnf remove) odstráni program, ale nechá jeho konfiguráciu v systéme. apt purge odstráni úplne všetko. Ak chceš program nainštalovať znova a ponechať si nastavenia, stačí remove. Ak ho chceš zmazať aj s konfiguráciou, použi purge.
19.5 Ďalšie užitočné príkazy
apt --version alebo dnf --version. Ten, ktorý nevyhodí chybu, je ten správny.
- Vysvetli rozdiel medzi
apt updateaapt upgrade. - Čo je repozitár a čo sa stane, keď balík, ktorý chceš nainštalovať, v repozitári nie je?
- Čo sú závislosti balíka a prečo je dobré, že ich systém rieši automaticky?
- Vysvetli, prečo je na Debiane/Minte
apta na Fedorednf- v čom je princíp rovnaký?
Procesy
Čo sa deje v pozadí systému, ako sledovať a riadiť spustené programy.
20.1 Čo je proces?
Keď spustíš akýkoľvek program v Linuxe, vytvorí sa proces. Proces je program, ktorý práve beží. Každý proces má svoje číslo (PID) a vie, aký proces ho spustil (PPID).
- PID (Process ID) - jedinečné číslo každého procesu
- PPID (Parent Process ID) - PID procesu, ktorý ho spustil
- UID (User ID) - používateľ, ktorému proces patrí
Na sledovanie a ovládanie procesov slúžia príkazy ps, top, htop, kill a ďalšie.
20.2 Zobrazenie procesov
Bazické ps ukáže iba procesy v aktuálnom termináli. To málo stačí. Omnoho užitočnejší je:
Príznak aux znamená: a = všetky procesy, u = pre používateľa, x = aj bez terminálu. Alternatíva:
ps aux zobrazuje percentuálnu spotrebu CPU a RAM, ps -ef ukazuje PPID (rodičovský proces). Používaj ten, ktorý ti viac vyhovuje.
20.3 Interaktívne sledovanie: top a htop
Namiesto statického výpisu môžeš sledovať procesy v reálnom čase:
htop je farebný, intuitívny a dá sa ovládať šípkami a klávesmi. Pre ukončenie stlač q.
top funguje podobne, ale je menej prehľadný. Oba ukazujú: koľko procesov beží, ako veľmi sa používa CPU a RAM, ktoré procesy žerú najviac zdrojov.
20.4 Zabíjanie procesov
Ak proces zbesí alebo ho chceš ukončiť, použiješ kill. Potrebuješ PID procesu:
Ak normálne kill nepomôže (proces nereaguje), použijeme silnejší signál:
kill (bez prepínača) pošle procesu signál SIGTERM a nechá ho korektne skončiť. kill -9 (SIGKILL) proces okamžite ukončí bez možnosti uložiť dáta. Používaj kill bez -9 vždy, keď to ide. -9 až keď nič iné nefunguje.
20.5 Úlohy na pozadí
Pomocník & spustí príkaz na pozadí. Ctrl+Z pozastaví proces. jobs ukáže zoznam pozastavených/odložených úloh. fg vráti poslednú úlohu do popredia. bg ju spustí na pozadí.
Ak chceš, aby príkaz bežal aj po odhlásení z terminálu, použi nohup:
kill PID = jemné ukončenie (SIGTERM). kill -9 PID = okamžité ukončenie (SIGKILL). pkill nazov = zabiť všetky procesy podľa názvu. killall nazov = to isté, ale presnejšie.
20.6 Ako vzniká proces
Každý proces vzniká tak, že ho vytvorí iný proces. Žiadny proces jednoducho nevznikne z ničoho. Jadro na to používa dve systémové volania: fork() a exec.
fork()vytvorí kópiu rodičovského procesu. Nový proces dostane vlastné PID a dedí obsah pamäte rodiča.exec(napr.execl(),execv()) nahradí aktuálny obraz programu novým programom. Proces zostane ten istý (rovnaké PID), ale beží už niečo úplne iné.
Keď v termináli napíšeš nejaký príkaz, tvoj shell (proces) najprv zavolá fork() a vytvorí kópiu seba samého. V tomto dieťati hneď zavolá exec() a nahradí svoj obraz tým príkazom, ktorý si zadal. Preto má každý proces okrem PID aj PPID (parent PID, číslo rodičovského procesu). Všetky procesy tak tvoria strom, na čele celého stromu je PID 1, čo je systemd.
wait(), aby si prevzal informáciu o ukončení dieťaťa. Ak tak neurobí, dieťa sa stane zombie procesom. V top alebo htop ho uvidíš ako Z v stave procesu alebo ako "defunct". Väčšinou sa o to postará sám systém, ale ak zombie zostane visieť, znamená to chybu v rodičovskom procese.
- Vysvetli, čo je proces a čo znamená PID a PPID.
- Aký je rozdiel medzi
killakill -9? Prečo sa-9neodporúča ako prvá voľba? - Čo sa stane, keď spustíš príkaz s
&na konci? A čo spraví Ctrl+Z? - Vysvetli, na čo slúži
ps auxa čo v ňom vidíš pri svojom používateľovi.
Služby a systemd
Správa služieb na pozadí, logovanie a riadenie systému cez systemd.
21.1 Čo je systemd?
Keď sa Linux spustí, systemd je prvý proces (PID 1), ktorý naštartuje všetko ostatné. Stará sa o služby (services), ako je SSH, sieť, tlačiareň a ďalšie programy, ktoré bežia na pozadí.
Servis (service) je program, ktorý beží na pozadí a čaká na požiadavky. Príklady:
sshd- server pre vzdialené pripojenie cez SSHcron- plánovač úlohNetworkManager- správa sietecups- tlačiarenský server
Každá služba je opísaná v súbore jednotky (unit file), typicky v adresári /etc/systemd/system/. Ovládame ju cez príkaz systemctl.
21.2 Kontrola stavu služieb
Vidíš tri dôležité veci: Loaded (kde je konfigurácia, či je zapnutý pri štarte), Active (že práve beží), a Main PID (číslo hlavného procesu).
Príkaz systemctl --failed ukáže iba služby, ktoré zlyhali. Ak je zoznam prázdny, systém je v poriadku.
21.3 Štart, stop, reštart
Základné ovládanie služieb:
| Príkaz | Čo robí |
|---|---|
systemctl start nazov | Spustí službu hneď |
systemctl stop nazov | Zastaví službu |
systemctl restart nazov | Zastaví a spustí znova |
systemctl enable nazov | Zapne službu pri štarte systému |
systemctl disable nazov | Vypne službu pri štarte systému |
systemctl start spustí službu len teraz. systemctl enable nastaví, aby sa služba spustila automaticky pri každom zapnutí systému. Ak chceš niečo spustiť teraz aj pri bootovaní, použi obe: systemctl enable --now nazov.
21.4 Časovanie a logy
systemd-analyze blame ukáže, ako dlho trvalo spustenie jednotlivých služieb. Hodí sa, keď chceš zistiť, prečo sa systém dlho štartuje.
Pre logy (záznamy) systému použijeme journalctl:
Príkaz journalctl -f sleduje logy v reálnom čase, rovnako ako tail -f pre súbory. Ukončíš ho Ctrl+C.
sudo. Čítanie logov cez journalctl väčšinou funguje aj ako normálny používateľ, ale niekedy potrebuješ sudo journalctl pre staršie záznamy.
21.5 Ako prebieha boot
Keď stlačíš tlačidlo napájania, nedostaneš sa k shellu okamžite. Systém prechádza niekoľkými krokmi, než sa spustí.
- BIOS alebo UEFI sa spustí a vykoná základné testy hardvéru (POST, Power-On Self Test). Overí, že RAM, disk a ďalšie komponenty fungujú.
- Nájde bootloader zvyčajne v MBR (Master Boot Record) alebo EFI partícii.
- Spustí bootloader, napríklad GRUB2, systemd-boot alebo LILO.
- Bootloader načíta kernel a voliteľne initramfs, čo je malý dočasný koreňový systém.
- Kernel inicializuje hardvér a ovládače a nakoniec spustí init systém (u nás
systemd), a tým celý systém.
21.6 Iné init systémy a daemoni
systemd nie je jediný init systém, ktorý existuje. Linuxová komunita má viacero alternatív.
- SysVinit, klasický UNIX-ovský init. Používa runlevely (stav systému, napríklad podľa Red Hat konvencie 3 = iba terminál, 5 = grafické rozhranie; Debian má naproti tomu 2-5 rovnaké) a skripty v
/etc/init.d/. Jednoduchý, ale pomalší, pretože spúšťa služby postupne za sebou. - OpenRC, ľahký init systém založený na shell skriptoch. Podporuje paralelné spúšťanie služieb. Typický pre Gentoo, Devuan a ďalšie distribúcie, ktoré nechcú systemd.
- runit, extrémne rýchly a minimalistický init. Služby spúšťa paralelne a automaticko restartuje tie, ktoré spadnú. Používa ho Void Linux.
Základným pojmom je daemon. Daemon je proces, ktorý beží na pozadí bez priamej interakcie s používateľom. Práve tie spravuješ príkazmi systemctl. Vybrané príklady:
- CUPS, tlačový server, ktorý spravuje tlačiarne a tlačové úlohy.
- XOrg / X11, služba na vykresľovanie grafického rozhrania. Zastaralá architektúra, ale stále veľmi rozšírená.
- Wayland, novšia náhrada XOrg. Postupne ju preberajú distribúcie (Fedora, Ubuntu) ako predvolený zobrazovací server.
systemctl. Keď zapneš sshd, spúšťaš daemon, ktorý čaká na SSH pripojenia. Keď vypneš cups, vypínaš daemon pre tlač. Všetko sú to jednoduché procesy, akurát žiadne nevyžadujú tvoju prítomnosť.
- Vysvetli rozdiel medzi
systemctl startasystemctl enable- kedy sa čo použije? - Čo je systemd unit a aké typy jednotiek poznáš (okrem služieb)?
- Na čo slúži
journalctl -u sluzbaa kedy pridáš-f? - Prečo sa
enablenevzťahuje len na aktuálny beh, ale aj na štart systému?
Cron a plánovač
Automatické spúšťanie príkazov a skriptov v naplánovanom čase.
22.1 Čo je cron?
Cron je plánovač úloh v Linuxe. Umožňuje naplánovať spúšťanie príkazov alebo skriptov v presne určenom čase. Nastavíš raz a funguje automaticky, bez tvojho zásahu.
Služba cron (alebo crond) beží na pozadí. Každú minútu kontroluje, či niektorý naplánovaný príkaz má prísť na rad. Ak áno, spustí ho.
Nastavenia sa ukladajú do crontab (cron tabuľka). Každý používateľ má svoj vlastný crontab.
22.2 Práca s crontabom
| Príkaz | Čo robí |
|---|---|
crontab -e | Otvorí crontab na úpravu |
crontab -l | Vypíše obsah crontabu |
crontab -r | Odstráni celý crontab (pozor!) |
22.3 Syntax cron riadku
Každý riadok v crontabe má túto štruktúru:
minúta hodina deň mesiac deň_týždňa príkaz
| Pozícia | Rozsah | Príklad |
|---|---|---|
| minúta | 0 - 59 | 30 |
| hodina | 0 - 23 | 8 |
| deň | 1 - 31 | 15 |
| mesiac | 1 - 12 | 6 |
| deň_týždňa | 0 - 7 (0 a 7 = nedeľa) | 1 |
| príkaz | akýkoľvek príkaz alebo skript | /home/student/zaloha.sh |
Znak * znamená "každý". Špeciálne znaky: */5 = každých 5, 1,15 = 1. a 15., 1-5 = od 1 do 5.
22.4 Praktické príklady
Otvor crontab cez crontab -e a pridaj tieto riadky:
crontab -l, že sa riadky uložili správne.
22.5 Cron zo zálohy z hodiny 17
Na hodine 17 sme napísali zálohovací skript. Teraz ho naplánujeme, aby sa spúšťal automaticky:
Predtým, než založíš cron, otestuj skript manuálne:
22.6 Logy cronu
Ako zistíš, či cron naozaj spustil tvoj príkaz?
crontab -r odstráni celý crontab, radšej uprav cez crontab -e a vymaž len ten riadok.
- Rozlúšti cron riadok:
30 7 * * 1 /usr/local/bin/zaloha.sh- kedy presne sa spustí? - Vymenuj 5 polí cron riadku a čo každé znamená.
- Napíš cron riadok, ktorý spustí skript každý deň o 18:00.
- Prečo je cron na serveroch dôležitý? Uveď aspoň 2 reálne príklady použitia.
Základy siete
IP adresy, gateway, DNS a prvé sieťové príkazy.
23.1 Čo je IP adresa?
Každý počítač v sieti má svoju adresu, podobne ako dom má číslo. Bez nej by sa dáta nemali kam doručiť.
IP adresa je číslo, napríklad 192.168.1.10. localhost je špeciálna adresa 127.0.0.1, ktorá vždy ukazuje na tvoj vlastný počítač. Gateway je brána, cez ktorú sa dostaneš von do internetu, a DNS prekladá mená ako google.com na IP adresy.
localhost je vždy 127.0.0.1 a ukazuje na tvoj vlastný počítač. Každý počítač v sieti má unikátnu IP adresu, aby sa dáta doručili správnemu stroju.
23.2 Zisti svoju IP a gateway
Príkaz ip je moderný nástroj na správu siete. ip a ukáže všetky sieťové rozhrania a ich adresy.
lo je loopback rozhranie (localhost). enp0s3 je tvoja skutočná sieťová karta. Riadok default via 192.168.1.1 ti hovorí, že gateway je 192.168.1.1.
23.3 Ping a traceroute
ping pošle testovací paket a čaká na odpoveď. Najprv otestujeme localhost, potom sa pozrieme von do internetu.
-c 4 obmedzí počet paketov na štyri, inak by ping bežal donekonečna. 1.1.1.1 je verejný DNS server Cloudflare, dobrý na test, či máš internet.
tracepath (alebo traceroute) ukáže cestu, ktorou paket prechádza cez jednotlivé routery až k cieľu. Každý riadok je jeden skok v sieti.
23.4 Počúvajúce porty a hostname
ss -tln ukáže, ktoré služby na tvojom počítači počúvajú na sieťových portoch. hostname ti povie názov stroja.
Port 22 počúva SSH, port 631 tlačiareň. Súbor /etc/hosts je lokálna tabuľka mien, ktorá sa prečíta skôr ako DNS. Zatiaľ ho len ukazujeme, neupravujeme.
ip a ukáže IP adresy, ip route gateway, ping testuje spojenie a ss -tln ukáže počúvajúce porty. Tieto štyri príkazy sú základ každého sieťového admina.
- Vysvetli vlastnými slovami, čo je IP adresa, gateway a DNS - na čo slúžia?
- Prečo je
localhostvždy127.0.0.1a na čo je dobrý? - Čo znamená riadok
default via 192.168.1.1z výpisuip route? - Kedy by si použil
pinga čo ti odpoveď (alebo jej absencia) prezradí?
SSH
Vzdialená správa serverov cez Secure Shell.
24.1 Čo je SSH?
SSH (Secure Shell) je šifrovaný protokol na vzdialenú správu počítačov. Správcovia serverov sa takto pripájajú na stroje, ktoré nemajú žiadny monitor.
Keď sa pripojíš cez SSH, dostaneš terminál vzdialeného počítača, akoby si pri ňom sedel. Všetko, čo pošleš, je šifrované, takže nikto na ceste nevidí tvoje heslá ani príkazy.
24.2 Prvé pripojenie
Pripojenie má tvar ssh používateľ@ip. Skúsime sa pripojiť na localhost ako root, čo je bežné na VM.
Pri prvom pripojení sa ťa systém pýta, či dôveruješ serveru. Odpovieš yes a potom zadáš heslo. Všimni si, že prompt sa zmenil na root@debian:~#.
24.3 Inštalácia SSH servera
Ak SSH server nemáš nainštalovaný, nainštalujeme ho. Na Debiane a Minte cez apt, na Fedore cez dnf.
systemctl enable zabezpečí, že sa služba spustí aj po reštarte. Na Fedore sa služba volá sshd, na Debiane ssh.
24.4 SSH kľúče
Heslá sa dajú uhádnuť. Kľúče sú bezpečnejšie. Vygeneruješ si pár: súkromný kľúč (necháš si ho) a verejný kľúč (nakopíruješ na server).
Po nakopírovaní kľúča sa pripojíš bez zadávania hesla. ssh-copy-id ti verejný kľúč pridá do súboru ~/.ssh/authorized_keys na serveri.
~/.ssh/id_ed25519 (alebo id_rsa) je tvoja identita. Kto ho má, môže sa za teba prihlásiť. Verejný kľúč .pub môžeš zdieľať, súkromný nikdy.
24.5 SCP - kopírovanie súborov
scp kopíruje súbory medzi počítačmi cez SSH. Funguje ako cp, ale s adresou vzdialeného stroja.
scp -r kopíruje celý adresár rekurzívne. Smer šípky určuje smer kopírovania: z lokálneho na vzdialený, alebo naopak.
- Prečo je komunikácia cez SSH šifrovaná a čo by sa mohlo stať, keby nebola?
- Vysvetli rozdiel medzi súkromným a verejným kľúčom pri SSH. Ktorý nikdy nikomu nedávaš?
- Prečo je prihlasovanie cez kľúče bezpečnejšie ako cez heslá?
- Akou formou sa zadáva vzdialené pripojenie? Napíš príklad
ssh ...a rozlúšti jednotlivé časti.
Súborové systémy
Disky, mountovanie a miesto na disku.
25.1 Čo je mount a súborový systém?
Súborový systém určuje, ako sú dáta uložené na disku. Linux najčastejšie používa ext4. Mount znamená pripojiť disk do adresárovej štruktúry.
Na rozdiel od Windowsu, kde má každý disk písmeno, v Linuxe sa disky pripájajú do existujúcich adresárov. Napríklad tvoj hlavný disk je pripojený na / a swap je špeciálny oddiel, ktorý slúži ako virtuálna pamäť (diskový doplnok RAM).
25.2 lsblk a blkid
lsblk ukáže disky a oddiely v prehľadnej stromovej štruktúre. blkid ukáže identifikátory oddielov.
Vidíš disk sda s tromi oddielmi: boot, hlavný systém na ext4 a swap. MOUNTPOINTS ukazuje, kam je ktorý oddiel pripojený.
25.3 Miesto na disku
df -h ukáže voľné miesto na všetkých pripojených systémoch. du ukáže, koľko miesta zaberajú adresáre.
-h znamená human-readable, teda čitateľné veľkosti ako 1.2G. du -sh * ukáže veľkosť každého súboru a adresára v aktuálnom priečinku, du -sh . celkovú veľkosť aktuálneho adresára.
25.4 Mount a fstab
mount bez argumentov ukáže všetky aktuálne pripojené systémy. Súbor /etc/fstab definuje, čo sa pripojí pri štarte.
/etc/fstab riadi, čo sa pripojí pri štarte systému. Chyba v ňom môže spôsobiť, že sa systém nespustí. Nikdy ho neupravuj bez dozoru učiteľa.
25.5 Vytvor a odstráň testovací súbor
dd vytvorí súbor presnej veľkosti. Vytvoríme 100 MB testovací súbor a hneď ho odstránime.
if=/dev/zero znamená vstup plný núl, bs=1M veľkosť bloku a count=100 počet blokov, teda 100 MB. Súbor sme hneď odstránili, aby sme nezaplnili disk.
25.6 Prehľad súborových systémov
Na disku môže byť viac formátov a každý má inú filozofiu. Toto sú tie, na ktoré v Linuxe najčastejšie narazíš.
| Formát | Kde ho stretneš | Poznámka |
|---|---|---|
ext4 | systémový disk / a /home | moderný žurnalovací súborový systém, natívny pre Linux, dnešný štandard |
ext2 | staršie systémy, embedded | bez žurnalovania, výborná podpora v jadre |
btrfs | /home, /var, NAS servery | žurnalovací, podporuje snapshoty |
xfs | veľké dáta, serverové disky | silný žurnalovací FS, bežný na Linux serveroch |
swap | swapovací súbor/partícia | disková virtuálna pamäť (paging), dnes častejšie swapfile (obdoba pagefile.sys vo Windows) |
FAT32 / exFAT | USB kľúče, pamäťové karty | univerzálna podpora všade |
NTFS | Windows disky | žurnalovací, v Linuxe výborná podpora cez ntfs-3g, rozumie aj Windows právam |
SquashFS | live CD / read-only systémy | komprimovaný súborový systém v obraze |
ext4, pre zdieľané dáta medzi OS NTFS/exFAT, pre snapshoty btrfs.
- Vysvetli vlastnými slovami, čo je mount a čo súborový systém.
- Aký je rozdiel medzi
df -hadu -sh? Kedy použiť ktorý? - Prečo je
/etc/fstabdôležitý a prečo by si ho bez uváženia nemeňoval? - Čo je swap a na čo slúži?
Nano a vim
Textové editory priamo v termináli.
26.1 Prečo editor v termináli?
Na serveri nemáš grafické prostredie. Keď sa pripojíš cez SSH, jediný spôsob, ako upraviť konfiguračný súbor, je textový editor v termináli.
Naučíš sa dva: nano je jednoduchý a priateľský, vim je výkonný, ale má strmú krivku učenia. Oba nájdeš na každom Linuxe.
26.2 Nano - priateľský editor
Nano otvoríš príkazom nano súbor. Dole v okne vidíš klávesové skratky. Ctrl+O uloží, Ctrl+X ukončí, Ctrl+W hľadá.
V nano píšeš rovno, žiadne módy. Ctrl+O ťa opýta na názov súboru, stlačíš Enter a je uložený. Ctrl+X ťa vráti do terminálu.
26.3 Vim - výkonný, ale náročný
Vim má dva hlavné módy: normal a insert. V normal móde naviguješ a vydávaš príkazy, v insert móde píšeš text. i ťa prepne do insert, Esc vždy vráti do normal.
Po otvorení si v normal móde. Stlač i a začni písať. Keď skončíš, stlač Esc, napíš :wq a Enter pre uloženie a ukončenie. :q! ukončí bez uloženia.
26.4 Základné vim príkazy
Pár príkazov, ktoré ti ušetria veľa času. V normal móde:
| Príkaz | Význam |
|---|---|
| i | prepnúť do insert módu (písať) |
| Esc | vrátiť sa do normal módu |
| h j k l | pohyb vľavo, dole, hore, vpravo |
| x | zmazať znak pod kurzorom |
:wq | uložiť a ukončiť |
:q! | ukončiť bez uloženia |
Namiesto šípok používaj h j k l. Spočiatku to bude pomalé, ale po pár dňoch budeš rýchlejší ako s myšou.
26.5 vimtutor
Vim má vstavaný tutoriál. Stačí spustiť vimtutor a prejdeš si všetko krok za krokom priamo v termináli.
vimtutor je najlepší spôsob, ako sa naučiť vim. Prejdi si ho celý, zaberie to asi 30 minút a naučí ťa všetko podstatné.
- Prečo sa vôbec učíme editovať text v termináli, keď existujú grafické editory? Uveď 2 dôvody.
- Vysvetli rozdiel medzi módom insert a normal vo vime. Ktorou klávesou sa medzi nimi prepínaš?
- Kedy by si použil
nanoa kedyvim? Na čo jevimtutor? - Napíš spamäti 3 užitočné klávesové skratky pre nano a 3 pre vim.
tmux a vzdialená správa
Terminálový multiplexor, ktorý drží tvoje relácie nažive.
27.1 Problém s odpojením
Keď sa pripojíš cez SSH a spustíš dlhý príkaz, čo sa stane, keď sa odpojíš? Proces zomrie, pretože bežal na popredí tvojej relácie.
Predstav si, že inštaluješ veľký balík, odpojíš sa na obed a po návrate zistíš, že inštalácia sa prerušila. tmux tento problém rieši.
27.2 Čo je tmux?
tmux je terminálový multiplexor. Vytvorí reláciu, ktorá beží nezávisle od tvojho pripojenia. Môžeš sa odpojiť, relácia beží ďalej, a keď sa vrátiš, pripojíš sa späť a vidíš presne to, čo si nechal.
27.3 Vytvor a pripoj reláciu
Novú reláciu vytvoríš tmux new -s názov. Odpojíš sa Ctrl+B a potom d. Znova sa pripojíš tmux attach.
Všimni si: tmux new -s praca vytvoril reláciu, ale hneď sa odpojil, pretože sme ju spustili z terminálu. tmux ls ukáže bežiace relácie a tmux attach -t praca sa k nej pripojí.
27.4 Dlhý príkaz a odpojenie
Teraz to najdôležitejšie. Spustíme dlhý príkaz v tmux, odpojíme sa a znova pripojíme. Príkaz medzitým beží.
Príkaz sleep 60 bežal 60 sekúnd. Medzitým sme sa odpojili a znova pripojili, a príkaz stále bežal a dokončil sa. Presne takto funguje tmux.
27.5 Rozdelenie okna
tmux ti umožní mať viac terminálov v jednom okne. Ctrl+B a % rozdelí okno vertikálne, Ctrl+B a " horizontálne. Prepínaš sa Ctrl+B a šípkou.
V jednej polovici môžeš sledovať logy, v druhej písať príkazy. Je to ako viac okien terminálu, ale v jednom SSH pripojení.
- Prečo proces spustený na popredí zomrie, keď sa odpojíš cez SSH? Čo s tým spraví tmux?
- Vysvetli, čo znamená detach a attach v tmux - aký je medzi nimi rozdiel?
- Kedy sa ti v reálnej administrácii oplatí tmux? Uveď 2 príklady.
- Prečo je pri dlhých príkazoch (napr. inštalácia) nebezpečné jednoducho zavrieť terminál?
Bezpečnosť a firewall
Základné pravidlá a ochrana systému firewallom.
28.1 Základné pravidlá bezpečnosti
Bezpečnosť nie je o jednom nástroji, ale o návykoch. Tri najdôležitejšie: aktualizuj systém, používaj silné heslá a spúšťaj čo najmenej služieb.
Každá otvorená služba je potenciálny vstup pre útočníka. Čím menej portov počúva, tým menšia plocha na útok. A aktualizácie opravujú známe diery, takže ich neodkladaj.
28.2 Firewall - čo to je?
Firewall je filter, ktorý rozhoduje, ktoré spojenia môžu prejsť do tvojho počítača. Predvolene môže blokovať všetko a ty povolíš len to, čo naozaj potrebuješ.
28.3 UFW na Debiane a Minte
ufw (Uncomplicated Firewall) je jednoduchý firewall pre Debian a Mint. Zapneš ho, skontroluješ stav a povolíš SSH.
Po zapnutí firewall blokuje všetko okrem povolených pravidiel. sudo ufw allow ssh povolí port 22, aby si sa mohol pripojiť cez SSH.
28.4 Firewalld na Fedore
Fedora používa firewalld. Skontroluješ stav služby a vypíšeš aktívne pravidlá.
firewall-cmd --list-all ukáže povolené služby. --add-service=http --permanent pridá HTTP natrvalo a --reload aplikuje zmeny.
28.5 Ako firewall blokuje port
Ukážeme si rozdiel. Keď je firewall vypnutý, port je otvorený. Keď ho zapneme bez povolenia, port sa zablokuje a spojenie zlyhá.
So zapnutým firewallom sa k portu 8080 zvonku nikto nedostane, aj keď služba beží. Firewall ho jednoducho neprepustí.
28.6 Ďalšie bezpečnostné tipy
Pár pravidiel, ktoré ťa ochránia na reálnom serveri:
- Vypni root login cez SSH v
/etc/ssh/sshd_config(riadokPermitRootLogin no). - Používaj silné heslá a SSH kľúče namiesto hesiel.
- Buď opatrný so
sudoers, neprideľuj zbytočné práva. - Pravidelne aktualizuj systém cez
apt upgradealebodnf upgrade.
- Prečo by firewall nemal mať otvorené všetky porty? Čo sa môže stať pri zle nastavenom serveri?
- Vysvetli pravidlo „povoliť len to, čo naozaj potrebuješ“ na príklade SSH a web servera.
- Napíš 3 bezpečnostné pravidlá, ktoré by si dodržal na vlastnom serveri.
- Prečo sú pravidelné aktualizácie systému dôležité pre bezpečnosť?
Web server (nginx)
Inštalácia, konfigurácia a testovanie web servera nginx.
29.1 Čo je web server?
Každá web stránka, ktorú navštíviš v prehliadači, niekde beží. Web server je program, ktorý prijíma požiadavky od klientov (prehliadačov) a posiela im späť obsah. Komunikácia prebieha cez protokol HTTP (port 80) alebo HTTPS (port 443).
Funguje to jednoducho: ty napíšeš v prehliadači adresu, tvoj počítač sa spojí so serverom a server odošle späť HTML stránku. Na našom VM si rozbeháme vlastný web server, aby sme videli, ako to celé funguje odvnútra.
29.2 Inštalácia nginx
nginx (vyslovuj "engine-x") je jeden z najpopulárnejších web serverov na svete. Je rýchly, spoľahlivý a ľahko sa konfiguruje. Nainštalujeme ho cez správcu balíkov.
29.3 Spustenie a kontrola
Po inštalácii treba nginx spustiť a nastaviť, aby sa spúšťal automaticky pri štarte systému. Použijeme na to systemctl, ktorý už poznáme z hodiny 21.
curl je príkaz na odosielanie HTTP požiadaviek priamo z terminálu. Je to prvý nástroj, ktorým testuješ, či web server funguje. localhost a 127.0.0.1 odkazujú na ten istý stroj, na ktorom sedíš.
29.4 Vlastná stránka
Úvodná stránka nginx je pekná, ale naša bude lepšia. Predvolený obsah sa nachádza v /var/www/html/. Upravíme si ju.
/var/www/html/. Súbory tam píšeš ako root (pomocou sudo), pretože ten adresár vlastní systém. Ak chceš stránku vytvoriť normálnym používateľom, musíš opraviť oprávnenia.
- Vysvetli model klient-server na príklade vlastnej web stránky z hodiny.
- Čo znamená port 80 a port 443? Aký je medzi nimi rozdiel?
- Ako overíš z terminálu, že web server beží? Prečo
curl localhoststačí ako test? - Kde leží obsah stránok nginx a prečo doň musíš písať ako root?
Vlastný systemd servis
Vytvoríme si vlastnú službu, ktorú vie systemd spúšťať, zastavovať a reštartovať.
30.1 Rýchle zopakovanie systemd
V hodine 21 sme sa naučili ovládať hotové služby. Dnes si vytvoríme úplne vlastnú. systemd je správca služieb - vie ich spúšťať pri štarte, reštartovať pri páde a zaznamenávať ich výstup.
Základné príkazy už poznáš:
Dnes to posunieme ďalej: namiesto hotovej služby si napíšeme vlastný skript a vlastnú definíciu služby v systemd.
30.2 Náš skript
Najprv si pripravíme skript, ktorý bude naša služba spúšťať. Každých 5 sekúnd zapíše aktuálny čas do súboru v domovskom adresári.
Vytvoríme ho v /usr/local/bin - to je štandardné miesto pre vlastné programy.
/usr/local/bin patria programy, ktoré nainštaluješ ručne (nie cez apt/dnf). Odtiaľ ich vie spustiť každý používateľ bez toho, aby musel písať celú cestu.
30.3 Unit súbor
Teraz príde to hlavné - definícia služby pre systemd. Súbory služieb sú v /etc/systemd/system/ a majú príponu .service.
| Sekcia | Riadok | Význam |
|---|---|---|
[Unit] | Description | Popis služby (vidíš ho v status) |
[Unit] | After | Spusti až potom, čo je sieť hore |
[Service] | ExecStart | Ktorý program sa spustí |
[Service] | Restart | Reštartovať vždy, keď skript spadne |
[Install] | WantedBy | Pri ktorom "cieľe" sa služba spúšťa (multi-user = po prihlásení do systému) |
30.4 Spustenie služby
Po vytvorení unit súboru musíš vždy povedať systemd, že sa zmenil: daemon-reload.
Služba beží, loguje do súboru a vieš ju kedykoľvek zastaviť a spustiť. Všimnite si, že enable (spúšťa sa pri štarte) je iná vec ako start (spúšťa sa hneď teraz).
sudo systemctl daemon-reload. Inak si systemd pamätá starú verziu a tvoje zmeny sa neprejavia.
Restart=always, systemd ho bude reštartovať stále dokola. Nekonečný cyklus s sleep 5 je v poriadku, ale dávaj pozor, aby skript nemal logiku, ktorá okamžite zlyhá.
- Čo robí
ExecStarta čoRestart=alwaysv unit súbore? - Prečo je
daemon-reloadpovinný po zmene unit súboru? - Načrtni, čo všetko treba na vlastný servis: skript, unit súbor, príkazy. Napíš postup v 5 krokoch.
- Čo sa stane, keď máš
Restart=alwaysa skript okamžite skončí s chybou? Aké je riziko?
Logovanie a monitoring
Kde Linux ukladá logy, ako ich čítať a ako sledovať stav systému.
31.1 Prečo logovať?
Keď niečo nefunguje, logy sú prvé miesto, kam sa pozrieš. Log je záznam udalostí - kto sa prihlásil, ktorá služba spadla, čo sa dialo v systéme. Každý správca servera trávi čas čítaním logov.
V Linuxe sú logy na dvoch miestach: v /var/log (tradičné súbory) a v samotnom systemd (príkaz journalctl).
31.2 journalctl - logy systemd
journalctl číta logy, ktoré zbiera systemd. Je to najrýchlejší spôsob, ako zistiť, čo sa deje.
-n 15 ukáže posledných 15 riadkov. -u casopis filter na konkrétnu službu. -f (follow) sleduje logy naživo - skvelé pri debugovaní.
31.3 Logy v /var/log
Súbory v /var/log sú tradičnejšie logy, písané priamo programami.
| Súbor | Čo obsahuje |
|---|---|
auth.log | Prihlásenia, sudo, zmeny používateľov |
kern.log | Správy z jadra, hardvér, ovládače |
syslog | Všeobecné systémové správy |
apt/ | História inštalácií balíkov |
nginx/ | Logy web servera (ktorý si postavil v hodine 29) |
/var/log je čitateľná len pre root. Bežný používateľ by ich mohol čítať a zistiť heslá alebo citlivé informácie o systéme.
31.4 logrotate - prečo logy nerastú donekonečna
Logy by bez starostlivosti rástli, až kým by nezaplnili disk. K tomu slúži logrotate - starý log sa po čase "otočí" (zazipuje a nakoniec vymaže).
Preklad: logy nginx sa rotujú denne, ponechá sa 14 starých verzií, staré sa komprimujú. Nginx má vlastnú konfiguráciu, iné programy tiež.
31.5 Monitoring systému
Na sledovanie aktuálneho stavu systému slúži niekoľko príkazov, ktoré už poznáš. Poďme si ich dať dokopy:
watch opakuje príkaz stále dokola s prestávkou - super na sledovanie, ako sa systém mení. uptime ukáže, ako dlho systém beží a akú má záťaž.
systemctl status služba, 2) journalctl -u služba -n 50, 3) Google s presným textom chyby. Log ti vždy povie viac, než hádanie.
- Prečo sú logy pre správcu systému také dôležité? Uveď príklad situácie, keď ťa log zachráni.
- Vysvetli, čo robí
journalctl -u sluzba,-n 50a-f- čo každý prepínač pridá? - Prečo existuje logrotate a čo by sa stalo, keby logy rotované neboli?
- Vymenuj aspoň 3 príkazy na monitoring systému a čo každý ukazuje.
Záverečný projekt
Postavíš si kompletného mini-servera s web stránkou, vlastnou službou, zálohou a firewallom.
32.1 Zadanie
Toto je tvoja skúška. Postavíš malý, ale funkčný server, ktorý používa všetko, čo sme sa za 31 hodín naučili. Na ďalšej hodine ho odprezentuješ.
Projekt má štyri časti. Prejdi ich postupne a každú otestuj, až potom pokračuj ďalej.
32.2 Časť 1: Web server
Nginx z hodiny 29 musí bežať a na localhost musí odpovedať tvoja vlastná stránka s tvojím menom, triedou a malým popisom.
32.3 Časť 2: Vlastná služba
Služba uptime-log (vlastný názov si zvoľ) bude každú minútu zapisovať aktuálny uptime do súboru ~/uptime.log. Využiješ znalosti z hodiny 30.
32.4 Časť 3: Záloha
Napíš skript zaloha.sh (z hodiny 17), ktorý zazipuje celý /var/www/html do priečinka ~/backup so zadným dátumom v názve. Skript spustíš ručne.
32.5 Časť 4: Firewall
Zapni firewall (z hodiny 28) a povol v ňom SSH a HTTP, aby si sa vedel k serveru pripojiť a aby šla stránka otvoriť.
32.6 Dokumentácia
Vytvor README.txt v domovskom adresári a do neho napíš odpovede na tieto otázky:
- Aký názov si dal svojej službe a čo robí?
- Ako overíš, že web server beží?
- Kde a ako sa robí záloha?
- Ako sa volá tvoja služba v systemd a ako ju zastavíš?
- Naplánuj záverečný projekt na papier: 4 časti v poradí a ako každú otestuješ.
- Ktorá časť projektu je podľa teba najťažšia a ako ju chceš zvládnuť?
- Priprav si 2-minútovú prezentáciu: čo ukážeš a v akom poradí?
- Prečo je lepšie dokončiť a otestovať každú časť hneď, ako nechať všetko na koniec?
Prezentácia a záver
Posledná hodina: ukážeš, čo si postavil, a oslávime celý kurz.
33.1 Prezentácia projektu
Každý z vás má 2 minúty. Premietame na tabuľu, ostatní pozerajú. Tvoj VM je pripravený, projekt beží, ty ho predvedieš.
Odprezentuj štyri veci: web stránku (curl + otvor v prehliadači), službu (status + log), zálohu (ukáž .tar.gz a obsah) a firewall (status). Povedz aj jednu vec, ktorá ťa prekvapila alebo ktorej si nerozumel.
33.2 Čo sme sa naučili za celý kurz
| Blok | Hodiny | Čo vieš |
|---|---|---|
| 1 · Úvod | 1-3 | VM, inštalácia, prvý login, terminál |
| 2 · Terminál | 4-8 | cesty, súbory, wildcards, rúry, man |
| 3 · Práva | 9-12 | používatelia, sudo, chmod, chown |
| 4 · Skriptovanie | 13-18 | premenné, if, cykly, funkcie, skripty |
| 5 · Balíky a procesy | 19-22 | apt/dnf, procesy, systemd, cron |
| 6 · Sieť a admin | 23-28 | IP, SSH, súborové systémy, nano/vim, tmux, firewall |
| 7 · Nasadenie | 29-33 | nginx, vlastná služba, logy, projekt |
33.3 Čo ďalej?
Kurz končí, ale Linux sa nekončí. Tu je pár nápadov, kam pokračovať:
- Homelab - starý počítač alebo Raspberry Pi ako domáci server (Nextcloud, Plex, AdGuard)
- Self-hosting - vlastný cloud, vlastné web stránky, vlastný email
- Certifikáty - Linux Foundation, LPI Linux Essentials (prvá, ľahká certifikácia)
- Pokročilé skriptovanie - awk, sed, jq, automatizácia kadečoho
- Containery - Docker a pod, na čom beží moderný internet
- Vyskúšaj inú distribúciu - Arch? Gentoo? Ventoy a USB kľúč s desiatimi ISO
33.4 Programovanie na Linuxe
Linux je rodiskom obrovskej časti moderného softvéru. Väčšina serverov, na ktorých beží internet, je programovaná práve na Linuxe. Ak ťa programovanie ťahá, tu je prehľad toho, čo ťa čaká.
CLI nástroje - kompilátory a jazyky priamo v termináli
Na programovanie nepotrebuješ nič navyše. Kompilátory a jazyky sú priamo v systéme: gcc/g++ pre C/C++, python pre Python a git na správu kódu je neoddeliteľnou súčasťou systému. Všetko ovládaš z terminálu, ktorý už dôverne poznáš.
GUI prostredia - vývojové nástroje s oknami
Ak chceš programovať s oknami, na Linuxe máš na výber z desiatok prostredí:
- VS Codium - plne open-source odvodenina Visual Studio Code (ktorý má aj proprietárne časti a telemetriu Microsoftu), univerzálne, najpopulárnejšie
- Eclipse - univerzálne, hlavne pre Javu
- QT Creator - C/C++
- Apache NetBeans - Java
- Jupyter - Python, matematika a dáta
- Thonny a PyCharm - Python
- Code::Blocks - C/C++
- MonoDevelop - .NET
- Scratch - vizuálne programovanie pre úplný začiatok
- Lazarus - Pascal
- Arduino IDE - mikrokontroléry
Výhody Linuxu pre programátorov
- Git a Mercurial sú integrálnou súčasťou systému - nemusíš nič doťahovať
- Výborná podpora rôznych architektúr - toolchaining pre x86, ARM, RISC-V a ďalšie
- Dokumentácia jazykov priamo v systéme - man stránky pokrývajú aj C/C++
- Filozofia "všetko je súbor" dáva programom jednotné rozhranie
- Balíčkový systém nainštaluje všetky nástroje jedným príkazom
- Napíš 5 vecí, ktoré ťa na krúžku najviac bavili alebo prekvapili.
- Napíš 1 vec, ktorú chceš v Linuxe vyskúšať ďalej, a prečo práve to.
- Ktorá hodina ti dala najviac a čo by si poradil budúcim študentom krúžku?