Zdravím vás opět. V tomto úvodu do problematiky pevných a symbolických odkazů se nejprve pokusíme naučit a definovat, co který z nich znamená. Poté probereme, jaké jsou mezi nimi rozdíly.
Co je to tedy pevný odkaz a k čemu přesně v shellu slouží?
Pevný odkaz je pouze dodatečné jméno pro existující soubor v systému Linux nebo jiných operačních systémech podobných Unixu.
Pro libovolný soubor lze vytvořit libovolný počet pevných odkazů, a tedy i libovolný počet jmen. Tvrdé odkazy lze vytvářet i na jiné tvrdé odkazy. Nelze je však vytvářet pro adresáře a nemohou překračovat hranice souborového systému ani se rozprostírat mezi oddíly.
Snad nejužitečnějším použitím pevných odkazů je umožnit snadný přístup k souborům, programům a skriptům (tj. krátkým programům) v jiném adresáři, než je původní soubor nebo spustitelný soubor (tj. verze programu připravená ke spuštění). Zadání názvu pevného odkazu způsobí spuštění programu nebo skriptu stejným způsobem jako při použití jeho původního názvu. (http://www.linfo.org/hard_link.html)
Chcete si tento příběh přečíst později? Uložte si ho do Deníku.
Co tedy tato definice ve skutečnosti znamená? No, můžete vytvořit pevný odkaz na existující soubor pomocí příkazu ln název_souboru pevný odkaz. Níže uvádím příklad vytvoření tvrdého odkazu v akci. V níže uvedeném příkladu jsem vytvořil pevný odkaz alias zástupce na soubor s názvem soubor1 pomocí pevného odkazu s názvem hlink1.
Nyní pojďme ls -i
. Tak, aby vypsal všechny soubory s inode.
INODE Definice: Inode je datová struktura v souborovém systému unixového typu, která popisuje objekt souborového systému, například soubor nebo adresář. Každý inode uchovává atributy a umístění diskových bloků dat objektu. Atributy objektů souborového systému mohou zahrnovat metadata (časy poslední změny, přístupu, modifikace) a také údaje o vlastníkovi a oprávnění.
Adresáře jsou seznamy jmen přiřazených inodům. Adresář obsahuje záznam pro sebe, svého rodiče a každého ze svých potomků. (https://en.wikipedia.org/wiki/Inode)
Podíváte-li se na soubor1 a hlink1, můžete si prohlédnout, že inody na levé straně jsou stejné. Tvrdé odkazy v podstatě fungují jako zástupce toho souboru, který je pevně propojen.
Nyní přejdeme k „měkkým odkazům“
Měkký odkaz je zvláštní druh souboru, který odkazuje na jiný soubor, podobně jako zástupce. Na rozdíl od pevného odkazu neobsahuje symbolický odkaz data v cílovém souboru. Pouze odkazuje na jinou položku někde v souborovém systému. Tento rozdíl dává symbolickým odkazům určité vlastnosti, které pevné odkazy nemají, například možnost odkazovat na adresáře nebo na soubory ve vzdálených počítačích připojených k síti prostřednictvím systému NFS. Také při odstranění cílového souboru se symbolické odkazy na tento soubor stanou nepoužitelnými, zatímco pevné odkazy obsah souboru zachovají. (https://kb.iu.edu/d/abbe)
Nyní vytvoříme měkký odkaz pro porovnání s tvrdým odkazem, který jsme vytvořili výše.
Otevřeme tedy terminál. Jděte do vyhledávače nebo do hledání a zadejte terminál, měl by se objevit, klikněte na něj a otevřete ho.
Pro náš příklad nejprve vytvoříme soubor. Pokud zadáme touch example1
stiskneme enter. Můžeme vytvořit soubor. Nyní vytvoříme měkký odkaz.
Pokud zadáme do shellu ln -s example1 softlink1
, vytvoříme měkký odkaz mezi soubory. Viz příklad níže.
Nyní, pokud bychom zadali ls -i
, si také všimneme, že pouze soubor hardlink má stejný inode jako hardlink, zatímco soubor softlink má jiné inody.
jaké jsou rozdíly mezi tvrdými a měkkými odkazy
Měkký odkaz neobsahuje data v cílovém souboru.
Měkký odkaz odkazuje na jinou položku někde v souborovém systému.
Měkký odkaz má možnost odkazovat na adresáře nebo na soubory na vzdálených počítačích připojených do sítě prostřednictvím systému NFS.
Smazáním cílového souboru symbolického odkazu se tento odkaz stane nepoužitelným.
Tvrdý odkaz zachovává obsah souboru.
Tvrdý odkaz nelze vytvořit pro adresáře a nemůže překračovat hranice souborového systému ani se rozprostírat mezi oddíly.
V případě tvrdého odkazu lze použít libovolný z vytvořených názvů tvrdého odkazu ke spuštění programu nebo skriptu stejným způsobem jako původní uvedený název.
V podstatě:
„Pod souborovým systémem jsou soubory reprezentovány inody
Soubor v souborovém systému je v podstatě odkaz na inod.
Tvrdý odkaz pak pouze vytvoří další soubor s odkazem na stejný základní inod.Při odstranění souboru se odstraní jeden odkaz na základní inod. Inode je odstraněn (nebo odstranitelný/přepisovatelný) teprve tehdy, když jsou odstraněny všechny odkazy na inode.
Symbolický odkaz je odkaz na jiné jméno v souborovém systému.
Jakmile je vytvořen pevný odkaz, je odkaz na inode. odstranění přejmenování nebo přesun původního souboru neovlivní pevný odkaz, protože odkazuje na základní inode. Jakékoli změny dat v inodu se projeví ve všech souborech, které na tento inod odkazují.
Poznámka: Pevné odkazy jsou platné pouze v rámci stejného souborového systému. Symbolické odkazy mohou přesahovat souborové systémy, protože jsou jednoduše názvem jiného souboru.“
(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)
Prozkoumání shellu a způsobu provádění příkazu
- Shell čte svůj vstup ze souboru, z řetězce nebo z terminálu uživatele.
- Vstup je rozdělen na slova a operátory, přičemž se řídí pravidly uvozovek. Tyto tokeny jsou odděleny metaznaky. Provádí se expanze aliasů.
- Pouzdro analyzuje (analyzuje a nahrazuje) tokeny do jednoduchých a složených příkazů.
- Pouzdro provádí různé expanze shellu, rozkládá expandované tokeny na seznamy jmen souborů a příkazů a argumentů.
- V případě potřeby se provede přesměrování, operátory přesměrování a jejich operandy se odstraní ze seznamu argumentů.
- Příkazy se provedou.
- Případně shell počká na dokončení příkazu a shromáždí stav ukončení.
.