Unix / Linux
Charakteristika · Příkazový řádek · Skriptování · SSH · DNS · DHCP · Virtualizace
12. Unix / Linux
Kompletní průvodce od filozofie systému, příkazového řádku a skriptování až po síťové služby a virtualizaci
Unix je víceuživatelský, víceúlohový operační systém vyvinutý v Bellových laboratořích AT&T na přelomu 60. a 70. let. Byl napsán v jazyce C – to bylo revoluční, protože OS se tehdy psaly výhradně v assembleru závislém na hardware. Díky C mohl být Unix přenesen na různé platformy.
Linux je svobodný, otevřený a volně dostupný operační systém podobný Unixu (Unix-like). Přesný název je GNU/Linux. Projekt GNU zahájil Richard Stallman v roce 1984 ve Free Software Foundation. Jádro Linuxu napsal Linus Torvalds v roce 1991 za účelem nahradit tehdejší Minix. Uživatelé mají přístup ke zdrojovému kódu a mohou systém přizpůsobovat svým potřebám.
Stavební bloky operačního systému GNU/Linux
GNU/Linux se skládá z pěti vrstev komponent, které na sebe navazují:
coreutils.
libc6.
Softwarové komponenty jsou distribuovány ve formě balíčků (packages) – archivů (.deb, .rpm…), které obsahují programy nebo knihovny, metadata, seznam závislostí a instrukce pro instalaci. Správce balíčků (apt, dnf, pacman…) se stará o instalaci, aktualizaci, odstraňování a řešení závislostí.
Vlastnosti GNU/Linuxu
Linux je moderní – grafické prostředí určuje jeho vzhled a lze ho plně přizpůsobit. Je relativně bezpečný (malware na Linuxu se vyskytuje výrazně méně). Lze na něm mít nainstalované velké množství aplikací, podporuje vzdálenou správu. Podporuje vlastní souborové systémy (ext2, ext3, ext4) a zároveň umí pracovat se systémy Windows (NTFS, FAT32) – zatímco Windows s linuxovými souborovými systémy pracovat neumí.
1.1 Srovnání s MS Windows
Rozdíly mezi Linuxem, Unixem a Windows nejsou pouze kosmetické – jde o fundamentálně odlišné přístupy k tomu, co OS je a jak by měl fungovat.
| Kritérium | Linux | Unix | Windows |
|---|---|---|---|
| Zdrojový kód | Otevřený (Open Source), licence GNU GPL | Převážně uzavřený, vlastnické licence (AIX, HP-UX) | Uzavřený, proprietární (Microsoft EULA) |
| Náklady | Obvykle zdarma | Často drahé | Placená licence |
| Bezpečnost | Méně cílen malwarem | Méně cílen malwarem | Více cílen malwarem |
| Typické použití | Servery, superpočítače, cloud, embedded | Podniky, datová centra, telekomunikace | Desktop, komerční servery (Exchange, SQL) |
| Podpora HW | Široká škála hardware | Omezená na specifický hardware | Široká škála hardware |
| Uživatelské rozhraní | Více desktopových prostředí (GNOME, KDE, XFCE…) | Omezené GUI, převážně CLI | Jedno desktopové prostředí |
| Varianty | Stovky distribucí (Ubuntu, Debian, Fedora, Arch…) | Málo variant (AIX, HP-UX, Solaris, macOS) | Windows 10, 11, Server… |
| Konfigurace | Textové soubory v /etc | Textové soubory | Binární registr (regedit) |
| Správa softwaru | Správce balíčků (apt, dnf, pacman) | Správce balíčků nebo ručně | Instalátory .exe/.msi |
| Uživatelský model | Komunita i podniky | Převážně podniky | Koncoví uživatelé a podniky |
Filozofický rozdíl v práci se systémem
Windows byl navržen s důrazem na grafické rozhraní jako primární způsob ovládání. Linux naopak staví na příkazovém řádku jako základním nástroji správce – GUI je jen nadstavba. Na linuxovém serveru v datovém centru nemusí žádné GUI existovat – systém běží bez grafiky roky bez restartu.
Konfigurace v Linuxu je uložena v prostých textových souborech v adresáři /etc. Jakýkoliv textový editor (nano, vim, gedit) je postačující – není potřeba speciální nástroj jako Windows registr. Konfigurace lze verzovat Gitem, sdílet, automatizovat skripty.
1.2 Adresářová struktura
Linux/Unix nepoužívá označení disků jako C:\, D:\ apod. Místo toho má jeden strom začínající kořenem /. Fyzické disky a oddíly se připojují (mountují) do adresářů tohoto stromu. Místo označení C: se používají soubory zařízení v adresáři /dev:
/dev/sda/dev/sda1/dev/nvme0n1/dev/nvme0n1p1Oddíly se připojují (mountují) do stromové struktury souborového systému – například / (kořen), /home (uživatelská data), /boot (zaváděcí soubory) nebo /mnt//media (dočasně připojená média).
/boot/grub/.
Souborové systémy Linuxu
| FS | Rok | Vlastnosti |
|---|---|---|
ext2 | 1993 | Nežurnálový, preferovaný pro flash disky a SSD |
ext3 | 2001 | Žurnálový, zpětně kompatibilní s ext2 |
ext4 | 2006 | Výchozí pro většinu distribucí. Žurnálový, větší soubory, kontrolní součty metadat, extenty, neomezený počet podadresářů (64 000). Kompatibilní s Windows a Mac. |
btrfs | 2007 | Snímkování (snapshots), sdružování disků, online defragmentace, komprese. Používá Fedora Workstation. |
bcachefs | 2015 | Úplné šifrování FS, snímky, nativní komprese |
NTFS | — | Linux podporuje přes ovladač ntfs-3g, ale nepodporuje unixová oprávnění |
exFAT | — | Odlehčená verze NTFS pro flash disky, kompatibilní se všemi zařízeními |
Absolutní a relativní cesty
Absolutní cesta začíná vždy lomítkem / od kořene – např. /home/ales/soubor.txt. Platí odkudkoliv. Relativní cesta vychází z aktuálního adresáře – dokumenty/soubor.txt. Speciální symboly: . = aktuální adresář, .. = nadřazený adresář, ~ = domovský adresář uživatele.
Unix/Linux nabízí dva způsoby interakce: CLI (Command Line Interface – příkazový řádek) a GUI (grafické rozhraní). Klíčový rozdíl oproti Windows: GUI bylo v Linuxu od počátku nepovinnou nadstavbou, ne součástí jádra. Server bez GUI funguje naprosto plnohodnotně.
2.1 Základní příkazy
Příkazy mají obecnou strukturu: příkaz [přepínače] [argumenty]. Přepínače začínají - (zkrácené) nebo -- (slovní). Příkaz man příkaz zobrazí kompletní dokumentaci, příkaz --help stručnou nápovědu.
Navigace a ovládání shellu
pwdcdcd /etc absolutně · cd .. o úroveň výš · cd ~ domovský · cd - předchozí adresářls-l podrobný, -a skryté soubory, -h lidsky čitelné velikosti, -R rekurzivněhistoryhistory 10 posledních 10. history -c smaže historii. Šipka ↑ ↓ procházení.who / whoamiwho zobrazí všechny přihlášené uživatele. whoami nebo id -un vypíše aktuálního uživatele.cleardatedate +"%Y-%m-%d" formátovaně.calcal -m 2025 nebo cal 1 2025. Nutno nainstalovat (apt install bsdmainutils).passwdmanman ls. Pohyb: šipky, /text hledání, q = ukončení.mcCtrl+O skryje/zobrazí. F10 zavře. Nutno instalovat.Klávesové zkratky shellu
TabCtrl+CCtrl+ZCtrl+Dlogout nebo exit)Ctrl+S / QAlt+F1–F6Ctrl+Alt+F7Práce se soubory
cpcp -r adresář rekurzivně. cp zdroj cílmvmv starý novýrmrm -r adresář. rm -i s potvrzením každého souboru.mkdirmkdir -p a/b/c vytvoří celou hierarchii najednou.touchlnln -s cíl odkaz symlink (zástupce). Pevný odkaz bez -s.findfind / -name "*.conf" · find . -mtime -7 (za 7 dní) · find . -type f -name "*.sh"statreadlinkreadlink -f vrátí absolutní cestu.basename / dirnamebasename /a/b/soubor.txt → soubor.txt · dirname /a/b/soubor.txt → /a/bZobrazení obsahu souborů a textové nástroje
catcat soubor1 soubor2 spojí více souborů. Pokud není zadán vstup, čte ze stdin.less/text hledání, q ukončení.head / tailhead -20 soubor prvních 20 řádků · tail -f log.txt sleduje soubor živě (pro logy!)grepgrep -i "chyba" log · grep -n s číslem řádku · grep -r rekurzivně · grep -E 'regex' rozšířené výrazywc-l řádky · -w slova · -c bajtysort-n číselně · -r sestupně · -k2 podle 2. sloupceuniq-c spočítá výskyty.diffseqseq 1 10 · seq 0 2 20 (krok 2)awkawk '{print $1}' soubor (vypíše první sloupec). Podporuje podmínky, cykly, regex.sedsed 's/starý/nový/g' soubor nahradí všechny výskyty. Velmi výkonný s regex.Systémové informace a síť
uname -adf -h-h čitelně, -m v MB, -l jen lokální diskydu -sh-s jen celkový součet, -b v bajtechfree -muptimehostname -Iip addr / ifconfigip addr show je moderní varianta.pingping -c 4 8.8.8.8ss / netstatss -tulnp zobrazí otevřené TCP/UDP porty s procesytypetype ls · type -a pwdAliasy – zkratky pro příkazy
Alias umožňuje zavést nový název pro existující příkaz. Slouží ke zkrácení delšího příkazu nebo k přidání výchozích přepínačů.
# Vytvoření aliasu:
$ alias ll='ls -la --color=auto'
$ alias c='clear'
$ alias grep='grep --color=auto'
# Zobrazení všech aliasů:
$ alias
# Odstranění aliasu:
$ unalias c
# Trvalé aliasy – uložit do ~/.bashrc
2.2 Přístupová práva a správa uživatelů
Typy souborů v Linuxu
Linux rozlišuje tři základní typy souborů, přičemž každý je reprezentován jiným prvním znakem ve výpisu ls -l:
-dlcbI-uzel (inode)
Každý soubor a adresář má v souborovém systému přiřazen i-uzel (inode) – datovou strukturu uchovávající metadata. Inode obsahuje: jedinečné číslo i-uzlu, vlastníka, skupinu, množinu přístupových práv, čas posledního přístupu, čas poslední modifikace, čas poslední změny i-uzlu, počet odkazů (linků) na soubor, velikost souboru v bajtech. Inode neobsahuje název souboru – ten je uložen v adresáři jako dvojice (název, číslo inode).
Přístupová práva (permissions)
Každý soubor má sadu přístupových práv pro tři kategorie uživatelů a tři typy operací:
$ ls -l soubor.txt
-rw-r--r-- 1 ales users 1024 apr 12 soubor.txt
^^^^^^^^^^ ^^^^ ^^^^^
práva vlastník skupina
Typ Vlastník Skupina Ostatní
- r w - r - - r - -
čtení zápis (bez spouštění)
Práva číselně (octal):
r = 4, w = 2, x = 1
chmod 755 = rwxr-xr-x (7=rwx, 5=r-x, 5=r-x)
chmod 644 = rw-r--r-- (6=rw-, 4=r--, 4=r--)
chmod 700 = rwx------ (jen vlastník vše)
chmod 755 souborchmod +x skript.shchmod u+w,g-w souborchown ales:users souborchown -R ales /home/alesSpráva uživatelů
Informace o uživatelích jsou uloženy ve třech textových souborech:
/etc/passwdjmeno:heslo:UID:GID:popis:/domaci/adresar:/shell/etc/shadowsudo). Odděleno z bezpečnostních důvodů od passwd./etc/groupnazev_skupiny:heslo:GID:clenoveUID (User ID) – číslo uživatele. 0 = root (kontroly oprávnění se nekontrolují). Čísla 1–99 = systémové účty. 100–499 = rezervovaní démoni. 500+ = běžní uživatelé. GID (Group ID) – uživatel musí být vždy členem alespoň jedné skupiny.
# Vytvoření uživatele (komplexní, nastaví heslo, vytvoří /home):
$ adduser vedouci
$ adduser vedouci sudo # přiřadí do skupiny sudo
# Vytvoření uživatele (základní, bez hesla):
$ useradd -m -s /bin/bash vedouci # -m vytvoří /home, -s nastaví shell
$ passwd vedouci # nastaví heslo
# Odstranění uživatele:
$ userdel -r vedouci # -r odstraní i /home adresář
# Přidání do skupiny:
$ usermod -aG sudo ales
$ usermod -aG docker ales
# Přepnutí uživatele:
$ su - ales # přepne jako ales (načte jeho prostředí)
$ sudo příkaz # spustí příkaz jako root
# Zobrazení skupin uživatele:
$ groups ales
$ id ales
2.3 Roury a přesměrování
Každý proces v Unixu má tři otevřené datové kanály: stdin (fd 0 – klávesnice), stdout (fd 1 – terminál), stderr (fd 2 – chybový výstup na terminál). Tyto kanály lze přesměrovat.
Roury (Pipes)
Roura | propojuje stdout jednoho programu se stdin dalšího. Programy komunikují bez toho, aby o sobě věděly – to je síla unixové filozofie.
$ ls -la | grep "txt" # hledá "txt" ve výpisu
$ ps aux | grep "firefox" # najde firefox mezi procesy
$ cat log.txt | grep "ERROR" | tail -20
$ cat soubor.txt | sort | uniq -c | sort -rn | head -10
# přečti → seřaď → počítej duplicity → seřaď sestupně → prvních 10
$ ls /etc | wc -l # počet souborů v /etc
Přesměrování
$ ls -la > vypis.txt # stdout do souboru (přepíše)
$ echo "text" >> log.txt # stdout přidat na konec (append)
$ sort < neserazeno.txt # stdin ze souboru
$ příkaz 2> chyby.txt # stderr do souboru
$ příkaz > vše.txt 2>&1 # stdout i stderr do souboru
$ příkaz > /dev/null 2>&1 # zahodit veškerý výstup
$ make | tee build.log # vidět na terminálu I uložit do souboru
Wildcards (globbing)
Při práci se soubory lze použít zástupné znaky (globy), které bash expanduje na seznam odpovídajících názvů souborů:
*ls *.txt · rm backup_*?ls soubor?.txt → soubor1.txt, soubor2.txt…[...]ls soubor[123].txt nebo ls [a-z]*.sh"$SOUBOR". Bez uvozovek by mezery v názvech souborů způsobily problémy.
2.4 Tvorba skriptů (Shell scripting)
Shell skript je textový spustitelný soubor s příponou .sh (nebo bez přípony). Pro spuštění potřebuje interpret. První řádek musí obsahovat shebang identifikující shell:
#!/bin/bash # Bourne Again Shell (nejběžnější)
#!/usr/bin/bash # alternativní cesta
#!/bin/sh # POSIX shell (přenosnější)
# Spuštění skriptu:
$ bash skript.sh # interpret explicitně
$ chmod +x skript.sh # nastavení práva spouštění
$ ./skript.sh # spuštění přímo
# Debug a kontrola:
$ bash -n skript.sh # kontrola syntaxe (bez spuštění)
$ bash -x skript.sh # debug – vypíše každý příkaz
# Dostupné shelly:
$ cat /etc/shells
$ which bash
Proměnné a parametry skriptu
#!/bin/bash
JMENO="Ales" # přiřazení – BEZ MEZER kolem =
VEK=25
echo "Jmenuji se $JMENO a je mi $VEK let."
DATUM=$(date +"%Y-%m-%d") # command substitution
# Parametry skriptu (při volání: ./skript.sh arg1 arg2):
$0 # název skriptu
$1 # první parametr ($01 ve starší notaci)
$2 # druhý parametr
$@ # všechny parametry
$# # počet parametrů
$? # návratový kód posledního příkazu (0=úspěch)
$$ # PID aktuálního shellu
# Čtení ze vstupu:
read -p "Zadejte jméno: " JMENO
echo "Ahoj, $JMENO!"
# Návratový kód:
exit 0 # úspěch
exit 1 # chyba
exit $prom # hodnota z proměnné
Podmínky, cykly a funkce
#!/bin/bash
# ── PODMÍNKY ─────────────────────────────────
if [ -f "$1" ]; then
echo "Soubor existuje"
elif [ -d "$1" ]; then
echo "Je to adresář"
else
echo "Neexistuje"
fi
# Testovací operátory pro soubory:
# -f regulární soubor -d adresář -e existuje
# -r čitelný -w zapisovatelný -x spustitelný
# -z prázdný řetězec -n neprázdný řetězec
# == rovná se != nerovná se (řetězce)
# -eq -ne -lt -le -gt -ge (číselné porovnání)
# ── FOR CYKLUS ────────────────────────────────
for JMENO in Ales Jana Petr; do
echo "Ahoj, $JMENO!"
done
for i in $(seq 1 10); do
echo "Číslo: $i"
done
for SOUBOR in *.txt; do # globbing!
echo "Nalezen: $SOUBOR"
done
# ── WHILE CYKLUS ──────────────────────────────
POCITADLO=0
while [ "$POCITADLO" -lt 5 ]; do
echo "Hodnota: $POCITADLO"
POCITADLO=$((POCITADLO + 1))
done
# ── FUNKCE ────────────────────────────────────
pozdrav() {
local JMENO="$1" # local = lokální proměnná
echo "Dobrý den, $JMENO!"
return 0
}
pozdrav "Ales" # volání funkce
2.5 Systémové proměnné
Systémové (environmentální) proměnné jsou pojmenované hodnoty dostupné pro všechny procesy. Dědí se od rodiče k potomkovi. Příkaz env nebo printenv zobrazí všechny.
| Proměnná | Příklad | Popis |
|---|---|---|
PATH | /usr/bin:/bin:/usr/local/bin | Adresáře pro hledání programů (odděleny :). Nejdůležitější! |
HOME | /home/ales | Domovský adresář. Zkratka ~. |
USER | ales | Jméno přihlášeného uživatele |
SHELL | /bin/bash | Cesta k výchozímu shellu |
PWD | /home/ales | Aktuální adresář (aktualizuje ho cd) |
PS1 | \u@\h:\w\$ | Formát příkazové výzvy (prompt) |
LANG | cs_CZ.UTF-8 | Jazyk a kódování – ovlivňuje výstupy, formáty |
EDITOR | vim | Výchozí textový editor |
LOGNAME | ales | Přihlašovací jméno (nelze snadno změnit) |
$? | 0 | Návratový kód posledního příkazu (0=úspěch) |
$$ | 12345 | PID aktuálního shellu |
$ export MOJE="hodnota" # nastaví a exportuje (přenese do potomků)
$ export PATH="$PATH:/home/ales/bin" # rozšíří PATH
$ unset MOJE # zruší proměnnou
Pro trvalé nastavení proměnných slouží inicializační soubory: ~/.bashrc (každé nové okno terminálu), ~/.bash_profile (přihlašovací shell, SSH), /etc/environment (globálně pro všechny uživatele).
2.6 Správa procesů
Každý spuštěný program je proces s jedinečným PID. Procesy tvoří hierarchii – každý má rodiče (PPID). Proces s PID 1 (systemd nebo init) je předkem všech ostatních.
Typy procesů
? u TTY. Obvykle běží pod rootem.fork(). Rodič vytvoří potomka a může čekat na jeho dokončení (wait()).wait()). Zabírá místo v tabulce procesů, ale nespotřebovává CPU ani RAM.Stavy procesů (sloupec STAT v ps/top)
Proces běží nebo je připraven k běhu ve frontě
Interruptible sleep – čeká na událost, lze přerušit signálem
Čeká na hardware (I/O) – nelze přerušit ani signálem
Pozastavený (Ctrl+Z nebo signál SIGSTOP)
Mrtvý proces čekající na přečtení návratového kódu rodičem
Snížená priorita (pozitivní nice hodnota → méně CPU času)
Příkazy pro práci s procesy
psps -aux všechny uživatelské procesy · ps -ef detailní seznam · ps -G skupina · ps -U uzivatelps aux | grep jménopstreeapt install psmisc)tophtop = modernější variantakill PIDkill -9 PID = SIGKILL (okamžité zabití)killall jménokillall firefoxbg / fgbg = pustí pozastavený proces na pozadí · fg = vrátí na popředínohup příkaz &2.7 Vrstvy systému Unix
Linux/Unix systémy pohánějí naprostou většinu serverů na internetu. Dále si probereme klíčové síťové protokoly a jejich implementaci na linuxovém serveru.
3.1 Telnet nešifrovánoTCP port 23
Telnet (Teletype Network) je protokol pro nezabezpečenou (nešifrovanou) vzdálenou komunikaci s jiným počítačem prostřednictvím textového rozhraní. Vznikl v roce 1969. Dnes je nahrazen protokolem SSH – používá se výjimečně pro testování portů nebo přímou komunikaci s protokoly SMTP či HTTP.
Veškerá komunikace včetně hesel putuje sítí jako čistý text – kdokoliv může packet sniffingem zachytit přihlašovací údaje.
Instalace a použití (Debian/Ubuntu)
# Na serveru – instalace Telnet daemona:
$ sudo apt install telnetd
# Ověření aktivity služby:
$ systemctl status inetd
# Na klientu – instalace klienta:
$ sudo apt install telnet
# Připojení na server:
$ telnet 10.0.2.15
$ telnet 10.0.2.15 23 # explicitně port 23
# Testování jiných portů (legitimní využití!):
$ telnet smtp.server.cz 25 # test SMTP serveru
$ telnet web.server.cz 80 # test HTTP serveru – potom zapsat: GET / HTTP/1.0
# Ukončení: Ctrl+] → příkaz quit
# Klienti: Total Commander, FileZilla, příkazový řádek
apt remove telnetd). Nikdy nepoužívejte Telnet pro vzdálený přístup k produkčním serverům – hesla jsou viditelná útočníkům v síti.
3.2 SSH – Secure Shell šifrovánoTCP port 22
SSH (Secure Shell) je protokol pro zabezpečenou (šifrovanou) komunikaci mezi počítači. Vyvinut v roce 1995 jako bezpečná náhrada Telnetu a rsh. Používá 128-bitové (a vyšší) šifrování. Dnes je standardem pro vzdálený přístup k serverům. Součástí SSH je i SFTP (SSH File Transfer Protocol) pro přenos souborů.
Asymetrická + symetrická kryptografie
✅ Plné šifrování, fingerprint, klíče
Instalace OpenSSH serveru
# Instalace OpenSSH serveru:
$ sudo apt install openssh-server
# Ověření pomocí procesů:
$ ps -aux | grep ssh
# Ověření stavu služby:
$ systemctl status ssh
# Start / stop / reload:
$ systemctl start ssh
$ systemctl reload sshd # nebo: service sshd reload
Fingerprint – ověření identity serveru
Při prvním připojení na server se zobrazí fingerprint (otisk prstu) veřejného klíče serveru (RSA). Pokud mu věříte, potvrdíte yes – klíč se uloží do ~/.ssh/known_hosts. Při dalším připojení se ověřuje, zda se klíč nezměnil. Pokud ano, SSH vydá varování (možný útok man-in-the-middle).
Konfigurace SSH serveru (sshd_config)
Konfigurační soubory SSH jsou v adresáři /etc/ssh/. Hlavní konfigurační soubor serveru je sshd_config.
# /etc/ssh/sshd_config – důležitá nastavení:
Port 22 # změňte na nestandardní pro bezpečnost
PermitRootLogin no # zakáže přihlášení jako root (doporučeno!)
# PermitRootLogin prohibit-password – root jen přes klíč, ne heslo
PasswordAuthentication no # zakáže hesla, nutné mít klíče
PubkeyAuthentication yes # povolí klíčové ověřování
AllowUsers ales jana spiderman # povolí přístup jen těmto uživatelům
MaxAuthTries 3 # max 3 pokusy o přihlášení
Banner /etc/ssh/ssh_banner.txt # uvítací banner zobrazený před přihlášením
# Po každé změně – reload:
$ systemctl reload sshd
# Vytvoření banneru:
$ echo "Welcome to SSH service on 10.0.2.15" > /etc/ssh/ssh_banner.txt
SSH klíče a vzdálené přihlášení
# Generování páru klíčů:
$ ssh-keygen -t ed25519 -C "ales@mujpocitac"
# Vytvoří: ~/.ssh/id_ed25519 (privátní) a ~/.ssh/id_ed25519.pub (veřejný)
# Kopírování klíče na server:
$ ssh-copy-id ales@10.0.2.15
# Přidá veřejný klíč do ~/.ssh/authorized_keys na serveru
# Připojení (bez hesla po nastavení klíčů):
$ ssh ales@10.0.2.15
$ ssh -p 2222 ales@server.cz # nestandardní port
# Spuštění příkazu bez interaktivního shellu:
$ ssh ales@server.cz 'df -h'
# Přenos souborů – SCP:
$ scp soubor.txt ales@10.0.2.15:/home/ales/
$ scp -r adresář/ ales@server.cz:/backup/
# Interaktivní přenos – SFTP:
$ sftp ales@server.cz
# Ukončení SSH spojení:
$ logout
Klienti SSH pro Windows: Total Commander, FileZilla, WinSCP, nebo vestavěný Windows Terminal.
3.3 FTP – File Transfer Protocol nešifrovánoTCP port 20 / 21
FTP je protokol pro nezabezpečený (nešifrovaný) přenos souborů mezi počítači v síti. Využívá dva TCP porty: port 21 pro příkazy a řízení, port 20 pro přenos dat (8-bitový binární nebo ASCII s konverzí konců řádků). Pracuje v aktivním nebo pasivním režimu.
Klienti FTP pro Windows: Total Commander, FileZilla, WinSCP, správce souborů Windows.
Aktivní vs. pasivní režim
VSFTPD – Very Secure FTP Daemon
VSFTPD je rychlý, stabilní a bezpečný FTP server, standardní součástí většiny linuxových distribucí. Mezi jeho funkce patří: podpora IPv6, pasivní i aktivní mód, šifrování přes SSL, podpora lokálních i anonymních uživatelů, virtuální uživatelé (PAM), limity datového toku, různá konfigurace per-IP nebo per-uživatel.
# Instalace vsftpd:
$ sudo apt install vsftpd
# Ověření procesů:
$ ps -aux | grep vsftpd
# Stav a restart:
$ systemctl status vsftpd
$ systemctl restart vsftpd # nebo: service vsftpd restart
# Konfigurační soubor: /etc/vsftpd.conf
# Manuál: man vsftpd.conf
Klíčová nastavení /etc/vsftpd.conf
# /etc/vsftpd.conf – přehled nejdůležitějších direktiv:
listen=YES # po spuštění naslouchat na IPv4
listen_ipv6=NO # naslouchat na IPv6 (alternativa k listen)
listen_address=10.0.2.15 # naslouchat na konkrétní IP
anonymous_enable=NO # zakázat anonymní přístup (doporučeno!)
local_enable=YES # povolení lokálních (systémových) uživatelů
write_enable=YES # povolení změn (nahrávání, mazání)
xferlog_enable=YES # logování přenosů
xferlog_file=/var/log/vsftpd.log # cesta k log souboru
ascii_upload_enable=YES # ASCII mód pro nahrávání (konverze konců řádků)
ascii_download_enable=YES # ASCII mód pro stahování
ftpd_banner=Welcome to FTP Service # uvítací banner
# Uzamčení uživatelů v jejich domovském adresáři (chroot):
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/chroot_list # seznam výjimek
allow_writeable_chroot=YES
# Nastavení přístupu pomocí user_listu:
userlist_enable=YES
userlist_file=/etc/user_list # soubor s povoleným uživateli
userlist_deny=NO # seznam je POVOLENÍ (ne zakázání)
# Šifrování (FTPS – FTP přes SSL/TLS):
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
| Protokol | Port | Šifrování | Poznámka |
|---|---|---|---|
FTP | 21 | ❌ Žádné | Nezabezpečený, nepoužívat pro citlivá data |
FTPS | 21/990 | ✅ TLS/SSL | FTP + TLS vrstva (Explicit nebo Implicit) |
SFTP | 22 | ✅ SSH | Není FTP! Subsystém SSH. Doporučeno. |
SCP | 22 | ✅ SSH | Jednorázový přenos přes SSH |
3.4 DNS – Domain Name System UDP/TCP port 53
DNS je protokol pro překlad číselné IP adresy na doménové jméno a naopak. IP adresy: IPv4 (32-bitové, čísla oddělená tečkou, např. 10.0.2.15) a IPv6 (128-bitové, hexadecimální čísla oddělená dvojtečkou). DNS je distribuovaná hierarchická databáze – telefonní seznam internetu.
Hierarchie domén
Typy DNS záznamů
| Typ | Popis | Příklad |
|---|---|---|
TTL | Time To Live – životnost záznamu v sekundách | 86400 (24 h) |
SOA | Start of Authority – začátek zóny, info o primárním NS a administrátorovi | obsahuje serial, refresh, retry… |
NS | Name Server – server autoritativní pro danou zónu | debian.cz → ns.debian.cz |
A | Address Record – mapuje doménu na IPv4 | www.debian.cz → 10.0.2.15 |
AAAA | Mapuje doménu na IPv6 | www → 2001:db8::1 |
PTR | Pointer Record – reverzní překlad (IP → doménu), v reverse zónách | 10.0.2.15 → www.debian.cz |
MX | Mail Exchange – poštovní server pro příjem e-mailů | debian.cz → mail.debian.cz (10) |
CNAME | Canonical Name – alias, přesměrování domény na jinou (pro subdomény) | www.firma.cz → firma.cz |
TXT | Textový záznam – SPF, DKIM, ověření domény | "v=spf1 include:…" |
@ | Relativní cesta – zastupuje aktuální zónu (kořen zóny) | @ IN A 10.0.2.15 |
IN | Internet – třída DNS záznamu (internetový záznam) | vždy IN pro internet |
Průběh DNS dotazu
BIND9 – instalace a konfigurace DNS serveru
BIND (Berkeley Internet Name Domain) je nejrozšířenější DNS server na světě.
# Instalace BIND9:
$ sudo apt install -y bind9 bind9utils bind9-doc dnsutils
# Ověření stavu a povolení:
$ systemctl status bind9
$ systemctl enable bind9
# Nastavení hostname serveru:
$ echo 'debian.cz' > /etc/hostname
# Přidání do /etc/hosts:
10.0.2.15 debian.cz
# Konfigurační soubory v /etc/bind/:
# named.conf – hlavní konfigurační soubor
# named.conf.local – lokální nastavení (zóny)
# Restart a kontrola chyb:
$ systemctl restart bind9
$ named-checkzone debian.cz /etc/bind/debian.cz
$ named-checkzone 10.0.2.15 /etc/bind/reverse.2.0.10
Definice zón v named.conf.local
# /etc/bind/named.conf.local
zone "debian.cz" {
type master;
file "/etc/bind/debian.cz"; # forward zóna
};
zone "2.0.10.in-addr.arpa" {
type master;
file "/etc/bind/reverse.2.0.10"; # reverse zóna
};
Soubor forward zóny (IP → doménové jméno)
# /etc/bind/debian.cz
$TTL 86400
@ IN SOA debian.cz. admin.debian.cz. (
2024041201 ; Serial (datum+číslo, inkrementovat při změně!)
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Negative Cache TTL
; Name server:
@ IN NS ns.debian.cz.
; Mail server:
@ IN MX 10 mail.debian.cz.
; A záznamy (doména → IP):
ns IN A 10.0.2.15
www IN A 10.0.2.15
mail IN A 10.0.2.15
; CNAME alias:
ftp IN CNAME www.debian.cz.
Soubor reverse zóny (IP → doménové jméno)
# /etc/bind/reverse.2.0.10
$TTL 86400
@ IN SOA debian.cz. admin.debian.cz. (
2024041201 3600 1800 604800 86400 )
@ IN NS ns.debian.cz.
; PTR záznamy – pouze koncová část IP adresy:
15 IN PTR debian.cz. ; 10.0.2.15 → debian.cz
16 IN PTR klient.cz. ; 10.0.2.16 → klient.cz
Diagnostické nástroje DNS
$ nslookup google.com # základní dotaz
$ nslookup -type=MX gmail.com # MX záznamy
$ dig google.com A # podrobný výpis A záznamu
$ dig +short google.com # jen výsledek
$ dig @8.8.8.8 google.com # dotaz na konkrétní server (Google DNS)
$ dig -x 10.0.2.15 # reverzní lookup
$ cat /etc/resolv.conf # nastavené DNS servery
$ cat /etc/hosts # lokální záznamy (priorita před DNS!)
3.5 DHCP – Dynamic Host Configuration Protocol UDP port 67/68
DHCP automaticky přiděluje síťovou konfiguraci zařízením v lokální síti. Klient komunikuje na UDP portu 68, server naslouchá na UDP portu 67. Server u každého klienta eviduje přidělenou IP adresu a dobu přidělení (lease time).
DORA – průběh přidělení IP adresy
Po vypršení lease time se klient pokusí o obnovu (renewal). Pokud zařízení zmizí ze sítě, adresa se po vypršení vrátí do poolu. Možná je také statická rezervace – server vždy přidělí stejnou IP konkrétní MAC adrese.
ISC DHCP Server – instalace a konfigurace
# Instalace ISC DHCP serveru:
$ sudo apt install isc-dhcp-server
# Nastavení síťového rozhraní v /etc/default/isc-dhcp-server:
INTERFACESv4="enp0s3" # rozhraní, na kterém bude server naslouchat
# Konfigurace v /etc/dhcp/dhcpd.conf:
option domain-name "debian.cz"; # doména pro DHCP klienty
option domain-name-servers 10.0.2.15; # DNS server
default-lease-time 600; # výchozí čas pronájmu (s)
max-lease-time 7200; # maximální čas pronájmu (s)
subnet 10.0.2.0 netmask 255.255.255.0 {
range 10.0.2.20 10.0.2.50; # rozsah přidělovaných IP
option routers 10.0.2.1; # výchozí brána (gateway)
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.2.255;
}
# Restart a ověření stavu:
$ sudo systemctl restart isc-dhcp-server
$ sudo systemctl status isc-dhcp-server
# Sledování přidělování IP v reálném čase:
$ sudo journalctl -u isc-dhcp-server -f
# Záznamy o přidělených IP (leases):
$ cat /var/lib/dhcp/dhcpdclient.leases
# Ověření přidělení IP na klientu:
$ ip a
$ ping 10.0.2.15
Konfigurace klienta pro DHCP
# /etc/network/interfaces – nastavení dynamické IP na klientu:
auto enp0s3
iface enp0s3 inet dhcp
# Restart síťové služby:
$ sudo systemctl restart networking
# Manuální release / renew:
$ sudo ifdown enp0s3 # uvolní IP adresu
$ sudo ifup enp0s3 # získá novou IP adresu
Existuje několik způsobů, jak spustit Unix/Linux na Windows. Od lehkých emulátorů příkazového řádku přes plnou virtualizaci až po moderní integraci přímo do Windows 11.
4.1 Oracle VM VirtualBox
VirtualBox je víceplatformní virtualizační program zdarma od Oracle (stažení z oracle.com/virtualization/virtualbox). Umožňuje provozovat několik OS na počítačích se systémy Windows, Mac OS, Linux nebo Oracle Solaris.
Klíčové funkce VirtualBoxu
VBoxManage).Postup vytvoření virtuálního počítače
V Oracle VM VirtualBox Manager: Nový → Pojmenovat VM, vybrat typ (Linux) a verzi (Debian 64bit) → Nastavit RAM (doporučeno ≥ 2 GB) → Vytvořit virtuální disk (VDI soubor, dynamicky alokovaný, min. 20 GB) → V nastavení VM připojit ISO soubor instalačního disku → Spustit a projít instalací Debianu/Ubuntu.
Vypnutí DHCP VirtualBoxu
Při konfiguraci vlastního DHCP serveru ve VM je nutné vypnout vestavěný DHCP VirtualBoxu: Soubor → Předvolby → Síť → název sítě → v detailech pro NAT síť odškrtnout Podpora DHCP.
4.2 WSL 2 – Windows Subsystem for Linux
WSL 2 je nejmodernější způsob spuštění Linuxu na Windows 10/11. Spouští skutečné linuxové jádro v lehkém Hyper-V VM. Plná kompatibilita syscalls, Docker Desktop nativně, GUI aplikace přes WSLg.
# PowerShell jako Administrator:
wsl --install
wsl --list --online # dostupné distribuce
wsl --install -d Ubuntu-22.04
wsl # spuštění WSL
# Windows disk C: dostupný z WSL jako /mnt/c/
4.3 Cygwin
Cygwin (od 1995) je kompatibilní vrstva emulující POSIX API na Windows. Obsahuje bash, grep, sed, awk, ssh, rsync, git přeložené pro Windows jako nativní .exe soubory. Vhodný pro starší skripty vyžadující POSIX rozhraní bez celého Linuxu.
4.4 Plná virtualizace – VMware, Hyper-V
| Nástroj | Výhody | Nevýhody |
|---|---|---|
| VirtualBox | Zdarma, open source, snadné, snapshots | Pomalejší, sdílí zdroje |
| VMware Workstation | Výkonnější, lepší integrace | Placené (Workstation Pro) |
| Hyper-V | Vestavěno do Windows Pro, rychlé (Type 1) | Konflikty s VirtualBoxem |
4.5 Docker – kontejnerizace
Docker používá kontejnerizaci – sdílí jádro hosta, ale izoluje souborový systém, procesy a síť. Kontejnery jsou mnohem lehčí než VM (startují v sekundách). Ideální pro spouštění aplikací v přesně definovaném prostředí.
$ docker pull ubuntu:22.04
$ docker run -it ubuntu:22.04 bash # Ubuntu shell na Windows
$ docker run -d -p 8080:80 nginx # nginx server
| Situace | Doporučení |
|---|---|
| Studium Linuxu, serverové prostředí, testování | VirtualBox – kompletní izolace, snapshots |
| Každodenní vývoj, Docker, integrace s Windows | WSL 2 – nejlepší integrace |
| Jen git a základní bash příkazy | Git Bash – lehké |
| Přenositelné aplikace s linuxovými závislostmi | Docker – kontejnery |
Závěr
Unix/Linux je filozofie: každý nástroj dělá jednu věc dobře, vše je soubor, textový výstup jednoho programu je vstupem druhého, konfigurace je čitelný text. Tyto principy z 70. let pohánějí dnes internet, mobilní telefony (Android), cloud a datová centra.
Příkazový řádek + bash skripty = nejefektivnější automatizace. Síťové služby SSH, DNS a DHCP jsou základní infrastruktura každé sítě. Virtualizace (VirtualBox, WSL 2) umožňuje bezpečně experimentovat bez rizika.
Materiál zpracován dle školních prezentací OPS-linux a rozšířen o hluboký výklad principů.