9. Pevné a symbolické odkazy
1. Úvod
Pevný odkaz je pojmenovaný odkaz na soubor z adresáře. Většina nelinuxových typů souborových systémů dovoluje mít na každý soubor pouze jeden pevný odkaz, takže umístění i pojmenování souboru je pak jednoznačné; linuxové souborové systémy vás ale takto omezují pouze v umísťování adresářů. Na každý soubor vám však dovolují zřídit až tisíce rovnocenných pevných odkazů, takže tentýž soubor se pak v souborovém systému nachází pod více názvy, případně i v různých adresářích a nezáleží na tom, přes který z těchto názvů k němu přistupujete. Zatímco všechny ostatní vlastnosti souboru jsou jednoznačně uloženy v jeho metadatech, název a příslušnost k adresáři určuje každý pevný odkaz samostatně. Pevné odkazy jsou (na rozdíl od symbolických) vždy platné, protože data a metadata souboru se nesmažou, dokud na ně nějaký pevný odkaz odkazuje.
Symbolický odkaz je něco docela jiného – je to malý zvláštní soubor, který obsahuje pouze určitou relativní či absolutní cestu a programy s ním pak většinou zachází tak, jako by se na daném místě nacházel soubor či adresář touto cestou odkazovaný – jde-li o adresář, můžeme do něj vstoupit příkazem „cd“; jde-li o spustitelný program, můžeme ho spustit atd. Pokud ovšem na odkazované cestě nic neleží, symbolický odkaz je neplatný a programy se s tím musejí nějak vyrovnat.
Příkazy ln, readlink, stat a některé další jsou vyvíjeny v rámci projektu GNU.
2. Definice
- Pevný odkaz je, obecně vzato každá položka v adresáři; pro účely této kapitoly se však omezíme na definici, že pevným odkazem je pouze adresářová položka reprezentující obyčejný soubor. Součástí pevného odkazu je pouze název a umístění v adresáři, všechny ostatní údaje o souboru jsou vlastnostmi souboru jako takového.
- Symbolický odkaz je malý zvláštní soubor, který obsahuje relativní či absolutní cestu k cílovému souboru či adresáři. Symbolické odkazy se dělí na absolutní (obsahující absolutní cestu) a relativní (obsahující relativní cestu). Symbolický odkaz odkazující na neexistující cestu se označuje jako neplatný.
- Následovat symbolický odkaz (follow) znamená chovat se, jako by se na jeho místě a pod jeho názvem skutečně nacházel odkazovaný soubor či adresář. Oproti tomu nenásledovat symbolický odkaz znamená chovat se k němu jen jako k adresářové položce. V linuxu je obvyklé, že při práci s jednotlivým souborem či adresářem se symbolické odkazy následují (např. pokusíte-li se spustit symbolický odkaz na program, spustí se program), zatímco při rekurzivním průchodu adresářovou strukturou (např. příkazy „find“, „cp -R“, „chmod -R“ apod.) se nenásledují. Ve většině případů však toto chování můžete změnit určitým parametrem příkazu.
3. Zaklínadla
3/1 Pevné odkazy
3/2 Symbolické odkazy (vytvořit)
3/3 Symbolické odkazy (ostatní operace)
3/4 Rekurzivní operace
4. Parametry příkazů
4/1 ln
○ -s ◉ | Vytváří symbolické odkazy/pevné odkazy. |
☐ -v | Vypíše každý vytvořený odkaz. |
○ -f ○ -i ◉ | Pokud cíl existuje: přepíše ho bez ptaní/zeptá se uživatele/selže. |
☐ -r | V kombinaci s -s vytváří platné relativní symbolické odkazy. Výchozí chování: vytváří obecné symbolické odkazy. |
☐ -P | Nenásleduje symbolické odkazy uvedené jako „zdroj“. Nemá smysl v kombinaci s „-s“. |
4/2 readlink
○ -e ◉ | Vypíše obsah jako kanonickou absolutní cestu (pokud cíl existuje)/tak, jak je. |
○ -z ◉ | Jednotlivé obsahy ukončuje nulovým bajtem/znakem „\n“. |
-n | Vypíše obsah symbolického odkazu bez dodatečného ukončovače. |
5. Instalace na Ubuntu
Všechny použité nástroje jsou základní součástí Ubuntu přítomnou i v minimální instalaci. Výjimkou je jen příkaz „gawk“, který je nutno doinstalovat:
sudo apt-get install gawk
6. Ukázka
7. Tipy a zkušenosti
7/1 Zkušenosti s pevnými odkazy
- Maximální počet pevných odkazů na jeden soubor je omezený souborovým systémem; v souborových systémech typu ext4 je to 65000, u btrfs 65535 a u tmpfs podstatně víc (podařilo se mi jich vytvořit i víc než milion, aniž by to spotřebovalo příliš mnoho paměti).
- Soubor bude odstraněn z disku v momentě, kdy už na něj neexistují žádné pevné odkazy, není spuštěný jako proces a není otevřený žádným deskriptorem žádného procesu.
- Přístupová práva brání uživatelům (kromě superuživatele) vytvářet pevné odkazy na cizí soubory (tzn. vlastněné jiným uživatelem), ledaže k nim mají práva čtení i zápisu („r“ a „w“).
7/2 Zkušenosti se symbolickými odkazy
- Častou začátečnickou chybou je příkaz typu „ln -s soubory/a odkazy/na-a“. Uvedený příkaz totiž vytvoří symbolický odkaz s obsahem „soubory/a“ a relativní symbolické odkazy se vždy vyhodnocují relativně vůči adresáři, ve kterém se nacházejí, takže faktickým cílem vytvořeného odkazu bude ve skutečnosti „odkazy/soubory/a“, který nejspíš neexistuje. Proto při vytváření relativních symbolických odkazů vždy používejte parametr „-r“, který cesty automaticky opraví. (Toto se nijak netýká absolutních ani pevných odkazů.)
- Méně častou začátečnickou chybou je příkaz typu „ln -sf /etc/passwd odkaz-na-passwd“. Pokud by se totiž stalo, že „odkaz-na-passwd“ je existující symbolický odkaz na adresář, příkaz „ln“ uváží, že chcete vytvořit odkaz uvnitř odkazovaného adresáře, ne že chcete přepsat existující symbolický odkaz. Proto v kombinaci s parametrem „-f“ vždy používejte také parametr „-T“, nebo „-t“. (Tyto parametry se může vyplatit používat i v ostatních případech.)
- Pokud symbolický odkaz odkazuje někam dovnitř adresáře, kam uživatel nemá právo vstoupit, bude se odkaz jevit uživateli jako neplatný, i když to ve skutečnosti nebude pravda.
- Symbolický odkaz má vlastnictví a skupinu, ale nemá vlastní přístupová práva. Přístup k odkazovanému souboru či adresáři se vždy řídí přístupovými právy odkazovaného souboru či adresáře.
- Symbolický odkaz sám o sobě je „nezapisovatelný“; pokud ho chceme změnit, musíme ho nejprve smazat a pak znovu vytvořit. To také znamená, že ke změně obsahu symbolického odkazu potřebuje uživatel právo zápisu do adresáře, kde se odkaz nachází.
- Symbolický odkaz může odkazovat na jiný symbolický odkaz, ale maximální počet zanoření symbolických odkazů je 40 (pravděpodobně jde změnit).
- Maximální délka obsahu symbolického odkazu je 4095 bajtů.
7/3 Jaký typ odkazu zvolit?
Při rozhodování mezi absolutním a relativním symbolickým odkazem je zasadní otázka, zda se bude odkaz přesouvat společně s cílem, nebo samostatně.
Pokud se bude přesouvat spíše samostatně, je vhodnější absolutní symbolický odkaz, protože ten je možno volně přesouvat kamkoliv a stále bude odkazovat na stejný cíl. Tím pádem s ním i v grafických správcích souborů můžete zacházet víceméně jako se souborem samotným. Pokud by přece jen došlo k přesunutí či přejmenování cíle, je nutno všechny absolutní odkazy na cíl vyhledat a opravit.
Pokud se bude odkaz přesouvat spolu s cílem, což je typické pro „blízké“ odkazy a odkazy v rámci výměnných médií, je vhodnější relativní symbolický odkaz, protože ten v takových případech zůstane platný.
Pokud se bude přesouvat cíl, vytvořte zvláštní symbolický odkaz na adresář cíle a přes něj směrujte na cíl (bez následování) absolutní symbolické odkazy. Po přesunutí cíle pak bude stačit opravit pouze tento jeden odkaz a ostatní odkazy zůstanou platné beze změny.
Pevné odkazy se vyplácí spíš pro dočasné nebo technicky přesně vymezené účely, protože je u nich vždy riziko rozpojení a není snadné si toho všimnout. Většinou se rozpojí při kopírování, při ukládání do archivu nebo když nějaký program soubor smaže a ihned znovu vytvoří. Také se může stát, že původní soubor přejmenujete a místo něj vytvoříte pod původním názvem nový; v takovém případě zůstane pevný odkaz navázaný na původní soubor. K rozpojení také dojde, pokud soubor přesunete příkazem „mv“ přes hranici souborového systému a nazpět.
Asi nejužitečnější způsob využití pevných odkazů je, když příkazem „cp -Rld“ vytvoříte kopii adresářové struktury, v ní pak budete soubory volně přesouvat, mazat apod. a později s ní nahradíte původní adresářovou strukturu. Podobný postup můžete s určitými omezeními použít k napodobnení klonů pododdílů btrfs.
Pevné odkazy se také vyplatí pro různé dočasné účely, kdy mohou být jejich technické vlastnosti výhodné. Vždy je ale třeba mít na paměti riziko rozpojení.
8. Další zdroje informací
- Wikipedie: Symbolický odkaz
- Wikipedie: Pevný odkaz
- YouTube: MicroNuggets: Hard Links versus Soft Links Explained (anglicky)
- LBRY: Chris Titus Tech: Symbolic Links in Linux (anglicky)
- man readlink (anglicky)
- man realpath (anglicky)
- man ln (anglicky)
- YouTube: BeginLinux Guru: Hard Links and Symbolic Links (anglicky)
9. Zákulisí kapitoly
V této verzi kapitoly chybí:
- nic
Tato kapitola záměrně nepokrývá:
- nic