Od teď: Všechno je soubor. I adresář. Ale aby bylo jasné, definujme typy souborů.
- obyčejný soubor
d adresář
l symbolický link, odkaz
c znakové zařízení
b blokové zařízení
p pojmenovaná roura
s socket
Obyčejný soubor
Do této kategorie patří běžné soubory, spustitelné nebo ne, textové, binární. Příklad: film.avi, cd.iso, poznamky.txt, nazdar.exe, stranka.html, program.java, obrazek.jpg, dokument.doc.
Přípona souboru (tedy to, co je za tečkou) není pro UNIXový systém povinná, ale mohou ji vyžadovat některé aplikace. Jméno souboru je case sensitive, tedy záleží, jestli je psané velkými nebo malými písmeny. Ideální jméno souboru (adresáře, čehokoli jiného) je složeno malých či velkých písmen anglické abecedy, číslic, teček, podtržítek. Jiné znaky (mezery, vykřičníky, otazníky, české znaky) mohou být součástí jména, ale může s nimi být těžká práce. Je slušností se jich vyvarovat.
Spustitelnost souboru je definovaná jeho právy nikoli jménem. Soubory a adresáře začínající znakem tečka jsou skryté, tedy při běžném výpisu ls nejsou vytisknuty. Nejsou tím tajemné, pouze jde o soubory, které obsahují například konfiguraci prostředí, proto je nechcete vidět při každém výpise, ačkoli tušíte, že tam jsou.
Adresář
Adresář obsahuje seznam souborů. Jméno / je vyhrazeno rootovskému adresáři.
Symbolický link
Symbolický link neboli odkaz je soubor, který neodkazuje na konkrétní data v paměti, ale na nějaký jiný název/cestu v adresářovém systému.
Znakové zařízení
Všechny hardwarová zařízení mají jasně definované místo, kde komunikují s operačním systémem. Znakové zařízení je takové, které komunikuje po jednotlivých znacích. Příkladem je tiskárna, terminál, klávesnice. Tyto soubory najdete v /dev
Mezi znaková zařízení patří čtyři virtuální zařízení:
/dev/null simuluje prázdný disk. Lze do něj zapsat libovolné množství dat. Při čtení je ovšem vždy prázdný. Černá díra.
/dev/full simuluje plný disk. Při zápisu vrací chybu No space left on device.
/dev/zero je soubor plný nul. Vhodný, potřebujete-li vygenerovat větší množství nul.
/dev/random vrací pseudonáhodné číslo.
Blokové zařízení
Hardwarové zařízení, které komunikuje po blocích, typicky disky. Pro zápis nebo čtení i jediného bitu je potřeba přenést celý blok, 2048 bajtů. Vyžaduje použití bufferu.
Pojmenovaná roura
Soubor, který slouží ke komunikaci mezi dvěmi procesy, jeden proces do roury zapisuje, druhý z ní čte.
Socket
Podobně jako roura slouží ke komunikaci, ale ta obvykle probíhá i mezi vzdálenými stroji a může být oboustranná.
Jak je to všechno uložené
V tuto chvíli mě nezajímá, jak jsou uložená konkrétní data v souboru, ačkoli doufám, že čtenář tuší něco o jedničkách a nulách a o tom, jak se z textu/obrázku/binárky/filmu stane něco, co může uložit paměťové médium pomocí vektorů směřujících jedním nebo druhým směrem. Zajímá mě ovšem, jak o tom všem ví operační systém a jak ví, kam se podívat, když mu přikážu, aby mi zobrazil obsah nějakého souboru.
Do této chvíle jsme se bavili o cestách a jménech souborů. Tato adresářová struktura je někde uložená a každá položka z této struktury (každý soubor, jak už víme z předchozího) je popsaná svým inodem. Inod má své unikátní číslo v rámci jedné logické partition a má v sobě uložené informace o tom, na kterých adresách najdu na disku data daného souboru + metadata s časovými údaji (čas poslední změny souboru, obsahu souboru, otevření souboru), práva (UID vlastníka, GID vlastnické skupiny, jaká mají práva), typ souboru, počet odkazů na inod. Co vše je součástí inodu, popisuje standard POSIX. Povšimněte si, že součástí inodu není jméno souboru nebo jeho místo v adresářové struktuře.
Číslo inodu vypíše příkaz ls -i.
Počet odkazů na soubor
Ve výpisu ls -l si povšimněte druhého sloupce, kde je číslo. Toto číslo označuje počet odkazů na soubor. Pro většinu souborů (všeho možného typu kromě adresářů) je tento počet odkazů 1. Pro adresář je toto číslo vyšší nebo rovné 2. Princip naznačuje přiložený obrázek. Každý adresář má nadřízený adresář, každý má odkaz sama na sebe (tečka), pokud má podadresáře, pak každý podadresář ukazuje na svůj nadřízený adresář (dvě tečky).
Tvrdý link
Počet odkazů na soubor, který není adresářem, je obvykle jeden. Pouze jedno jméno souboru v adresářové struktuře ukazuje na určitý inod. Existuje způsob, jak se na něj odkázat, jeho jméno je pak hardlink či tvrdý odkaz.
ln původní nový
Příkaz ln vytvoří v adresářové struktuře nový soubor, který ovšem není nový, ale je zcela stejný jako ten, který byl jeho zdrojem. Odkazuje na stejný inod, má tedy stejného vlastníka, stejná práva, časové údaje, obsah, jeho editací edituju i soubor původní. Má jenom jiné jméno a může být jinde v adresářové struktuře. Pro tvrdý odkaz existují omezení, odkaz musí být ve stejné logické partition. Připojení (mount) aktuálních disků (resp. partition) do adresářového stromu zobrazí příkaz df. Tvrdý odkaz není povolený pro adresáře, aby adresářová struktura zůstala stále stromová.
S vytvořením nového tvrdého linku na nějaký soubor se zvýší počet odkazů na daný soubor. Je-li libovolný link smazán, počet se sníží. Z tohoto je vidět, že
mohu smazat i původní soubor a nechat jen ten nový. Označení původní a nový zdůrazňuju, soubory jsou úplně stejné, co je původní a nové nikoho nezajímá, takže dochází jen k jejich přejmenování.
ano, příkaz mv taky nevytváří nové inody, když přesouvá něco v rámci jedné logické partition
když smažu dostatek souborů, aby počet odkazů na soubor klesl na 0, soubor zmizí z adresářové struktury. Nezmizí ovšem z disku, stále existuje jeho inod, který bude přemazán později.
ano, můžete tak zachraňovat omylem smazané soubory
ne, není to úplně snadné
Symbolický link
Princip tvrdého linku je mocný, ale má také mnoho omezení. Proto existuje symbolický link (symbolické odkaz, symlink), který je odkazem pouze na cestu a jméno původního souboru
ln -s původní nový
Tento princip vytváří nový soubor typu symbolický link (viz. výše typy souborů), kde původní soubor je novým souborem zcela netknut, dokonce o něm vůbec neví. nový soubor má svůj vlastní inod, svého vlastního vlastníka i práva, která se tváří velmi benevolentně, nicméně jeho ve skutečnosti platí práva původního souboru. Pro symbolický link je možné opět shrnout pár faktů
Symbolický link může vést i na adresáře nebo na jiné disky.
Odkazuje se přímo na cestu k souboru, napíšu-li cestu do příkazu relativní, bude tam relativní.
Původní soubor o linku na sebe neví, když jej přesunu, přejmenuju, smažu, symbolický link zůstává a vede do prázdna. Je to broken link.