Mi a különbség a kemény kapcsolat és a szimbolikus kapcsolat között?

448

Ahogy a cím mondja, szeretném tudni a különbséget a kemény hivatkozás és aln parancs által létrehozott puha hivatkozás között. A (z)man ln parancs nem ad információt, de nem felel meg eléggé a kérdésemnek.

Szintén jó lenne, ha valaki megadhat egy olyan beállítást, ahol a szimbolikus link fölé lehet a kemény kapcsolat.

    
készlet ste_kwr 29.02.2012 10:03
forrás

10 válasz

33

Linux / Unix-ban a parancsikonok Linkek

néven ismertek

A link kétféle: lágy linkek (szimbolikus linkek) vagy kemény linkek.

  1. Lágyabb linkek (szimbolikus linkek)

    Létrehozhat fájlokat és könyvtárakat, és linkeket (parancsikonokat) hozhat létre a különböző partíciókra és egy másik inode számmal az eredetiből.

    Ha az valós másolat törlődik, a link nem fog működni .

  2. Kemény hivatkozások

    A kemény hivatkozások csak fájlok esetén; nem tudsz linkelni egy másik partícióval rendelkező fájlra más inode számmal.

    Ha az valós másolat törlődik, a link működni fog , mert hozzáfér a mögöttes adatokhoz, amelyekhez a valódi példány elérte.

Kérdés: Hogyan készíthetek lágy linket?

Válasz: Puha link lehet aln -s; először meg kell határoznia a forrást, majd meg kell határoznia a rendeltetési helyet. (Tartsa szem előtt, hogy meg kell határoznia a forrás és a rendeltetési hely teljes útvonalát, különben nem fog működni.)

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

Ahogy láthatja, van egy másik inode, és más partíción is elkészíthető.

Kérdés: Hogyan készíthetek Hard linket?

Válasz: Kemény link lehet aln; először meg kell határoznia a forrást, majd meg kell határoznia a rendeltetési helyet. (Tartsa szem előtt, hogy meg kell határoznia a forrás és a cél teljes elérési útját, különben nem fog működni.)

Tegyük fel, hogy van egy szkript a/script nevű könyvtárban, amely név:firefox.

 ls -i # Shows you the inode
 5898242 firefox

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

Ahogy látod, ugyanaz az inode. Ha törlöm az eredeti példányt, a link működni fog, és az eredeti példányként fog működni.

A fentiek közül ellenőrizem, hogy működik-e a link, majd törli az eredeti parancsfájlt.

Kérdés: Jó lenne, ha valaki megadhat egy olyan beállítást, ahol a kemény kapcsolat előnyös lehet egy szimbolikus linken.

Válasz : A lemezmegosztás elrendezésétől függően a Kemény hivatkozások a korlátozás, hogy azonos partíción legyen (-1 pont) és csak az (-1 pont) fájlokhoz kapcsolódhat, de +1 pont ha az eredeti törlésre kerül, akkor a kapcsolat működni fog, és úgy működik, mint az eredeti.

Másrészről egy puha hivatkozás utalhat a könyvtárakra vagy fájlokra (+1 pont), és nincs részleges korlátozás (+1 pont), de (- 1 pont) ha a forrás törölve a link nem fog működni.

    
válasz adott Qasim 09.05.2013 02:42
forrás
315

A hard link nem mutató a fájlnak, hanem egy könyvtárbejegyzés (egy fájl), amely ugyanarra az inódára mutat. Még akkor is, ha megváltoztatja a másik fájl nevét, a hard link még mindig a fájlra mutat. Ha a másik fájlt egy új verzióval kicseréli (másolással), akkor a hard link nem fog az új fájlra mutatni. Csak ugyanabban a fájlrendszerben lehet hardlinks. A hardlinks-kel nem rendelkezik az eredeti fájlok és linkek fogalmával, mindegyik egyenlő (gondoljon rá egy objektumra való hivatkozásként). Ez egy nagyon alacsony szintű koncepció.

Másrészt a szimbolikus link egy másik elérési utat (fájlnév) mutat; akkor a fájl nevét feloldja minden alkalommal, amikor a szimbolikus linken keresztül hozzáfér. Ha áthelyezi a fájlt, a symlink nem fog követni. Ha kicseréli a fájlt egy másikra, megtartja a nevet, a symlink hivatkozni fog az új fájlra. A szimbólumok képesek fájlrendszerekre. A szimbolikus linkekkel nagyon egyértelmű különbség van a tényleges fájl és a szimbolikus kapcsolat között, amely az elérési út melletti adatot nem tárolja.     

válasz adott vartec 18.05.2011 11:51
forrás
294

"A kép ezer szót ér."

p>

És, "Példa érdemes száz bekezdést ..."

Két fájl létrehozása:

$ touch blah1   
$ touch blah2

Adjon meg néhány adatot:

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

A várt módon:

$cat blah1; cat blah2
Cat
Dog

Készítsünk kemény és lágy linkeket:

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

Lássuk, mi történt:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

A blah1 nevének megváltoztatása nem számít:

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

blah1-kemény pont az inode-ra, a fájl tartalmára - ez nem változott.

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

