Úvod do Linuxu

Terminál · souborový systém · práva

Co dnes zvládneme

  1. Orientace v Linuxu a terminálu
  2. Základní příkazy a navigace
  3. Práce se soubory a adresáři
  4. Vyhledávání, roury a přesměrování
  5. Uživatelé, skupiny a oprávnění

(Méně důležité věci na konci se jedou jen při dostatku času)

Co je Linux?

  • Linux je především jádro systému (kernel).
  • Jádro zprostředkovává komunikaci programů s hardwarem.
  • Spravuje procesy, paměť, disky a zařízení.

Kernel není celý systém

Operační systém, který běžně nazýváme „Linux“, skládá více částí dohromady.

  • Linux kernel
  • GNU nástroje a knihovny
  • init systém, správce balíčků, shell
  • volitelně grafické prostředí a aplikace

GNU

  • GNU's Not Unix — projekt svobodného unixového systému.
  • Dodává řadu každodenních nástrojů: ls, cp, grep, shell a další.
  • Proto se někdy mluví o systému GNU/Linux.

Kde Linux potkáš?

  • Webové a cloudové servery
  • Android telefony, routery, televizory a IoT
  • Superpočítače, vývojářské stroje a embedded zařízení
  • Desktop: například Ubuntu, Fedora nebo Linux Mint

Proč Linux?

  • Je open source: zdrojový kód je možné číst a upravovat.
  • Je přizpůsobitelný, stabilní a běží i na slabším hardware.
  • Dává uživateli velkou kontrolu — a tím i odpovědnost.

Distribuce

Distribuce je hotový operační systém postavený nad Linux kernelem.

Debian rodina

Debian · Ubuntu · Linux Mint

Správce balíčků: apt

Další příklady

Fedora · Arch · openSUSE

dnf · pacman · zypper

Filozofie Unixu

„Dělej jednu věc a dělej ji dobře.“
  • Malé nástroje se skládají dohromady pomocí rour.
  • Textový vstup a výstup je univerzální rozhraní.
  • „Všechno je soubor“ je užitečné zjednodušení pro práci se systémem.

Terminál, shell a příkaz

  • Terminál je okno/aplikace pro textovou práci.
  • Shell čte příkazy, vyhodnocuje je a spouští programy.
  • Běžný shell je bash; existují i zsh, fish a další.

Prompt

student@pc:~/projekty$
  • student — aktuální uživatel
  • pc — jméno počítače
  • ~/projekty — aktuální adresář
  • $ — běžný uživatel; root mívá #

Anatomie příkazu

ls -la /var/log
  • ls je příkaz
  • -la jsou volby (options)
  • /var/log je argument — zde cílová cesta

Nápověda

man ls
ls --help
help cd
  • man otevře manuál externího příkazu; ukončíš ho klávesou q.
  • --help je rychlá nápověda.
  • help funguje pro vestavěné příkazy shellu, třeba cd.

Historie a doplňování

  • / prochází předchozí příkazy.
  • Tab doplňuje názvy souborů a příkazů.
  • Ctrl+C přeruší běžící program.
  • Ctrl+L vyčistí obrazovku.
  • history vypíše historii; Ctrl+R v ní hledá.

Bezpečné návyky

  • Než něco smažeš, ověř cestu pomocí pwd a ls.
  • Cesty s mezerou uzavírej do uvozovek: cd "Moje dokumenty".
  • Příkaz nepouštěj jen proto, že ho někdo poslal do chatu.
  • U sudo čti celý příkaz před potvrzením hesla.

Základní informace o systému

Kdo jsem?

whoami
id
  • whoami vypíše aktuální uživatelské jméno.
  • id přidá UID, primární skupinu a další skupiny.

Stroj a systém

hostname
uname -a
cat /etc/os-release
  • hostname — název počítače.
  • uname -a — informace o jádře a architektuře.
  • /etc/os-release — informace o distribuci.

Čas a kalendář

date
cal

date ukazuje aktuální datum a čas. cal zobrazí kalendář (pokud je nainstalovaný).

Echo a proměnné

