Jaký je rozdíl mezi pevným a symbolickým odkazem?

448

Jak název říká, chtěl bych poznat rozdíl mezi pevným odkazem a měkkým odkazem vytvořeným příkazemln. Příkazman ln poskytuje informace, ale nedostatečně odpovídá na mou otázku.

Také by bylo hezké, kdyby někdo mohl poskytnout prostředí, kde by bylo možné dát více než symbolický odkaz.

    
dané ste_kwr 29.02.2012 10:03

10 odpovědí

33

V Linuxu / Unixu jsou zkratky známé jako odkazy

Odkazy jsou dva typy: měkké odkazy (symbolické odkazy) nebo pevné odkazy.

  1. Soft Links (symbolické odkazy)

    Můžete vytvářet odkazy na soubory a adresáře a vytvářet odkazy (zkratky) na různých oddílech as jiným inode číslem od původního.

    Pokud je odstraněna kopie skutečné , odkaz nebude fungovat .

  2. Pevné odkazy

    Pevné odkazy jsou pouze pro soubory; nemůžete propojit soubor na jiném oddílu s jiným číslem inode.

    Pokud bude odstraněna kopie skutečné , bude odkaz fungovat , protože přistupuje k podkladovým datům, ke kterým byla skutečná kopie přístupná.

Otázka: Jak vytvořím měkké spojení?

Odpověď: Je možné vytvořit měkké spojení sln -s; nejprve musíte definovat zdroj a pak musíte definovat cíl. (Nezapomeňte, že je třeba definovat úplné cesty zdroje a cíle, jinak to nebude fungovat.)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

Jak můžete vidět, že má jiný inode a může být vytvořen na jiném oddílu.

Otázka: Jak mohu vytvořit Tvrdý odkaz?

Odpověď: Je možné vytvořit pevný odkaz sln; nejprve musíte definovat zdroj a pak musíte definovat cíl. (Mějte na paměti, že musíte definovat úplnou cestu jak zdroje, tak cíle, jinak to nebude fungovat.)

Řekněme, že mám skript v adresáři/script s názvemfirefox.

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

Jak vidíte, má stejný inode. Pokud odstraním původní soubor, bude odkaz fungovat a bude fungovat jako původní.

Zkontroluji výše, že odkaz funguje, a pak odstraňte původní skript firefoxu.

Jste otázka: Bylo by hezké, kdyby někdo mohl poskytnout prostředí, kde by odkaz na odkaz mohl být lepší než symbolický odkaz.

Odpovědět : V závislosti na rozložení diskových oddílů má Hard Links omezení, že musí být na stejném oddílu (-1 bod) a může odkazovat pouze na soubory (-1 bod) ), ale bod +1 , pokud je původní dokument odstraněn, bude odkaz fungovat a funguje jako původní.

Na druhou stranu měkké spojení může odkazovat na adresáře nebo soubory (bod +1) a neexistuje žádné omezení oddílu (bod +1), ale (- 1 bod) , pokud zdroj odstraněno nebude odkaz fungovat.

    
odpověděl Qasim 09.05.2013 02:42
315

Hardlink není ukazatel souboru, je to adresářový záznam (soubor), který ukazuje na stejný inode. Dokonce i když změníte název jiného souboru, pevný odkaz stále odkazuje na soubor. Pokud nahradíte jiný soubor novou verzí (jeho kopírováním), hardwarový odkaz nebude odkazovat na nový soubor. Ve stejném souborovém systému můžete mít pouze hardlinky. S hardlinky nemáte koncept původních souborů a odkazů, jsou všechny stejné (mysli na to jako na odkaz na objekt). Je to koncept velmi nízké úrovně.

Na druhou stranu symbolický odkaz skutečně směřuje na jinou cestu (název souboru); to řeší název souboru při každém přístupu přes symbolický odkaz. Pokud soubor přesunete, symbolický odkaz nebude následovat. Pokud soubor nahradíte jiným, zachováním jména, symbolický odkaz bude odkazovat na nový soubor. Symlinkové soubory mohou zahrnovat souborové systémy. Pomocí symbolických odkazů máte velmi jasné rozlišení mezi skutečným souborem a symbolem, který neukládá žádné informace vedle cesty k souboru, na který odkazuje.

    
odpověděl vartec 18.05.2011 11:51
294

"Snímek stojí za tisíc slov."

A, "Příklad stojí za sto odstavců ..."

Vytvořte dva soubory:

$ touch blah1   
$ touch blah2

Do nich zadejte některé údaje:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

A podle očekávání:

$cat blah1; cat blah2
Cat
Dog