A fájl tartalmát nem sikerült megtalálni, mert a puha hivatkozás a megváltoztatott névre mutat, és nem a tartalomra.
Hasonlóképpen, ha a blah1 törlésre kerül, a blah1-hard még mindig tartja a tartalmat; Ha a blah2 törlésre kerül, a blah2-soft csak egy nem létező fájlhoz kapcsolódik.

forrás: egyértelműen másolja a StackOverflow!

    
válasz adott ABcDexter 21.07.2016 09:33
forrás
87

Mindkettő fájlok mutatója; a különbség a mutató fajta . Egy szimbolikus hivatkozás egy másik névre pontra mutat. Van egy speciális mód bitje, amely szimbolikus linkként azonosítja, és annak tartalma a valódi fájl neve. Mivel csak egy nevet tartalmaz, ez a név valójában nem létezik, vagy létezhet egy másik fájlrendszeren. Ha a megnevezett fájlt kicseréli (megváltoztatja annak tartalmát anélkül, hogy befolyásolná a nevét), akkor a hivatkozás ugyanazt a nevet tartalmazza, és most már az új fájlra mutat. Könnyen azonosíthatja a szimbolikus linket, és megtekintheti annak a fájlnak a nevét, amelyre utal.

Egy kemény hivatkozás az inode számra mutat a fájlra. Mint ilyen, a kemény hivatkozások nem különböznek a fájlok első nevétől. Nincs "valódi" név vagy hard link név; minden kemény hivatkozás ugyanolyan érvényes nevek a fájlhoz. Emiatt a csatolandó fájlnak ténylegesen léteznie kell, és ugyanabban a fájlrendszerben kell lennie, amelyben megpróbálja létrehozni a hivatkozást. Ha törli az eredeti nevet, akkor a kemény hivatkozás még mindig ugyanarra a fájlra mutat. Mivel minden kemény kapcsolat egyformán érvényes a fájl nevére, nem tekinthet meg egy fájlt, és nem láthatja a fájl többi nevét; hogy megtalálja ezt, meg kell nézni minden fájlt, és hasonlítsa össze az inode számát, hogy megtalálja az azonos nevű inode számmal rendelkező többi nevet.

Megmondhatja, hogy hány neve van a fájlnak als -l kimenetéből. A fájl mód után az első szám a link szám. Az 1-nél több linket tartalmazó fájlnak valahol más neve van, és fordítva, csak 1-es linkszámmal rendelkező fájlnak nincs (más) kemény linkje.

    
válasz adott psusi 18.05.2011 17:23
forrás
57

A hardlink csak ugyanazon fájlrendszeren működhet, csak egy azonos nevű inode más neve (a fájlok belső hivatkozások az inodes-ban). A fájl csak akkor törlődik a lemezről, ha az utolsó inode-kapcsolat megszakadt (rm d vagyunlink d az utolsó hivatkozás). A hardlinks általában csak fájlok, nem pedig könyvtárak számára működik.

A symlink (szimbolikus link) egy speciális fájl, amely egy másik fájl elérési útját tartalmazza. Ez az út lehet abszolút vagy relatív. a szimbolikus kapcsolatok fájlrendszereken dolgozhatnak, és akár különböző fájlokra is mutathatnak, ha például kihúzza a külső merevlemezt, és kicseréli egy másikkal, amelynek ugyanazon az úton egy másik fájlja van. A szimbolikus hivatkozás akár fájlokra, akár könyvtárakra mutathat.

    
válasz adott knittl 29.02.2012 10:20
forrás
20

A másik téma egyik válaszából (amely most a tetején található) a ezt az oldalt említi

amely szerintem elég jó közepes szintű magyarázat. Ha elveszett az ascii művészetben, itt a tl; dr verzió:

  • A szabványos fájlok a fájlrendszertől az inode felé mutatnak, ami viszont fizikai adatokra mutat. A fájlösszetevő tárolja a fájlrendszerhez való kapcsolatot (lényegében annak elérési útját) és egy linket az inode-hoz.
  • Kemény hivatkozások, mint a fájlok. Ezek csak egy kiegészítő mutató közvetlenül egy inode-hoz.
  • A szimbolikus hivatkozások különálló fájlok (beleértve a különálló inode és adatokat is), amelyek tárolják a fájlrendszer fájl elérési útját.

A kernel és az érintett fájlrendszerek mindent transzparens módon lefordítanak.

Szóval ez alapján:

  • A hard-linkek csak az ugyanazon fájlrendszer-összeköttetést engedélyezik. A jelképek bármelyik elérési utat mutathatnak.
  • A kemény linkek (lényegében) az abszolút adatokra mutatnak. A szimbólumok mutathatnak relatív útvonalakat (pl.../parent.file)
  • Kiterjesztés esetén, ha áthelyezi a kemény hivatkozás célmutatóját (amely, emlékszik, maga lényegében csak egy kemény hivatkozás egy inódra mutat), akkor a kemény kapcsolat továbbra is működik. A symlink céljának áthelyezése általában megszünteti a symlinket.
  • A hard-link megoldása gyorsabb lenne, de mérhetetlenül. A sebességnek ez a jelentéktelen része egy rugalmatlan fájlrendszer költségén jön.