echo "Ahoj světe"
echo $HOME
echo $SHELL
  • echo vypisuje text.
  • $HOME je domovský adresář aktuálního uživatele.
  • $SHELL ukazuje výchozí shell.

Souborový systém

Strom adresářů

/
├── home/     domovské adresáře uživatelů
├── etc/      konfigurace systému a služeb
├── usr/      programy, knihovny a sdílená data
├── var/      proměnlivá data, například logy
├── tmp/      dočasné soubory
├── dev/      zařízení jako soubory
└── proc/     informace o procesech a jádře

Důležité cesty

  • / — kořen souborového systému, root.
  • /home/alice — domovský adresář běžného uživatele.
  • /root — domovský adresář administrátora root.
  • /var/log — systémové a aplikační logy.
  • /tmp — dočasná data; nespoléhej, že přežijí restart.

Absolutní a relativní cesty

Absolutní

Začíná lomítkem a vždy vede od kořene.

/home/student/poznamky.txt

Relativní

Vychází z aktuálního adresáře.

poznamky.txt
../spolecne

Speciální zápisy cest

.       # aktuální adresář
..      # nadřazený adresář
~       # domovský adresář
-       # předchozí adresář

Například cd ~ tě vrátí domů a cd - přepne zpět na předchozí cestu.

pwd — kde právě jsem?

pwd
# /home/student/projekty

pwd znamená print working directory a vypíše absolutní cestu aktuálního adresáře.

cd — změna adresáře

cd /var/log
cd dokumenty
cd ..
cd ~
  • Bez argumentu cd vede do domovského adresáře.
  • Jména rozlišují velká a malá písmena: Dokumentydokumenty.

ls — výpis obsahu

ls
ls -l
ls -a
ls -lah
  • -l podrobný výpis
  • -a včetně skrytých položek
  • -h čitelné velikosti

Jak číst ls -l

-rw-r--r--  1 student studenti  1240  9. srp  poznamky.txt
  1. typ a oprávnění
  2. počet odkazů
  3. vlastník a skupina
  4. velikost, datum, název

Skryté soubory

Název začínající tečkou je běžně skrytý.

ls -a
.bashrc  .config  .ssh

Nejde o bezpečnostní mechanismus — pouze se ve výchozím výpisu nezobrazuje.

Vytváření a čtení souborů

mkdir — nový adresář

mkdir projekt
mkdir -p projekt/src/js

-p vytvoří i chybějící nadřazené adresáře a nevadí mu, když už existují.

touch — prázdný soubor

touch poznamky.txt
touch index.html style.css

Pokud soubor existuje, touch aktualizuje jeho časové razítko.

cat, less a head

cat poznamky.txt
less /var/log/syslog
head -n 20 soubor.txt
tail -n 20 soubor.txt
  • cat se hodí na krátké soubory.
  • less umožní stránkování a hledání; ukončíš q.
  • head/tail ukáží začátek/konec.

tail -f — sledování logu

tail -f /var/log/auth.log

Průběžně vypisuje nové řádky. Ukonči pomocí Ctrl+C.

nano — jednoduchý editor

nano poznamky.txt
  • Nápověda je dole v okně; znak ^ znamená Ctrl.
  • Ctrl+O uloží, Ctrl+X ukončí.
  • Pro první práci na serveru je nano nejpřívětivější.

cp — kopírování

cp poznamky.txt zaloga.txt
cp -r projekt projekt-zaloha

-r kopíruje adresář rekurzivně včetně jeho obsahu.

mv — přesun a přejmenování

mv stary.txt novy.txt
mv poznamky.txt dokumenty/

Stejný příkaz soubor přejmenuje, nebo ho přesune — záleží na cíli.

rm a rmdir

rmdir prazdna-slozka
rm soubor.txt
rm -r adresar
Pozor: rm běžně nemaže do koše. Příkaz rm -rf používej jen tehdy, když přesně víš, co a kde mažeš.

Bezpečnější mazání

rm -i soubor.txt
rm -Iv adresar/
  • -i se ptá před odstraněním.
  • -I se zeptá jednou před hromadným/rekurzivním mazáním.
  • -v vypisuje, co se děje.

Globy: více souborů najednou

