Souborový systém

FHS, / vs domov, absolutní vs relativní cesty.

Co se naučíš: Zorientuješ se ve stromu adresářů a přestaneš hledat, kam co patří a kde to program bude čekat.

13 min čtení + cvičeníNavazuje na:⌨️ Terminál a shell

V Linuxu není žádné „C:" a „D:". Existuje jeden jediný strom, který začíná u kořene / a všechno ostatní, domovy uživatelů, konfigurace, logy, programy, ba i disky a flashky, které připojíš, visí někde v tom stromě jako složky. Až pochopíš, kde co bydlí a proč, přestane ti být systém labyrint a stane se z něj mapa, ve které se orientuješ poslepu.


Pár pojmů na úvod

  • Kořen (root, /) = úplný začátek stromu. Není nad ním nic, všechno je pod ním. Pozor: „root" znamená v Linuxu dvě věci, tenhle kořenový adresář / a taky superuživatele (admina). Ze začátku matoucí, časem si zvykneš.
  • Adresář (directory) = to, čemu Windows říká „složka". V Linuxu se běžně řekne „adresář", je to totéž.
  • Cesta (path) = adresa souboru ve stromě, např. /home/anna/poznamky.txt. Oddělovač je lomítko / (ne zpětné \ jako ve Windows).
  • Mount (připojení) = akt, kterým se obsah disku (nebo flashky, síťové složky…) „napojí" do stromu na nějakou složku. Od té chvíle se do něj chodí jako do obyčejného adresáře.
  • FHS (Filesystem Hierarchy Standard) = dohoda, která říká, co má být v /etc, co v /var, co v /usr… Díky ní vypadá strom napříč distribucemi skoro stejně a ty víš, kam sáhnout.

Jeden strom, ne písmenka disků

Ve Windows má každý disk vlastní písmeno: systém na C:, druhý disk D:, flashka třeba E:. Když připojíš nový disk, přiskočí další písmeno a máš prostě víc oddělených „stromečků".

Linux to dělá naopak. Je tu jeden strom od kořene / a nové disky se do něj připojují (mount) jako složky. Druhý disk se ti může objevit třeba jako /mnt/data, flashka jako /run/media/anna/USB. Z pohledu chození po systému je to pořád jen adresář, nemusíš vůbec řešit, na kterém fyzickém disku zrovna jsi.

💡 Proto se v Linuxu neptáš „na kterém disku to je", ale „kde ve stromě to je". Fyzické disky jsou skryté pod logickou mapou, a to je záměr.


Co je v kořeni: mapa podle FHS

Když se podíváš do /, uvidíš hrstku adresářů s krátkými jmény. Nejsou náhodné, každý má svůj účel daný standardem FHS. Tady je ta nejdůležitější sada:

  • /home: domovy obyčejných uživatelů. Anna má /home/anna, tam patří její dokumenty, stažené věci a nastavení. Tohle je jediné místo, kam běžně zapisuješ bez admina.
  • /root: domov superuživatele (roota). Není v /home, je zvlášť rovnou pod kořenem. Nepleť si / (kořen) a /root (domov admina), jsou to dvě různé věci.
  • /etc: konfigurace celého systému, samý text. Kdo poslouchá na síti, kdo se smí přihlásit, jak se jmenuje počítač, to všechno bydlí tady (např. /etc/os-release, /etc/hosts).
  • /var: proměnná data, co za běhu narůstají: hlavně logy (/var/log), fronty, cache, databáze. Když se plní disk, koukni sem první.
  • /usr: nainstalované programy a jejich data (aplikace, knihovny, dokumentace). Většina toho, co používáš, je fyzicky tady, i když to spouštíš krátkým jménem.
  • /bin, /sbin: binárky, tedy spustitelné příkazy. /bin základní pro všechny (ls, cp, cat), /sbin správcovské (mount, reboot). Na moderních distrech jsou to už jen odkazy do /usr.
  • /tmp: dočasné soubory. Kdokoli sem smí psát, ale po restartu se to obvykle smaže. Nikdy sem neukládej nic, o co nechceš přijít.
  • /dev: zařízení: disky (/dev/sda), klávesnice, atd. jako soubory. Víc za chvíli.
  • /proc, /sys: virtuální okna do jádra: běžící procesy, nastavení kernelu. Na disku fyzicky nejsou, jádro je vyrábí za běhu.
  • /boot: jádro a zavaděč (GRUB). To, co se načte hned po zapnutí, ještě než naběhne zbytek systému.

🚩 Nebudeš to umět zpaměti hned a nemusíš. Pravidlo palce: konfigurace → /etc, logy → /var/log, tvoje věci → /home, programy → /usr. S tímhle přežiješ 90 % situací.


Absolutní vs relativní cesta

Cesta k souboru může být zapsaná dvěma způsoby a je klíčové ten rozdíl chápat:

  • Absolutní cesta začíná lomítkem / a popisuje trasu od kořene. Funguje odkudkoli, protože je jednoznačná: /home/anna/poznamky.txt je pořád ten stejný soubor, ať stojíš kdekoli.
  • Relativní cesta začíná od místa, kde právě stojíš (aktuální adresář). Když jsi v /home/anna, tak poznamky.txt znamená totéž co absolutní /home/anna/poznamky.txt.