Vytvořme tvrdé a měkké odkazy:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Zjistíme, co se právě stalo:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Změna názvu blah1 nezáleží:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard odkazuje na inode, obsah souboru - to se nezměnilo.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

Obsah souboru nebyl nalezen, protože měkké spojení odkazuje na jméno, které bylo změněno, a nikoli na obsah.
Podobně, pokud je blah1 odstraněn, blah1-hard stále drží obsah; pokud je blah2 smazán, blah2-soft je jen odkaz na neexistující soubor.

zdroj: neopatrně zkopíruje to z StackOverflow!

    
odpověděl ABcDexter 21.07.2016 09:33
87

Oba ukazují na soubory; rozdíl je druh ukazatele. Symbolický odkaz odkazuje na jiný soubor podle jména . Má bit zvláštního režimu, který ji identifikuje jako symbolický odkaz a jeho obsah je název skutečného souboru. Protože obsahuje jen název, nesmí název skutečně existovat nebo může existovat v jiném souborovém systému. Pokud nahradíte jmenovaný soubor (změňte jeho obsah bez ovlivnění jeho jména), pak odkaz stále obsahuje stejný název, a tak nyní odkazuje na nový soubor. Můžete snadno identifikovat symbolické spojení a zobrazit název souboru, na který odkazuje.

Hard link odkazuje na soubor podle inode čísla. Jako takové se tvrdé odkazy neliší od prvního názvu souboru. Neexistuje žádný "skutečný" název vs. název pevného odkazu; všechny pevné odkazy jsou stejně platné názvy souboru. Z tohoto důvodu musí soubor, na který odkazujete, skutečně existovat a být ve stejném souborovém systému, kde se pokoušíte vytvořit odkaz. Pokud odstraníte původní název, pevný odkaz stále odkazuje na stejný soubor. Vzhledem k tomu, že všechny pevné odkazy mají stejný název souboru, nemůžete se na něj podívat a vidět jiná jména souboru; Chcete-li najít toto, musíte se podívat na každý soubor a porovnat jeho inode číslo najít jiné jména, které mají stejné číslo inode.

Můžete zjistit, kolik jména souboru má z výstupuls -l. Prvním číslem po režimu souborů je počet odkazů. Soubor s více než 1 odkazem má někde jiný název a naopak soubor s počtem odkazů pouze 1 nemá žádné jiné odkazy.

    
odpověděl psusi 18.05.2011 17:23
57

Hardlink může pracovat pouze na stejném souborovém systému, je to jednoduše jiný název pro stejný inode (soubory jsou interně odkazovány inodes). Soubor bude smazán pouze z disku, pokud je poslední odkaz na jeho inode pryč (% ko_kde% d neborm d poslední odkaz). Hardlinky obvykle pracují pouze pro soubory, nikoliv pro adresáře.

Symbolický odkaz (symbolický odkaz) je speciální soubor obsahující cestu k jinému souboru. Tato cesta může být absolutní nebo relativní. symlinky mohou pracovat napříč systémy souborů a dokonce mohou směřovat k různým souborům, například když odpojíte externí pevný disk a nahradíte ho jiným, který má jiný soubor na stejné cestě. Symbolický odkaz může odkazovat na soubory nebo adresáře.

    
odpověděl knittl 29.02.2012 10:20
20

Jedna z odpovědí z druhého podprocesu (nyní propojená v horní části příspěvku) uvádí tuto stránku což považuji za poměrně dobré vysvětlení na střední úrovni. Pokud se ztratíte v ascii, je zde tl; dr version:

  • Standardní soubory jsou ukazatelem z souborového systému do inodu, který následně odkazuje na fyzická data. Součást souboru ukládá odkaz na souborový systém (v podstatě jeho cestu) a odkaz na inode.
  • Tvrdé odkazy jsou jako soubory. Jsou to jen další ukazatel přímo na inode.
  • Symbolické odkazy jsou samostatné soubory (včetně samostatných inode a dat), které ukládají cestu k souborovému systému do souboru.

Jádro a souborové systémy zahrnují vše transparentně.

Takže na tom:

  • Tvrdé odkazy umožňují pouze propojení se systémem souborů. Symlinkové odkazy mohou ukazovat libovolnou cestu.
  • Tvrdé vazby (v podstatě) ukazují na absolutní data. Symboly odkazují na relativní cesty (např.% Co_kde%)
  • Pokud jste přesunuli cílový ukazatel pevného odkazu (který, pamatujte, sám je v podstatě jen hard-link směřující k inode), hard-link stále funguje. Přesunutí cíle symbolického odkazu by obvykle znamenalo zlomení symbolického odkazu.
  • Řešení pevného spojení by bylo rychlejší, ale nesmírně tak. Taková nepatrná část rychlosti přichází za cenu nepružného souborového systému.