ls *.txt
cp obrazek?.png galerie/
rm -- *.tmp
  • * znamená libovolný počet znaků.
  • ? znamená právě jeden znak.
  • -- ukončí volby — hodí se pro názvy začínající pomlčkou.

file — skutečný typ souboru

file dokument.docx
# Microsoft Word 2007+

Linux nebere příponu jako autoritu; nástroj file zkoumá obsah a hlavičku souboru.

tree a velikost

tree
du -sh projekt/
df -h
  • tree vypíše strom adresářů (nemusí být nainstalovaný).
  • du -sh velikost konkrétní cesty.
  • df -h volné místo na připojených filesystémech.

Přestávka (10 min)

Vyhledávání a zpracování textu

find — hledání podle vlastností

find . -name "*.txt"
find ~/Dokumenty -type f
find . -type d -name "node_modules"

find prochází strom adresářů. Tečka znamená „začni zde“.

grep — hledání v obsahu

grep "chyba" aplikace.log
grep -i "linux" poznamky.txt
grep -rn "TODO" projekt/
  • -i ignoruje velikost písmen.
  • -r hledá rekurzivně.
  • -n přidá čísla řádků.

Roura |

ls -la | less
ps aux | grep nginx
cat pristupy.log | grep "404"

Operátor | pošle standardní výstup prvního programu na standardní vstup dalšího.

Přesměrování výstupu

echo "Ahoj" > pozdrav.txt
echo "Druhý řádek" >> pozdrav.txt
ls -la > vypis.txt
  • > soubor vytvoří nebo přepíše.
  • >> výstup přidá na konec souboru.
  • Před použitím > se vždy zastav: přepis je tichý.

Chyby: stderr

prikaz > vystup.txt 2> chyby.txt
prikaz > vse.txt 2>&1
prikaz 2>/dev/null
  • 1 je standardní výstup, 2 standardní chybový výstup.
  • 2>&1 spojí chyby s běžným výstupem.
  • /dev/null data zahodí.

Praktický řetězec

find . -type f -name "*.log" | sort > seznam-logu.txt
grep -ri "error" /var/log 2>/dev/null | less

Malé nástroje lze poskládat do užitečného pracovního postupu.

Uživatelé, skupiny a práva

Vlastník, skupina, ostatní

-rwxr-x--- 1 alice vyvojari  523 start.sh
  • alice je vlastník souboru.
  • vyvojari je skupina.
  • Práva se vyhodnocují pro vlastníka, pak skupinu, jinak pro ostatní.

r, w, x

Soubor

  • r čtení obsahu
  • w změna obsahu
  • x spuštění jako programu

Adresář

  • r výpis jmen
  • w vytváření/mazání položek
  • x průchod do adresáře

Rozebrání oprávnění

- rwx r-x r--
  │   │   └─ ostatní: čtení
  │   └───── skupina: čtení, spuštění
  └───────── vlastník: čtení, zápis, spuštění

První znak určuje typ: - soubor, d adresář, l symbolický odkaz.

Číselný zápis práv

r = 4   w = 2   x = 1

7 = rwx   6 = rw-   5 = r-x   4 = r--
chmod 754 skript.sh

Trojice 754 znamená vlastník rwx, skupina r-x, ostatní r--.

chmod — změna práv

chmod 644 poznamky.txt
chmod 755 skript.sh
chmod u+x skript.sh
chmod g-w soukromy.txt
  • Číselný zápis nastaví všechna tři pole najednou.
  • Symbolický zápis: u user, g group, o others, a all.

Běžná nastavení

PrávaTypické použití
644běžný textový soubor
600soukromý soubor, například SSH klíč
755spustitelný skript nebo veřejný adresář
700soukromý adresář / skript

chown a chgrp

sudo chown alice soubor.txt
sudo chown alice:vyvojari soubor.txt
sudo chgrp vyvojari projekt/

Vlastníka a skupinu mění obvykle jen root nebo vlastník podle pravidel systému.

sudo

sudo apt update
sudo systemctl restart nginx
  • sudo spustí konkrétní příkaz s administrátorskými právy.
  • Není to „opravovač chyb“ — nepoužívej ho bez pochopení příkazu.
  • Pro každodenní práci zůstávej běžným uživatelem.

