Souborový systém Linuxu ======================= .. sectionauthor:: Jiří Sedláček 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ů). 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). 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ů). 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 | ``pok*`` | | | libovolných znaků | 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ů. 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. Struktura adresářů v Linuxu --------------------------- Viz prezentace ing. Pavlíčka. Práva souborů, uživatelé a skupiny ---------------------------------- Viz prezentace ing. Pavlíčka.