K relativním cestám patří čtyři zkratky, které musíš znát:

  • . (tečka) = „tady", aktuální adresář. ./skript.sh znamená „skript v téhle složce".
  • .. (dvě tečky) = „o úroveň výš", nadřazený adresář. Z /home/anna tě .. dostane do /home.
  • ~ (vlnovka) = můj domov. Pro Annu je ~ zkratka za /home/anna. ~/Stažené je její složka Stažené.
  • / (samotné lomítko) = kořen, začátek stromu.
cd /home/anna        # absolutní: skoč přesně sem
cd Dokumenty         # relativní: vejdi do Dokumentů uvnitř aktuálního adresáře
cd ..                # o úroveň výš
cd ~                 # domů (totéž jako samotné: cd)
cd /                 # do kořene

💡 Analogie: absolutní cesta je jako plná poštovní adresa („Praha, Hlavní 5"). Relativní je jako „vedlejší dveře", má smysl jen podle toho, kde zrovna stojíš.


Jak se ve stromě pohybovat

Tři příkazy, se kterými se zorientuješ kdekoli:

pwd                  # print working directory: kde právě jsem?
cd /var/log          # change directory: přesuň se sem
ls                   # vypiš, co v aktuálním adresáři je
ls -la               # vypiš VŠECHNO včetně skrytého + podrobnosti

pwd je tvůj kompas: kdykoli se ztratíš, napiš pwd a systém ti řekne přesnou absolutní cestu, kde stojíš. cd tě přesouvá, ls ukazuje obsah.

Skryté soubory začínají tečkou. Soubor .bashrc (nastavení tvého shellu) ls normálně nezobrazí, je „skrytý" právě tou tečkou na začátku jména. Ukážeš ho až přepínačem -a (all):

ls           # .bashrc neuvidíš
ls -a        # teď ano: .bashrc, .config a spol.

Není to žádná ochrana ani tajnost, je to jen konvence, aby ti konfigurační soubory nepřekážely v běžném výpisu.


Připojení disku (mount) v kostce

Když strčíš flashku nebo přidáš disk, jádro o něm ví (uvidíš ho v /dev), ale ještě se do něj nedá chodit jako do složky. K tomu je potřeba ho připojit (mount) na nějaký bod ve stromě, tzv. mount point, což je prostě zvolený adresář.

Přirovnání: disk je knížka, mount point je poznámkový lísteček, kterým ji vlepíš do svého velkého šanonu. Od chvíle připojení otevřeš /mnt/data a čteš obsah disku, jako by tam ta data „byla odjakživa".

lsblk                        # ukaž disky a jejich připojení (přehledný strom)
mount                        # co všechno je právě připojené a kam

Na desktopu to za tebe udělá automaticky prostředí (flashka naskočí do /run/media/...). Na serveru to řešíš ručně nebo přes /etc/fstab (seznam, co se má připojit po startu), k tomu se dostaneš později. Teď stačí chápat princip: připojení = vložení obsahu disku do stromu na zvolenou složku.


„Všechno je soubor" prakticky: /dev a /proc

V kapitole o Linuxu padlo, že „všechno je soubor". Tady to uvidíš na dvou konkrétních místech ve stromě:

  • /dev: zařízení jako soubory. Tvůj první disk je /dev/sda, druhý /dev/sdb, terminál /dev/tty. Existuje i /dev/null, černá díra, do které zahodíš cokoli, co nechceš vidět. Nejsou to data na disku, jsou to „dvířka" k hardwaru vystavená jako soubory.
  • /proc: info od jádra jako soubory. Pro každý běžící proces je tu složka pojmenovaná jeho číslem (PID). /proc/cpuinfo ti řekne o procesoru, /proc/meminfo o paměti a čteš to obyčejným cat.
cat /proc/cpuinfo            # info o CPU: čteno jako obyčejný soubor
echo "nezajímá mě" > /dev/null   # zahoď výstup do černé díry

Kouzlo je v tom, že na tyhle úplně rozdílné věci (hardware, procesy, systémové informace) ti stačí stejné nástroje jako na obyčejný textový soubor. Žádné speciální API, jen cat, >, grep, less.


Failure modes, časté omyly začátečníků

  • „Hledám disk D." V Linuxu žádná písmena nejsou. Druhý disk je někde ve stromě (/mnt, /run/media), najdeš ho přes lsblk, ne v „Tento počítač".
  • „Uložím si to do /tmp, ať to mám po ruce." /tmp se po restartu maže. Cokoli důležitého patří do ~ (domova).
  • „/ a /root je to samé." Není. / je kořen celého stromu, /root je domovská složka jednoho uživatele (admina).
  • „Napíšu cestu se zpětným lomítkem \." Windows reflex. V Linuxu je oddělovač normální lomítko /; \ má úplně jiný význam (escapování).
  • „Skrytý soubor = zabezpečený soubor." Tečka na začátku jména není zámek, jen konvence, ať výpis nepřekáží. ls -a ho ukáže komukoli.

🛠️ Cvičení

  1. Zorientuj se. Otevři terminál a zjisti, kde stojíš (pwd). Pak skoč do kořene, vypiš jeho obsah, a vrať se domů, pokaždé jiným způsobem než absolutní cestou. (Nápověda: cd, .., ~.)
  2. Přečti mapu. Vypiš obsah /etc, /var/log a /home. U každého řekni jednou větou, co bys tam čekal, že najdeš a ověř, jestli to sedí.
  3. Odhal skryté. Ve svém domově spusť ls a pak ls -la. Kolik věcí přibylo a proč? Najdi soubor .bashrc a vysvětli, proč ho běžný ls neukázal.
  4. Zařízení a procesy jako soubory. Přečti /proc/cpuinfo obyčejným cat a v /dev najdi svůj disk. Jak to souvisí s „všechno je soubor"?
  5. Kdo je připojený. Spusť lsblk a najdi, který disk je připojený na / (kořen). Kdybys zapojil flashku, kde bys ji ve stromě čekal?
Náčrt řešení: rozbal, až si cvičení zkusíš sám
  1. Orientace, pwd vypíše absolutní cestu, kde stojíš (typicky /home/tvojejmeno). Do kořene: cd /, výpis ls. Zpátky domů relativně/zkratkou: cd ~ nebo úplně holé cd (bez argumentu jde vždy domů), případně cd .. opakovaně. Pozor: holé cd = domů, to je užitečná zkratka, kterou si zapamatuj.
  2. Mapa, /etc = konfigurační textové soubory systému (ls /etc), /var/log = logy (ls /var/log), /home = domovy uživatelů (ls /home). Sedí to podle FHS: config, proměnná data, uživatelské domovy. Pozor: do /etc a /var běžně zapisuje jen admin (root), ty tam většinou jen čteš.
  3. Skryté soubory, ls -la ukáže i položky začínající tečkou (.bashrc, .config) plus dvě speciální: . (tenhle adresář) a .. (nadřazený). .bashrc ls normálně skryje kvůli tečce na začátku jména, není to ochrana, jen konvence. Pozor: -a = all (včetně skrytých), -l = long (podrobnosti).
  4. Vše je soubor, cat /proc/cpuinfo vypíše informace o CPU, přestože žádný takový soubor na disku fyzicky není, jádro ho vyrábí za běhu. V /dev je disk např. /dev/sda. Obojí ukazuje, že hardware i info jádra jsou vystavené jako soubory, takže stačí cat. Pozor: /proc a /dev jsou virtuální, po rebootu se generují znovu, nezabírají místo na disku.
  5. Připojení, lsblk vykreslí strom disků a v sloupci MOUNTPOINTS uvidíš, který oddíl je na /. Flashku bys po zapojení čekal na desktopu v /run/media/tvojejmeno/..., na serveru tam, kam ji ručně připojíš (často /mnt). Pozor: „vidět disk v /dev" ≠ „být připojený", připojení je samostatný krok (mount).

🧠 Otázky & odpovědi

Proč v Linuxu nejsou písmena disků jako C: a D:?

Protože Linux má jeden jediný strom od kořene / a nové disky se do něj připojují (mount) jako složky, ne jako oddělené „stromečky" s vlastním písmenem. Druhý disk se objeví třeba jako /mnt/data, flashka jako /run/media/anna/USB. Výhoda: z pohledu chození po systému je všechno jen adresář a nemusíš řešit, na kterém fyzickém disku zrovna jsi, fyzická vrstva je schovaná pod jednou logickou mapou.

Jaký je rozdíl mezi absolutní a relativní cestou?

Absolutní cesta začíná lomítkem / a popisuje trasu od kořene, je jednoznačná a funguje odkudkoli (/home/anna/poznamky.txt je pořád ten stejný soubor). Relativní cesta začíná od místa, kde právě stojíš (aktuální adresář), takže její význam závisí na tom, kde jsi. Pomáhají zkratky: . = tady, .. = o úroveň výš, ~ = můj domov, / = kořen. Analogie: absolutní = plná poštovní adresa, relativní = „vedlejší dveře".

Co znamená připojit disk (mount)?

Že obsah disku (nebo flashky, síťové složky) napojíš do stromu na zvolenou složku, tzv. mount point. Od té chvíle do disku chodíš jako do obyčejného adresáře: otevřeš /mnt/data a čteš jeho obsah. Samotné „vidím disk v /dev" ještě neznamená, že se do něj dá chodit, připojení je samostatný krok. Na desktopu to udělá prostředí automaticky, na serveru to řešíš ručně nebo přes /etc/fstab.

Kam patří moje soubory, konfigurace a logy?

Drž se pravidla palce z FHS: tvoje věci → /home (např. /home/anna, zkratkou ~), konfigurace systému → /etc, logy → /var/log, nainstalované programy → /usr. /tmp je jen na dočasné soubory a po restartu se maže, nic důležitého tam nedávej. /root je domov admina (roota), ne totéž co kořen /. S touhle mapou trefíš, kam sáhnout, ve většině situací.