it-swarm.dev

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

Jak název napovídá, rád bych poznal rozdíl mezi pevným a měkkým odkazem vytvořeným příkazem ln. Příkaz man ln poskytuje informace, ale dostatečně neodpovídá na moji otázku.

Také by bylo hezké, kdyby někdo mohl poskytnout nastavení, kde by pevné spojení mohlo být vhodnější než symbolické spojení.

501
ste_kwr

V systému Linux/Unix jsou zkratky známé jako odkazy


Odkazy jsou dvou typů: 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 a s jiným číslem inodu, než bylo původní.

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

  2. Pevné odkazy

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

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


Otázka: Jak mohu vytvořit měkký odkaz?

Odpověď: Pomocí ln -s; nejprve musíte definovat zdroj a poté musíte definovat cíl. (Mějte na paměti, že musíte definovat úplné cesty zdroje i 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 )

enter image description here

Jak vidíte, má jiný inode a lze jej vytvořit na jiném oddílu.


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

Odpověď: Pevné propojení lze vytvořit pomocí ln; nejprve musíte definovat zdroj a poté musíte definovat cíl. (Mějte na paměti, že musíte definovat úplnou cestu zdroje i cíle, jinak to nebude fungovat.)

Řekněme, že v skriptu /script adresář s názvem firefox.

 ls -i # Shows you the inode
 5898242 firefox

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

enter image description here

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

enter image description here

Nahoře zkontroluji, že odkaz funguje, a poté odstraním původní skript firefox.


Otázka: Bylo by hezké, kdyby někdo mohl poskytnout nastavení, kde by pevný odkaz mohl být výhodnější než symbolický odkaz.

Odpověď: V závislosti na rozložení diskových oddílů mají pevné odkazy omezení, že musí být na stejném oddílu (-1 bod) a mohou odkazovat pouze na soubory (-1 bod) ), ale pokud je originál odstraněn, bude odkaz fungovat a bude fungovat jako originál (+1 bod).

Na druhou stranu soft link může ukazovat na adresáře nebo soubory (+1 bod) a neexistuje žádné omezení oddílů (+1 bod), ale pokud je zdroj smazán, odkaz nebude fungovat (-1 bod).

69
Qasim

"Obrázek stojí za tisíc slov." Pictorial representation


A „Příklad stojí za sto odstavců ...“

Vytvořte dva soubory:

$ touch blah1   
$ touch blah2

Zadejte do nich některá data:

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

A podle očekávání:

$cat blah1; cat blah2
Cat
Dog

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

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

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

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Změna jména blah1 nezáleží:

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

blah1-hard odkazuje na inode, obsah, soubor - 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 nelze najít, protože měkký odkaz ukazuje na název, který byl změněn, a nikoli na obsah.
Podobně, pokud je blah1 odstraněn, blah1-hard stále obsahuje obsah; Pokud je blah2 smazán, blah2-soft je jen odkaz na neexistující soubor.


zdroj: do očí bijící kopírování z StackOverflow!

330
ABcDexter

Pevný odkaz není ukazatelem na soubor, je to položka adresáře (soubor) směřující ke stejnému inodu. I když změníte název druhého souboru, pevný odkaz stále odkazuje na soubor. Pokud nahradíte jiný soubor novou verzí (zkopírováním), pevný odkaz nebude odkazovat na nový soubor. Hardwarové odkazy můžete mít pouze ve stejném souborovém systému. U pevných odkazů nemáte představu o původních souborech a odkazech, všechny jsou si rovny (pomyslete na to jako na odkaz na objekt). Je to koncept velmi nízké úrovně.

Na druhé straně symbolický odkaz ve skutečnosti ukazuje na jinou cestu (název souboru); řeší název souboru pokaždé, když k němu přistupujete přes symbolický odkaz. Pokud soubor přesunete, nebude odkazovat. Pokud soubor nahradíte jiným, ponecháte-li název, bude odkazovat na nový soubor. Symlinks mohou pokrývat souborové systémy. U symbolických odkazů máte velmi jasný rozdíl mezi skutečným souborem a symbolickým odkazem, který neukládá žádné informace vedle cesty k souboru, na který odkazuje.

328
vartec

Oba jsou ukazatele na soubory; rozdíl je druh ukazatele. Symbolický odkaz ukazuje na jiný soubor podle jména. Má bit ve zvláštním režimu, který jej identifikuje jako symbolický odkaz, a jeho obsahem je název skutečného souboru. Protože obsahuje pouze jméno, nemusí toto jméno ve skutečnosti existovat nebo může existovat v jiném souborovém systému. Pokud pojmenovaný soubor nahradíte (změníte jeho obsah, aniž by to mělo vliv na jeho název), pak odkaz stále obsahuje stejný název, takže nyní odkazuje na nový soubor. Můžete snadno identifikovat symbolický odkaz a vidět název souboru, na který odkazuje.

Pevný odkaz ukazuje na soubor podle čísla inode. Pevné odkazy se proto neliší od křestního jména souboru. Neexistuje žádné „skutečné“ jméno vs. název pevného odkazu; všechny pevné odkazy jsou stejně platné názvy souboru. Z tohoto důvodu musí soubor, ke kterému odkazujete, ve skutečnosti existovat a musí být ve stejném souborovém systému, ve kterém se pokoušíte vytvořit odkaz. Pokud původní název odstraníte, pevný odkaz stále odkazuje na stejný soubor. Protože všechny pevné odkazy jsou stejně platnými názvy pro soubor, nemůžete se na jeden podívat a vidět další názvy souboru; Chcete-li to najít, musíte se podívat na každý soubor a porovnat jejich číslo inodu, abyste našli další jména, která mají stejné číslo inodu.

