V terminálu se pár desítek příkazů opakuje pořád dokola — a tohle je ta hrstka, kterou fakt použiješ každý den. Orientace (kde jsem, co tu je), práce se soubory (kopíruj, přesuň, smaž) a prohlížení obsahu. Až je budeš mít v prstech, přestaneš o terminálu přemýšlet a začneš v něm žít. Jedno varování hned na začátek: Linux nemá koš. Když smažeš, je to pryč. Proto to tady bereme s respektem.
Pár pojmů na úvod
- Pracovní adresář (working directory) = složka, ve které zrovna „stojíš". Většina příkazů pracuje
relativně k němu — když napíšeš
ls, vypíše obsah tady, ne někde jinde. - Cesta (path) = adresa souboru. Absolutní začíná lomítkem od kořene (
/home/petr/soubor.txt), relativní vychází z místa, kde stojíš (soubor.txt,../nahoru). .a..= zkratky..je „tady" (aktuální složka),..je „o patro výš" (nadřazená složka).~(vlnovka, tilde) = tvůj domovský adresář, typicky/home/tvojejmeno.cd ~tě vždy vrátí domů.- Přepínač / flag = písmenko za pomlčkou, které mění chování příkazu (
ls -l,rm -r). Dají se spojovat:ls -la=ls -l -a. - Argument = to, na čem má příkaz pracovat (
cp zdroj cíl). Přepínače říkají jak, argumenty co.
Orientace — kde jsem a co tu je
Tři příkazy, které mačkáš nejčastěji ze všech. „Kde jsem?", „Co tu leží?", „Přesuň mě jinam."
pwd — print working directory, vypíše, kde právě stojíš:
$ pwd
/home/petr/dokumenty
ls — list, vypíše obsah aktuální složky:
$ ls
faktury poznamky.txt fotky todo.md
Samotný ls je ale strohý. Skutečná síla je v přepínačích:
-l— long, dlouhý výpis: práva, vlastník, velikost, datum úpravy — jeden soubor na řádek.-a— all, ukáže i skryté soubory (ty, co začínají tečkou, např..bashrc).-h— human-readable, velikosti čitelně (4.0K,2.3M,1.1G) místo holých bajtů.
Nejužitečnější je je zkombinovat:
$ ls -lah
celkem 24K
drwxr-xr-x 4 petr petr 4.0K 12. čec 09:14 .
drwxr-xr-x 8 petr petr 4.0K 10. čec 18:02 ..
-rw-r--r-- 1 petr petr 220 10. čec 18:02 .bashrc
drwxr-xr-x 2 petr petr 4.0K 12. čec 09:10 faktury
-rw-r--r-- 1 petr petr 1.2K 12. čec 09:14 poznamky.txt
První písmeno v levém sloupci prozradí typ: d = adresář (directory), - = obyčejný soubor. Řádky
. a .. jsou samotná složka a její rodič — proto se objeví, jen když přidáš -a.
cd — change directory, přesune tě jinam:
cd faktury # o složku níž (relativně)
cd /etc # kamkoli (absolutní cesta)
cd .. # o patro výš
cd ~ # domů (nebo jen samotné `cd`)
cd - # zpět do předchozí složky (jako „back" v prohlížeči)
💡 Ztratil ses?
pwdti vždy řekne, kde jsi, acd ~tě dostane domů. Tyhle dva se nedají „rozbít".
Práce se soubory a složkami
mkdir — make directory, vytvoří složku. Přepínač -p vytvoří i všechny chybějící mezisložky
naráz (a nezanadává, když už existuje):
mkdir projekt # jedna složka
mkdir -p projekt/kod/src/utils # celá cesta naráz, i kdyby nic z toho neexistovalo
Bez -p by mkdir projekt/kod/src selhal, pokud projekt/kod ještě neexistuje. Proto se -p používá
skoro pořád.
touch — vytvoří prázdný soubor (nebo aktualizuje čas úpravy u existujícího):
touch todo.md # prázdný soubor
touch a.txt b.txt # rovnou několik
cp — copy, kopíruje. Nejdřív zdroj, pak cíl. Na složky musíš přidat -r (recursive —
„vezmi to i s obsahem"):
cp poznamky.txt zaloha.txt # kopie souboru pod novým jménem
cp poznamky.txt ~/dokumenty/ # soubor do jiné složky (jméno zůstane)
cp -r projekt projekt-zaloha # celá složka i s obsahem
mv — move, přesun i přejmenování (v Linuxu je to jedna a ta samá operace — jen změníš, kde
soubor „bydlí" a jak se jmenuje). Žádné -r nepotřebuje ani na složky:
mv koncept.txt hotovo.txt # přejmenování (zůstává na místě)
mv hotovo.txt ~/dokumenty/ # přesun jinam (jméno zůstane)
mv fotky/ ~/obrazky/ # přesun celé složky
rm — remove, maže. Tady buď opatrný (celá sekce o tom je níž). Na složky opět -r:
rm starysoubor.txt # smaže soubor
rm -r stara-slozka # smaže složku i s obsahem
rm -i dulezite.txt # -i = zeptá se před smazáním (interactive)
rmdir — smaže složku, ale jen když je prázdná. Je to vlastně „bezpečná" varianta — když tam
něco zůstalo, rmdir odmítne a tím tě chrání:
rmdir prazdna-slozka # OK
rmdir slozka-s-obsahem # chyba: „Directory not empty" — nic nesmaže
💡 Malý mentální model:
cp= zůstane originál i kopie,mv= originál se přesune (nezdvojí se),rm= zmizí.-rznamená „ponoř se i do podsložek" a potřebuješ ho vždy, když pracuješ se složkou.
Prohlížení obsahu souborů
cat — concatenate, vysype celý obsah souboru do terminálu naráz. Skvělé na krátké soubory:
$ cat poznamky.txt
Nakoupit mléko
Zavolat instalatérovi
Deploy v pátek
Na velký soubor (log o tisících řádcích) je cat nepraktický — proletí ti obrazovkou a nic nepřečteš.
Od toho je less.
less — otevře soubor v stránkovači: můžeš rolovat nahoru/dolů a soubor se ti nevyleje do
terminálu. Ovládání:
- šipky /
PageUp/PageDown— posun /hledanytext+ Enter — hledání (další výskytn, předchozíN)gskok na začátek,Gna konecq— konec (vrátí tě zpět do terminálu)
less /etc/services # pohodlně prolistuješ i obří soubor (existuje všude)
🚩 Nováčci se v
less„zaseknou" a nevědí ven — pamatuj jediné písmeno:qjako quit.
head a tail — ukážou jen začátek, resp. konec souboru (výchozí 10 řádků). -n mění počet:
head poznamky.txt # prvních 10 řádků
head -n 3 poznamky.txt # první 3 řádky
tail -n 20 chyby.log # posledních 20 řádků
Nejmocnější trik má tail: přepínač -f (follow) — nechá soubor otevřený a živě dopisuje
nové řádky, jak přibývají. Nepostradatelné na sledování logů běžící aplikace:
tail -f /var/log/aplikace.log # necháš běžet a koukáš, co appka „říká" v reálném čase
tail -f se ukončí Ctrl+C.
Hledání souborů a wildcardy
Než sáhneš po find, znej wildcardy (žolíky) — to je zástupné znakování, které rozbaluje sám shell
ještě před spuštěním příkazu. Fungují napříč všemi příkazy (ls, cp, rm…):
*— libovolný počet znaků (i nula).*.txt= všechny soubory končící.txt.?— právě jeden libovolný znak.soubor?.txtsedí nasoubor1.txt,souborA.txt, ne nasoubor12.txt.[ ]— jeden znak z množiny.foto[123].jpg=foto1.jpg,foto2.jpg,foto3.jpg.
ls *.log # všechny logy ve složce
cp foto?.jpg zaloha/ # foto1.jpg, foto2.jpg… naráz do zálohy
rm *.tmp # smaže všechny .tmp soubory (opatrně!)
💡 Důležité pochopení: rozbalení dělá shell, ne příkaz. Když napíšeš
ls *.txt, shell to nejdřív nahradí seznamem skutečných souborů alsuž dostane hotový seznam. Proto*funguje všude stejně.
find — hledá soubory podle jména, typu, velikosti, stáří… i v podsložkách. Základní forma je
„kde hledat" + „podle čeho":
find . -name "*.log" # všechny .log soubory od aktuální složky (.) dolů
find /etc -name "*.conf" # konfiguráky pod /etc
find . -type d -name "cache" # jen složky (-type d) jménem cache
find . -name "*.tmp" -delete # najde a rovnou smaže (opatrně!)
Uvozovky kolem "*.log" jsou důležité: brání shellu, aby si * rozbalil sám dřív, než se k němu dostane
find. Chceš, aby žolíka dostal find a použil ho na celý strom.
POZOR: kopírování a mazání jsou tiché a nevratné
Tohle si přečti dvakrát. Většina „katastrof v terminálu" se stane přesně tady.
Linux nemá koš. Když v grafickém správci souborů smažeš soubor, jde do koše a dá se vytáhnout zpátky.
rm v terminálu maže napřímo — obsah je pryč, žádné „obnovit". Existují forenzní nástroje, ale nespoléhej na ně.
cp a mv tiše přepíšou cíl. Když cílový soubor už existuje, cp source.txt cil.txt ho bez ptaní
přepíše — původní cil.txt je nenávratně přepsaný. Stejně tak mv. Žádné „opravdu?".
Přesměrování > taky maže. Zápis prikaz > soubor.txt nejdřív vynuluje soubor.txt (i kdyby
příkaz nakonec nic nevypsal). Použití > na existující soubor = jeho původní obsah je pryč. (Chceš-li
přidávat na konec místo přepsání, použij >>.)
rm -rf je nejnebezpečnější kombinace, jakou v terminálu napíšeš. -r = ponoř se do všech podsložek,
-f = force, mlč a na nic se neptej. rm -rf slozka smaže složku a všechno pod ní bez jediného
dotazu. Fatální je, když se do cesty vloudí mezera nebo prázdná proměnná:
rm -rf /home/petr/stare # OK, smaže jednu složku
rm -rf /home/petr/ stare # KATASTROFA: mezera navíc → maže celý /home/petr/ !
rm -rf $SLOZKA/* # když je $SLOZKA prázdná, stane se z toho rm -rf /*
Jak se chránit
- Přepínač
-i(interactive) donutí příkaz zeptat se před každou akcí. Funguje urm,cpimv:rm -i soubor.txt # rm: smazat obyčejný soubor 'soubor.txt'? y/n cp -i a.txt b.txt # zeptá se, než přepíše b.txt - Trvalý alias — přidej si do
~/.bashrc, ať je-ivýchozí a systém tě chrání sám od sebe:alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'
Po restartu terminálu (nebosource ~/.bashrc) se těrmbude vždycky ptát. Nespoléhej ale na alias na cizích strojích — tam nemusí existovat. - Než odešleš
rms žolíkem, nahraď hols.ls *.tmpti ukáže, co byrm *.tmpsmazal. Když sedí seznam, teprv pak přepišlsnarm.
🚩 Zlaté pravidlo: u
rm -rfse na chvíli zastav a přečti si celý řádek pozpátku. Ta vteřina navíc tě jednou zachrání před ztrátou dat.
Failure modes — časté omyly začátečníků
rm -rfomylem (mezera / prázdná proměnná). Nejčastější skutečná katastrofa.rm -rf /cesta /navics nechtěnou mezerou maže dvě věci místo jedné. Vždy si řádek přečti, u proměnných je obal do uvozovek (rm -rf "$SLOZKA") a raděj používej-i.- Zapomenuté
-ru složky.rm slozkanebocp slozka cilselže s „is a directory". Není to chyba systému — jen ti připomíná, že na složku potřebuješ-r. (Naopak — když-rnechceš, ale zapneš ho, smažeš i to, co jsi nechtěl.) - Přepsání souboru přes
cp/mv/>. Cíl se přepíše tiše. Zvlášť zákeřné je>— vynuluje soubor ještě předtím, než příkaz vůbec něco vypíše. Používej-ia>>když chceš přidávat. - „Kde je koš?" V terminálu žádný není. Smazané
rmje pryč. Kdo chce záchrannou síť, ať používá-i, aliasy, nebo nástroj typutrash-cli(trashmístorm), který maže do koše. - Zaseknutí v
less. Není to zamrznutí — jen stránkovač čeká. Ven se dostaneš písmenemq. - Žolík rozbalí něco jiného, než čekáš.
rm *v nesprávné složce smaže vše. Vždy nejdřívls *, pakrm.
🛠️ Cvičení
- Postav a zboř strukturu. Jedním příkazem vytvoř složky
pokus/a/b/c(nápověda:mkdirmá přepínač, co udělá celou cestu naráz). Pak dopokus/avytvoř prázdný soubortest.txt. Nakonec celýpokussmaž jedním příkazem. Proč na to smazání potřebuješ-r? - Bezpečné mazání žolíkem. Máš složku plnou souborů
log1.txt…log9.txta chceš smazat jen ty logy, ne nic jiného. Jaký příkaz ti nejdřív ukáže, co by se smazalo, a jak ho pak změníš na skutečné mazání? Který wildcard je bezpečnější —log?.txtnebolog*, a proč? - Přejmenuj a přesuň. Máš soubor
koncept.txt. Přejmenuj ho naverze1.txta pak ho přesuň do podsložkyhotovo/(kterou nejdřív vytvoř). Kolik různých příkazů na to potřebuješ a proč jemvna obojí? - Sleduj log naživo. Najdi příkaz, který ti bude v reálném čase vypisovat nové řádky přibývající do
souboru
/var/log/aplikace.log. Čím ho ukončíš? A jak bys zobrazil jen posledních 20 řádků bez sledování? - Chraň se aliasem. Přidej si do
~/.bashrcalias, aby sermvždy ptal před smazáním. Jak alias aktivuješ bez zavírání terminálu? Proč se na tenhle alias nesmíš spoléhat na cizím stroji?
Náčrt řešení — rozbal, až si cvičení zkusíš sám
- Struktura — vytvoření:
mkdir -p pokus/a/b/c(-pudělá i chybějící mezisložky naráz). Soubor:touch pokus/a/test.txt. Smazání:rm -r pokus.-rje nutné, protožepokusje složka s obsahem — bez-rrmodmítne mazat adresář. Pozor:rm -rje nevratné, žádný koš — než ho pustíš, mrknils, že mažeš správnou věc. - Bezpečné mazání — nejdřív
ls log?.txt(ukáže, co sedí), a když seznam odpovídá, přepíšeš narm log?.txt.log?.txtje bezpečnější:?sedí na právě jeden znak, takže chytílog1.txt…log9.txt, ale ne třebalog-dulezite-neprepisovat.txt.log*by chytil úplně všechno začínající „log", i to, co jsi nechtěl. Pozor: žolíky rozbaluje shell — vždy si výběr nejdřív ověřls, teprve pak mazej. - Přejmenuj a přesuň — jde to jedním nástrojem,
mv, protože přejmenování i přesun jsou v Linuxu ta samá operace:mkdir hotovo, pakmv koncept.txt verze1.txt(přejmenování), pakmv verze1.txt hotovo/(přesun). Nebo obojí naráz:mv koncept.txt hotovo/verze1.txt. Pozor: kdyby v cíliverze1.txtuž existoval,mvho tiše přepíše — jisti se přesmv -i. - Sleduj log —
tail -f /var/log/aplikace.logživě dopisuje nové řádky; ukončíš hoCtrl+C. Jen posledních 20 řádků bez sledování:tail -n 20 /var/log/aplikace.log. Pozor:tail -fdrží terminál obsazený, dokud ho neukončíš — je to záměr (sleduješ), ne zaseknutí. - Alias — do
~/.bashrcpřidej řádekalias rm='rm -i'. Aktivace bez zavření terminálu:source ~/.bashrc(načte konfiguraci znovu). Na cizím stroji ten alias neexistuje, takže tamrmmaže napřímo bez ptaní — návyk „přečíst řádek než ho pustím" tě ochrání spolehlivěji než alias. Pozor: alias tě uspí do falešného pocitu bezpečí;rm -fnavíc-iz aliasu potlačí.
🧠 Otázky & odpovědi
Proč rm nemaže do koše a jak se před tím chránit?
Protože rm je nízkoúrovňový nástroj, který rovnou odpojí soubor od systému souborů — žádná záchranná
síť, žádný koš, obsah je pryč a spoléhat na forenzní obnovu se nedá. Je to cena za rychlost a jednoduchost.
Chránit se dá třemi způsoby: přepínačem -i (zeptá se před každým smazáním), aliasem alias rm='rm -i'
v ~/.bashrc (udělá -i výchozí), nebo nástrojem trash-cli, který maže do skutečného koše. A nejlevnější
pojistka: než pustíš rm s žolíkem, nahraď ho ls a podívej se, co by zmizelo.
Kdy potřebuju přepínač -r a co znamená?
-r znamená recursive — „ponoř se do složky a zpracuj i všechno, co je uvnitř". Potřebuješ ho vždy,
když stejnou operaci děláš na adresář místo jednoho souboru: rm -r slozka (smaž složku i s obsahem),
cp -r slozka kopie (zkopíruj celou složku). Bez -r ti rm i cp na složce odmítnou práci s hláškou
„is a directory" — je to pojistka, ať omylem nesmažeš celý strom. Výjimka je mv, které -r nepotřebuje
(přesun složky je jen změna adresy, ne procházení obsahu).
Co je to wildcard a kdo ho vlastně zpracovává?
Wildcard (žolík) je zástupný znak, kterým řekneš „všechny soubory, co odpovídají vzoru": * = libovolný
počet znaků, ? = právě jeden znak, [ ] = jeden znak z množiny. Klíčové je, že ho rozbaluje shell, ne
samotný příkaz — když napíšeš rm *.log, shell nejdřív najde všechny odpovídající soubory a rm už
dostane hotový seznam jmen. Proto žolíky fungují napříč všemi příkazy stejně. A proto se u find dává vzor
do uvozovek (find . -name "*.log") — chceš, aby si * nechal find, ne aby ho shell rozbalil předčasně.
Jak si přečtu obří soubor, když ho cat vyleje celý na obrazovku?
Použij less — stránkovač, který soubor otevře a necháš se v něm rolovat, aniž by ti přetekl terminál:
šipkami se posouváš, /text hledá, g skočí na začátek, G na konec a q tě vrátí zpět (to je to
jedno písmeno, co musíš znát, ať se „nezasekneš"). Když tě zajímá jen kraj souboru, sáhni po head (prvních
10 řádků) nebo tail (posledních 10). A na živé sledování logu je tail -f soubor — nechá soubor
otevřený a dopisuje nové řádky, jak přibývají; ukončíš Ctrl+C.
Proč mi cp/mv přepsalo soubor bez varování a co s tím?
Protože cp i mv jsou navržené tak, aby byly tiché — když cíl už existuje, přepíšou ho bez ptaní,
aby šly použít i ve skriptech, kde by se dotaz nehodil. Stejně zákeřné je přesměrování >, které cílový
soubor vynuluje ještě předtím, než příkaz cokoli vypíše. Obrana: přepínač -i (cp -i, mv -i)
donutí příkaz zeptat se před přepsáním, a když chceš k souboru přidávat místo přepsání, použij >>
místo >. Návyk mrknout, jestli cíl už neexistuje, tě ušetří spousty mrzení.