Lehet, hogy kicsit össze vagyok zavarodva, de különböző dolgokon keresztül olvastam, küzdök, hogy megtalálják a különbséget egy szabványos fájl és egy hard link között. Ahogy olvastam, minden fájl egy hardlinkből áll (a fájlnév tárolása), egy fizikai adatokra mutató inode-hoz kapcsolva.

A hardlink hozzáadása csak egy inode-t tartalmaz egy további fájlrendszer alapú mutatóval. Ez így van?

    
válasz adott Oli 18.05.2011 17:10
forrás
15

A Soft Link használata esetén:

Link fájlrendszereken keresztül: Ha fájlokat szeretne fájlrendszeren keresztül kapcsolni, akkor csak szimbolikus linkeket használhat.

Linkek a könyvtárba: Ha könyvtárakat szeretnénk összekapcsolni, akkor Soft linkeket kell használnunk, mivel nem tudunk kemény hivatkozást létrehozni egy könyvtárhoz.

A Hard Link használata:

Tárolóhely: A kemény csatlakozások nagyon elhanyagolható helyet foglalnak el, mivel nincsenek új inodesok, amelyeket kemény linkek létrehozásakor hoztak létre. A lágy linkekben olyan fájlt hozunk létre, amely helyet foglal el (általában 4KB a fájlrendszertől függően)

Teljesítmény: A teljesítmény kissé jobb lesz, ha hozzáférést kapsz egy kemény hivatkozáshoz, mivel közvetlenül a lemeztippet eléred, ahelyett, hogy egy másik fájlt átmennél. A fájl helyének áthelyezése: Ha a forrásfájlt ugyanazon fájlrendszer másik helyére helyezi át, akkor a hard link továbbra is működni fog, de a puha hivatkozás sikertelen lesz.

Redundancia: Ha meg akar bizonyosodni arról, hogy az adatok biztonsága, kemény linket kell használnia, mint a kemény hivatkozásnál, az adatok biztonságban vannak, amíg a hivatkozások a fájlokhoz nem törlődnek, akkor elveszti az adatokat, ha törli a fájl mesterfájlját.

    
válasz adott Osama 07.09.2014 01:48
forrás
7

A zűrzavar akkor jelenik meg, amikor megpróbálja megtalálni a különbséget a "fájlnév" és a "kemény" kapcsolat között, mert nincs.

Minden létrehozott fájl a lemezen található adatokból és egy kemény hivatkozásból áll - ez egy fájlnév a könyvtárban és a lemezen lévő adatok mutatója. Vége a történetnek. Ha az utolsó (vagy csak) kemény hivatkozást törli, az operációs rendszer tudja, hogy az adatok már nincsenek szükség.

Ebből látható, hogy a tényleges adatokat soha nem törlik, csak a kemény hivatkozásokat. És ha eléggé zsúfolt a lemezen, akkor az adatok felülírhatók egy másik fájl adataival. Addig a törölt fájlból származó adatok helyreállíthatók, de nehéz a kemény hivatkozás nélkül megtalálni.

A szimbólumokat, amint azt korábban elmagyaráztuk, egyszerűen azt mondják, hogy "létezik egy<targetname> nevű fájl a<targetfolder> nevű mappában". Rámutatnak a kemény kapcsolatra. Nem tudják, hol vannak az adatok. A kemény kapcsolat tudja ezt.

    
válasz adott Gonesoft 01.03.2015 12:28
forrás
3

Kiváló noob és ex-Windoze -user- barátságos magyarázat szép diagramokkal és egy GYIK nézze meg ezt az oldalt linket . A szerzői jogokra vonatkozó korlátozások megakadályozzák, hogy kivágják a cuccokat, ezért elég az, hogy itt adom meg a linket.

Ez a második vagy harmadik próbálkozás a puha / kemény összeköttetés enigma megragadására, mindig a törülközőbe dobása és a megértés elhalasztása a jövőben egy határozatlan időre - amint a magyarázatok és az emberi oldalak mélyen kerneled és over-technikai, inodes és minden ...

Enjoy!

    
válasz adott nutty about natty 10.02.2013 17:03
forrás
0

Nagyon egyszerű. A fájlokat (és a könyvtárakat!) A blokkeszközön (HDD vagy bármi) lévő címeken tárolják. Általában egy címre van leképezve egy cím, és így kapja meg a fájlt. A hard link a második, a harmadik, stb. Nevű név ugyanarra a címre van leképezve. A szimbolikus link a szimbólumra - a névre - utal, és így egy második név az első névre. Ami a rendszermagot illeti, miután elolvasta a szimbolikus link célt, megáll és visszatér a kezdethez a célértékhez, mivel a fájlnév (többé-kevésbé) olyan relatív szimbolikus linkek lehetségesek, de vadul nem támogatottak. A célnevet a fájlrendszer szintje felett nem használjuk, kivéve, ha explicit módon kérdezünk felhasználói kódot.

    
válasz adott Jim Driscoll 03.07.2016 17:39
forrás