Můžete určit, kolik jmen má soubor z výstupu ls -l. První číslo po režimu souboru je počet odkazů. Soubor s více než jedním odkazem má někde jiná jména a naopak, soubor s počtem odkazů pouze 1 nemá žádné (jiné) pevné odkazy.

88
psusi

Hardlink může fungovat pouze na stejném souborovém systému, je to prostě jiný název pro stejný inode (soubory jsou interně odkazovány pomocí inodes). Soubor bude z disku smazán pouze tehdy, když je poslední odkaz na jeho inode pryč (rmd nebo unlinkd poslední odkaz). Pevné odkazy obvykle fungují pouze pro soubory, nikoli 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í. Symlinks umí pracovat se systémy souborů a může dokonce ukazovat na různé soubory, pokud například odpojíte externí pevný disk a nahradíte jej jiným, který má jiný soubor na stejné cestě. Symbolický odkaz může odkazovat na soubory nebo adresáře.

58
knittl

Jedna z odpovědí z druhého vlákna (nyní propojeného z horní části vašeho příspěvku) zmiňuje tato stránka , což je podle mě docela dobré vysvětlení na střední úrovni. Pokud se ztratíte v umění ASCII, zde je verze tl; dr:

  • Standardní soubory jsou ukazatelem ze souborového systému na inode, který zase ukazuje na fyzická data. Komponenta souboru ukládá její odkaz na souborový systém (v podstatě jeho cestu) a odkaz na inode.
  • Pevné odkazy jsou jako soubory. Jsou to jen další ukazatel přímo na inode.
  • Symbolické odkazy jsou samostatné soubory (včetně samostatného inodu a dat), které ukládají cestu k souborovému systému.

Zapojené jádro a souborové systémy převádějí vše transparentně.

Na základě toho:

  • Pevné odkazy umožňují pouze propojení se stejným souborovým systémem. Symlinks mohou ukazovat na jakoukoli cestu.
  • Pevné odkazy (v podstatě) ukazují na absolutní data. Symlinks mohou ukazovat na relativní cesty (např. ../parent.file)
  • Rozšíření, pokud přesunete cílový ukazatel pevného odkazu (což, pamatujte, sám je v podstatě pouze pevný odkaz směřující na inode), pevný odkaz stále funguje. Přesunutí cíle symbolického odkazu obvykle symbolický odkaz poruší.
  • Řešení pevného spojení by bylo rychlejší, ale nezměrně tak. Tato nevýznamná část rychlosti přichází na úkor nepružného systému souborů.

Možná jsem se trochu zmátl, ale při čtení různých věcí se snažím najít rozdíl mezi standardním souborem a pevným odkazem. Způsob, jakým čtu, je, že každý soubor sestává z pevného odkazu (s uložením názvu souboru), který odkazuje na inode, který ukazuje na fyzická data.

Přidání pevného odkazu poskytuje pouze inode s dalším ukazatelem založeným na souborovém systému. Je to správně?

21
Oli

Kdy použít Soft Link:

Propojení přes souborové systémy: Pokud chcete propojit soubory přes souborové systémy, můžete použít pouze odkazy symlinks/soft.

Odkazy na adresář: Pokud chcete propojit adresáře, musíte použít Soft odkazy, protože nemůžete vytvořit pevný odkaz na adresář.

Kdy použít pevný odkaz:

Úložný prostor: Pevné odkazy zabírají velmi zanedbatelné množství místa, protože při vytváření pevných odkazů nevznikají žádné nové inody. V měkkých odkazech vytváříme soubor, který zabírá místo (obvykle 4 kB, v závislosti na souborovém systému)

Výkon: Výkon bude o něco lepší při přístupu na pevný odkaz, protože přímo přistupujete k ukazateli disku místo procházení 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, pevný odkaz bude stále fungovat, ale měkký odkaz se nezdaří.

Redundance: Pokud chcete zajistit bezpečnost svých dat, měli byste používat pevný odkaz, protože v pevném odkazu jsou data v bezpečí, dokud nebudou odstraněny všechny odkazy na soubory, namísto toho v měkkém odkazu ztratíte data, pokud je odstraněna hlavní instance souboru.

15
Osama

Zmatek nastane, když se pokusíte najít rozdíl mezi „názvem souboru“ a pevným odkazem, protože žádný neexistuje.

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

Z toho můžete vidět, že skutečná data se nikdy neodstraní, pouze pevné odkazy jsou. A když se na disku dostatečně zaplní, mohou se data přepsat údaji jiného souboru. Do té doby by mohla být data z odstraněného souboru obnovena, ale je to docela těžké najít bez pevného odkazu.

Symlinks, jak již bylo vysvětleno, vám jednoduše řekne „existuje soubor s názvem <targetname> ve složce s názvem <targetfolder> ". Poukazují na pevný odkaz. Neví, kde jsou data. Tvrdý odkaz to ví.

8
Gonesoft

Je to velmi jednoduché. Soubory (a adresáře!) Jsou uloženy na adresách na blokovém zařízení (HDD nebo cokoli). Obvykle máte jedno jméno namapováno na adresu, a tak získáte svůj soubor. pevné spojení je druhé, třetí atd. Jméno mapované na stejnou adresu. symbolický odkaz místo toho odkazuje na symbol - jméno - a tak je druhé jméno mapováno na křestní jméno. Pokud jde o jádro, jakmile přečte cíl symbolického odkazu, zastaví se a vrátí se na začátek s cílovou hodnotou jako název souboru (více či méně), takže relativní symbolické odkazy jsou možné, ale divoce neužitečné. Cílový název se nepoužívá nad úrovní souborového systému s výjimkou případů, kdy je v kódu uživatelského prostoru výslovně zadán dotaz.

0
Jim Driscoll