2. Souborový systém Linuxu

Autor sekce: Jiří Sedláček <sedlacek@vse.cz>

Mezi souborové systémy používané v Linuxu patří ext2, ext3, ext4, dále např. JFS nebo xfs. Linux umí pracovat i se souborovými systémy Windows (tj. NTFS a FAT32), obráceně to standardně neplatí. Proto pokud se chystáte např. nainstalovat Linux vedle Windows (tzv. dual boot) a chcete určitý oddíl (např. D:) sdílet mezi oběma systémy, použijte na tuto partition NTFS příp. FAT32 (ten je jednodušší ale má omezení na velikost souborů).

2.1. Hlavní odlišnosti souborového systému Linuxu

Mezi hlavní odlišnosti souborového systému Linuxu (ve srovnání s Windows) patří:

  • Rozlišuje se velikost písmen. Asi nejznámější vlastnost i mezi lidmi, kteří dosud s Linuxem nepracovali (priklad.txt, Priklad.txt, priklad.TXT a Priklad.TXT jsou čtyři různé soubory). Přesto zde (nejen) začátečníci často chybují, patrně i proto, že Windows velká a malá písmena sice nerozlišují, ale přitom je zachovávají (tj. pokud ve Windows uložíte soubor Priklad.txt, bude první velké písmeno zachováno, ale pokud byste z jiného adresáře kopírovali soubor priklad.txt, bude soubor přepsán). Rozlišování velikostí písmen platí nejen pro soubory (a adresáře), ale i pro obsah v konfiguračních souborů, skriptů, přepínače (parametry) příkazů ad.

  • Neexistují jednotky resp. písmena jednotek (ve Windows označované C:, D: atd.). I když je souborový systém rozdělen na více oddílů (partitions) nebo dokonce fyzických disků, z pohledu uživatele existuje jediná stromově tvořená hierarchie souborového systému.

  • Přípona neurčuje typ, řada souborů zcela bez přípony. Většinou je přípona považována jen za součást názvu souboru a neovlivňuje, jak se se souborem bude zacházet. Typ je určen na základě obsahu, nikoli přípony.

  • Adresář je druh souboru. Adresář (v terminologii Windows složka) je jen zvláštní druh souboru (podrobněji viz Typy souborů a přístupová práva). I adresáře mohou mít příponu, typickým příkladem jsou adresáře init.d nebo cron.d v adresáři etc.

  • Oddělovač adresářů je / („normální“ lomítko, anglicky forward slash). Tedy stejně jako v URL na Internetu. Důvodem proč Windows (původně DOS) používají jako oddělovač \ (zpětné lomítko) je historický. První verze DOSu ještě neměla adresáře a jako oddělovač parametrů příkazů se používalo (a dodnes používá) lomítko (zatímco v Unixu/Linuxu je to pomlčka). Když potom DOS 2.0 poprvé zavedl adresáře, musel buď změnit oddělovač parametrů nebo použít jako oddělovač adresářů jiný znak. Zvolil druhou variantu () a již do zůstalo až do současné verze Windows.

  • Skryté soubory. Striktně vzato Linux nemá skryté soubory (není to atribut souboru). Existuje pouze konvence, že soubory (nebo adresáře) s tečkou na začátku jsou považovány za skryté a většina programů je standardně při práci se soubory nezobrazuje. Těmto „skrytým“ souborům se proto často říká též dot-files (doslova tečkové soubory) a zpravidla jde o konfigurační a jiné „systémové“ soubory.

  • Linux může používat jiné kódování ASCII souborů (a názvů všech souborů), podrobnosti jsou uvedeny dále.

  • ASCII soubory používají jiný způsob označení konce řádků než Windows (opět viz dále).

2.2. Kódování souborů/názvů, ukončování řádků ASCII souborů

ASCII soubory ve Windows, Linux/Unix a macOS (Apple) standardně používají jiný způsob ukončování řádků a to:

  • Ve Windows (a DOS) je každý řádek ASCII souboru ukončen dvojicí znaků, které se symbolicky označuji CR a LF (psáno též CR/LF nebo CR-LF nebo CRLF). CR je v ASCII tabulce znak s dekadickou hodnotou 13 a LF s dekadickou hodnotou 10.

  • V Linuxu a Unix-like operačních systémech (tj. např. FreeBSD, další verze BSD, macOS: myšleno poslední verze OS fy Apple, IBM AIX ad.) je řádek ASCII souboru ukončen pouze znakem LF.

  • V případě starších verzí Mac OS (Mac OS „classic“, tj. do verze 9), dále starší počítače Apple a některé další, dnes již historické počítače (např. ZX Spectrum) je řádek ukončen pouze znakem CR.