Umask

umask
umask 022

umask odebírá výchozí práva nově vytvářeným souborům a adresářům. Častá hodnota 022 vede typicky k souborům 644 a adresářům 755.

Práva nejsou vše

  • Přístup mohou řídit i ACL, SELinux/AppArmor nebo oprávnění síťového úložiště.
  • Na smazání souboru jsou důležitá práva adresáře, ve kterém leží.
  • S sudo obcházíš běžná omezení — proto je rizikové.

Přestávka (10 min)

Konec základní části — méně důležité věci se jedou jen při dostatku času

Shell ve větší hloubce

Méně důležité (jen při dostatku času)

Uvozovky a mezery

touch "moje poznamky.txt"
cat 'moje poznamky.txt'
echo "Jsem v $HOME"
echo 'Jsem v $HOME'
  • Jednoduché uvozovky zachovají text doslova.
  • Dvojité uvozovky rozbalí proměnné jako $HOME.
  • Bez uvozovek shell rozdělí mezeru na více argumentů.

Escapování

echo "Cena je \$10"
echo 'Cena je $10'
touch soubor\ s\ mezerami.txt

Zpětné lomítko \ říká shellu, že následující znak nemá mít svůj speciální význam.

Návratový kód

grep "Linux" poznamky.txt
echo $?
  • 0 znamená úspěch.
  • Nenulová hodnota znamená chybu nebo jiný stav.
  • Příkazy a skripty tak mohou rozhodovat, co udělat dál.

Logické operátory

mkdir projekt && cd projekt
test -f poznamky.txt && cat poznamky.txt
ping -c 1 example.com || echo "Nedostupné"
  • && spustí další příkaz jen po úspěchu.
  • || spustí další příkaz při neúspěchu.

Proměnné shellu

jmeno="Ada"
echo "Ahoj, $jmeno"
export EDITOR=nano
printenv | less
  • Při přiřazení nesmí být mezery kolem =.
  • export předá proměnnou i programům spouštěným ze shellu.

Aliasy

alias ll='ls -lah'
alias ..='cd ..'
alias

Alias je zkratka v aktuálním shellu. Trvalé aliasy se obvykle zapisují do ~/.bashrc nebo konfigurace používaného shellu.

Pozadí a procesy

sleep 60 &
jobs
fg
ps aux | less
  • & pustí úlohu na pozadí.
  • jobs ukazuje úlohy aktuálního shellu.
  • fg vrátí úlohu do popředí.

Filesystem do hloubky

Symbolické odkazy

ln -s /var/log moje-logy
ls -l moje-logy
cat moje-logy/syslog

Symbolický odkaz je speciální soubor ukazující na jinou cestu. Poznáš ho podle l na začátku výpisu ls -l.

Pevné odkazy

ln puvodni.txt druhe-jmeno.txt
ls -li puvodni.txt druhe-jmeno.txt

Pevný odkaz je další jméno pro stejná data na disku. Nejde vytvořit přes filesystémy ani na adresáře.

Připojené filesystémy

mount | less
findmnt
lsblk
df -hT
  • Disk nebo oddíl se zpřístupní připojením do určitého adresáře.
  • lsblk ukáže bloková zařízení.
  • findmnt zobrazí strom připojení.

Zařízení v /dev

ls -l /dev/null /dev/zero /dev/random
  • /dev/null zahazuje data.
  • /dev/zero poskytuje nulové bajty.
  • /dev/random poskytuje náhodná data.

Virtuální /proc a /sys

cat /proc/cpuinfo | less
cat /proc/meminfo | head
ls /sys

Jádro přes tyto adresáře zpřístupňuje informace o procesech, paměti, zařízeních a systému.

Archivace pomocí tar

tar -czf zaloha.tar.gz projekt/
tar -tzf zaloha.tar.gz
tar -xzf zaloha.tar.gz
  • -c vytvoří archiv, -x rozbalí, -t vypíše obsah.
  • -z použije gzip, -f určuje název souboru.

Výběr správného nástroje