Mohl jsem se trochu zmást, ale četl jsem různé věci, snažím se najít rozdíl mezi standardním souborem a hardlinkem. Způsob, jakým jsem četl, je, že každý soubor se skládá z hardlinku (ukládání názvu souboru), který odkazuje na inod, který ukazuje na fyzická data.

Přidání hardwaru pouze poskytuje inodu s dalším ukazatelem založeným na souborovém systému. Je to tak?

    
odpověděl Oli 18.05.2011 17:10
15

Kdy použít Soft Link:

Propojení mezi souborovými systémy: Chcete-li propojit soubory v systémech souborů, můžete používat pouze symbolické odkazy / softwarové odkazy.

Odkazy na adresář: Pokud chcete propojit adresáře, musíte používat měkké odkazy, protože nemůžete vytvořit pevný odkaz do adresáře.

Kdy použít Hard Link:

Úložný prostor: Pevné linky mají zanedbatelné množství prostoru, protože při vytváření pevných vazeb nejsou vytvořeny žádné nové inody. V měkkých linkách vytvoříme soubor, který spotřebovává prostor (obvykle 4 kB, v závislosti na souborovém systému)

Výkonnost: Výkonnost bude o něco lepší při přístupu k pevnému odkazu, protože přímo přistupujete k ukazateli na disk, místo aby prošel jiným souborem. Přesunutí umístění souboru: Pokud přesunete zdrojový soubor na jiné místo ve stejném souborovém systému, bude pevný odkaz stále fungovat, ale softwarové propojení selže.

Redundance: Chcete-li zajistit bezpečnost dat, měli byste používat pevný odkaz, stejně jako u pevného propojení, data jsou bezpečná, dokud nebudou odstraněny všechny odkazy na soubory namísto softwarového odkazu, ztratíte-li data, bude-li hlavní instance souboru smazána.

    
odpověděl Osama 07.09.2014 01:48
7

Nastane zmatek, když se pokusíte najít rozdíl mezi "názvem souboru" a pevným odkazem, protože neexistuje žádný.

Každý vytvořený soubor se skládá z dat na disku a pevného odkazu - což je název souboru v adresáři a ukazatel dat na disku. Konec příběhu. Když je poslední (nebo pouze) tvrdý odkaz odstraněn, pak systém OS ví, že data již nejsou potřebná.

Z toho vidíte, že skutečná data nejsou nikdy smazána, jsou pouze pevnými linkami. A když je na disku dostatečně přeplněný, mohou být data přepsána jinými daty. Do té doby mohou být data z odstraněného souboru obnovena, ale je to těžké najít bez pevného odkazu.

Symboly odkazů, jak již bylo vysvětleno, vám jednoduše říkají, že "ve složce s názvem<targetname> je soubor s názvem<targetfolder>". Ukazují na pevný spoj. Nevědí, kde jsou data. Tvrdý odkaz to ví.

    
odpověděl Gonesoft 01.03.2015 12:28
3

Vynikající vysvětlení noob a ex-Windoze - přátelské a Nejčastější dotazy si prohlédněte tuto stránku Odkaz . Jejich omezení autorská práva mi brání v získávání úryvků z jejich obsahu, takže stačí, že zde odkaz uvedu.

Jedná se o můj druhý nebo dokonce třetí pokus o uchopení enigmy soft / hard-link, vždy házení ručníku a odložení mého chápání na nějaký neurčitý časový okamžik v budoucnu - jakmile vysvětlení a man-stránky dostat se hluboce kernely a over-technický s inodes a všechny ...

Vychutnejte si!

    
odpověděl nutty about natty 10.02.2013 17:03
0

Je to velmi jednoduché. Soubory (a adresáře!) Jsou uloženy na adresách blokového zařízení (HDD nebo cokoli jiného). Normálně máte na adresu uvedeno jediné jméno, a tak získáte svůj soubor. tvrdý odkaz je druhý, třetí a další název mapovaný na stejnou adresu. symbolický odkaz namísto toho odkazuje na symbol - název - a to je druhé jméno namapované na první jméno. Co se týče jádra, po čtení cílového symbolického odkazu se zastaví a vrátí se na začátek s cílovou hodnotou jako názvem souboru (více či méně), takže relativní symbolické odkazy jsou možné, ale divoce neopravitelné. Cílový název se nepoužívá nad úrovní systému souborů, s výjimkou případů, kdy je explicitně dotazován v kódu uživatelského prostoru.

    
odpověděl Jim Driscoll 03.07.2016 17:39