V případě editorů pro Linux to není problém, poradí si s každou verzí ukončování řádků. Ale např. Poznámkový blok (Notepad) ve Windows s tím ve své sebestřednosti vůbec nepočítá a pokud v něm otevřete ASCII soubor jen s LF, zobrazí se jako jeden „nekonečný“ řádek a ještě problémově (opravdu dlouhé řádky nezvládá vůbec).

Ve Windows je třeba použít nějaký lepší ASCII editor (např. Notepad++, PSPad). Ty nabízejí jak změnu ukončování řádků, tak konverze mezi různým kódováním. Dále lze použít různé konverzní programy pro Windows nebo Linux (např. unix2dos/dos2unix nebo todos/fromdos: nebývají standardní součástí instalace). Též FTP programy v ASCII režimu přenosu automaticky upravují ukončení řádků, pokud např. server je Linux a klient ve Windows.

Pro kódování obsahu ASCII souborů (a názvů všech souborů) dnes většina distribucí Linuxu standardně používá UTF-8. Ale pro češtinu a další jazyky se ještě můžete setkat (např. u dříve vytvořených souborů, příp. také v současné instalaci) s ISO-8859-2 (nazýváno též ISO Latin-2, neplést s podobným názvem, ale velmi odlišným kódováním MS DOS Latin 2, též PC Latin 2 používaným dříve Microsoftem). Windows dnes také umí UTF-8, ale standardně české Windows používají Windows-1250. Toto kódování je velmi podobné mezinárodní normě ISO-8859-2, ale několik znaků je zakódováno jinak (někteří říkají, že záměrně).

Praktická doporučení:

  • V případě názvů souborů doporučují být konzervativní a nepoužívat v názvech souborů diakritiku (minimálně u souborů, které plánujete přenášet mezi Linux a Windows).

  • Při editování ASCII souborů obsahujících diakritiku ve Windows ho uložte jako UTF-8 (to v novějších verzích Windows umí i Poznámkový blok, i když neumí různé způsoby ukončování řádků).

2.3. Zástupné znaky v Linuxu

Zástupné znaky (wildcards příp. metacharacters, česky hovorově též „žolíky“) v Linuxu jsou dost podobné jako ve Windows, ale odlišnosti existují. Znaky „?“ a „*“ se používají téměř stejně, jen je třeba si uvědomit, že mnohé soubory v Linuxu nemají příponu.

Znak/y

Význam

Příklad a popis

?

právě jeden libovolný

pok?sny

Na pozici 4 může být libovolný znak

pok??ny

Na pozicích 4 a 5 může být libovolný znak

*

jakýkoli počet libovolných znaků

pok*

Všechny soubory začínající pok, včetně samotného pok, protože * znamená také nula znaků!

[ ]

rozsah

pok[a-z]

Znamená libovolné malé písmeno na dané pozici

pok[a-zA-z]

Znamená lib. malé/velké písmeno na dané pozici.

[! ]

rozsah s negací

pokus[!s-z]

Obdobně jako rozsah, ale s vyloučením rozsahu

{ }

výčet

{*.jpg,*.png}

Poznámky:

  1. Ve Windows je standardně jen ? a *, [] je k dispozici ve Windows PowerShell.

  2. Další speciální znaky (a zejména rozsáhlé možnosti jejich kombinací) jsou k dispozici v rámci regulárních výrazů, které lze využít např. pro vyhledávání a nahrazování v textových souborech. Viz libovolná příručka/návod na použití regulárních výrazů.

2.4. Expanze zástupných a dalších speciálních znaků

Příkazový interpret (shell) provádí tzv. expanzi speciálních znaků (kromě toho provádí řadu dalších expanzí, zde neprobíraných), což lze využít nejen pro vypsání nebo smazání více souborů najednou, ale např. též pro vytvoření více adresářů najednou jedním příkazem, např.

mkdir Data0{1,2,3,4,5,6,7,8,9}

vytvoří 9 adresářů (Data01 až Data09)

mkdir Data{1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}

vytvoří 90 adresářů (Data10 až Data99)

Příkaz mkdir (vytvoření adresáře), jakož i další příkazy a práce s příkazovou řádkou jsou popsány v dalších kapitolách.

2.5. Struktura adresářů v Linuxu

Viz prezentace ing. Pavlíčka.

2.6. Práva souborů, uživatelé a skupiny

Viz prezentace ing. Pavlíčka.