PotřebaNástroj
Najít podle názvufind
Najít v obsahugrep
Velikost adresáředu -sh
Volné místodf -h
Typ souborufile

Textové nástroje

sort, uniq a wc

sort jmena.txt
sort jmena.txt | uniq
sort jmena.txt | uniq -c
wc -l jmena.txt
  • sort řadí řádky.
  • uniq odstraní sousední duplicity.
  • wc -l počítá řádky.

cut a tr

cut -d: -f1 /etc/passwd
echo "Linux" | tr '[:upper:]' '[:lower:]'
cut -c1-10 poznamky.txt

cut vybírá sloupce nebo znaky; tr nahrazuje či maže znaky.

sed — jednoduché úpravy

sed 's/staré/nové/g' text.txt
sed -n '1,10p' text.txt
sed -i.bak 's/http:/https:/g' konfigurace.txt
  • Bez -i se změněný text jen vypíše.
  • -i.bak upraví soubor a nejdříve vytvoří zálohu.

xargs

find . -name "*.tmp" -print0 | xargs -0 rm -i
find . -type f -print0 | xargs -0 file

xargs převádí řádky ze vstupu na argumenty příkazu. Kombinace -print0 a -0 bezpečně zvládne mezery v názvech.

Když je lepší použít méně

grep -r "TODO" projekt/
# místo: cat soubor | grep TODO

Mnoho programů už umí číst soubor přímo. Zbytečná roura s cat zhoršuje čitelnost.

Oprávnění do hloubky

Práva adresáře v praxi

PrávoNa adresáři znamená
rvypsat jména položek
wpřidávat, přejmenovat a mazat položky
xvstoupit do adresáře a přistupovat přes jméno

Proto se soubor obvykle nemaže podle svých práv, ale podle práv jeho nadřazeného adresáře.

Sticky bit

ls -ld /tmp
# drwxrwxrwt ... /tmp
sudo chmod +t sdilene/

Sticky bit na sdíleném adresáři dovolí uživatelům mazat jen jejich vlastní položky. Typický příklad je /tmp.

Setuid a setgid

ls -l /usr/bin/passwd
# -rwsr-xr-x ... /usr/bin/passwd
  • Setuid spouští program s právy vlastníka souboru.
  • Setgid na adresáři zajistí, že nové položky dědí jeho skupinu.
  • Tyto bity jsou pokročilé a nesmí se nastavovat bez důvodu.

ACL

getfacl sdilene/
setfacl -m u:alice:rw soubor.txt

Access Control Lists přidávají jemnější pravidla než vlastník/skupina/ostatní. Často se používají na sdílených úložištích.

Audit před změnou

ls -ld cesta
namei -l cesta/k/souboru
stat soubor.txt
  • ls -ld ukáže práva samotného adresáře.
  • namei -l ukáže práva každé části cesty.
  • stat vypíše podrobná metadata.

Praktické cvičení

1. Připrav pracovní prostor

mkdir -p ~/linux-cviceni/{data,zaloha}
cd ~/linux-cviceni
pwd
ls -la

Vytvoř adresář cvičení se dvěma podsložkami a ověř, kde jsi.

2. Vytvoř a naplň soubor

echo "Úvod do Linuxu" > data/poznamky.txt
echo "Druhý řádek" >> data/poznamky.txt
cat data/poznamky.txt

Všimni si rozdílu mezi > a >>.

3. Kopie, přesun, hledání

cp data/poznamky.txt zaloha/
mv data/poznamky.txt data/linux.txt
find . -name "*.txt"
grep -n "Linux" data/linux.txt

4. Oprávnění

ls -l data/linux.txt
chmod 600 data/linux.txt
ls -l data/linux.txt

Popiš, co znamená výsledek -rw-------.

Kontrolní otázky

  1. Jaký je rozdíl mezi terminálem a shellem?
  2. Jak se liší absolutní a relativní cesta?
  3. Co dělá > a co >>?
  4. Co znamená chmod 754?
  5. Proč je rm -rf nebezpečné?

Hotovo

Další krok: pravidelně zkoušet příkazy v bezpečném pracovním adresáři.