Hard link

A Wikipédiából, a szabad enciklopédiából

A számítástechnikában a hard link egy hivatkozás vagy mutató egy adattároló eszközön elérhető adatra. A legtöbb fájlrendszerben az elnevezett fájlok hard linkek. A fájl neve csak egy címke, amely az operációs rendszer számára egy adatra utal. Ennek megfelelően ugyanazt az adatot több néven is jelölhetjük. Ez azt is okozza, hogy az adaton végrehajtott változtatások megmaradnak akkor is, ha a fájl új nevet kap a későbbiekben. Hard linkkel csak azonos fájlrendszerben létező adatra lehet hivatkozni.

Unix alatt hard link a link() rendszerhívás vagy az ln utasítás segítségével hozható létre.

Windows alatt a NTFSben az fsutil hardlink [1] (csak Windows XP), az mklink utasítással [2] (Windows Vista) vagy például a FAR Managerrel [3] hard linkelhetünk.

Az unlinking megszünteti a hard linket, vagyis szétválasztja a nevet az adattól. Az adat addig marad elérhető, amíg legalább egy link mutat rá, amikor minden linket eltávolítottunk az adat helye felszabadul Az úgy nevezett undeletinggel újra létrehozhatjuk a kapcsolatot, amit megszüntettünk. (Ez nem érhető el minden rendszeren, és gyakran nem elég megbízható.)

A hivatkozás számláló[szerkesztés | forrásszöveg szerkesztése]

A legtöbb hard linkeket támogató fájlrendszer hivatkozás számlálókat használ. Minden fizikai adattal együtt egy egész típusú érték kerül tárolásra, ami az adatra mutató linkek számával egyenlő. Új link létrehozásakor az érték eggyel nő, link törlésekor pedig eggyel csökken. Ez segíti a felhasználót az adatvesztés megakadályozásában; emellett ez a legegyszerűbb módja, hogy a fájlrendszer egy területének a telítettségét kövessük: a nulla érték üres helyet, míg a nullától különböző értékek használatban lévő területet jelölnek.

Unix operációs rendszer alatt egy fájl vagy könyvtár hivatkozásainak száma a stat() vagy fstat() rendszerhívásokkal kérdezhető le. A visszaadott stat struktúra st_nlink mezője tartalmazza a keresett értéket. Ennek ellenére azok a programozási nyelvek, amelyek hivatkozás számlálót használnak, csak ritkán fedik fel a számláló értékét az épp futó program számára.

Példa[szerkesztés | forrásszöveg szerkesztése]

Hard Link Illustration hu.svg

Az ábrán két fájl, LINK A.TXT és LINK B.TXT látható. Mindkét fájl ugyanarra a fizikai adatra mutat.

Ha a LINK A.TXT által hivatkozott fájlt megnyitjuk egy szövegszerkesztőben, módosítjuk majd elmentjük, akkor a változások a LINK B.TXT fájlban is láthatóvá válnak. Ugyanez lenne a helyzet, ha a fájlt LINK B.TXT-ként, vagy bármilyen, arra az adatra mutató fájlként módosítottuk volna.

További linkek is létrehozhatók az adathoz: a felhasználónak csak meg kell adnia egy létező link nevét - az operációs rendszer ez alapján már meg tudja állapítani a lemezen található adat helyét.

Ha eltávolítunk egy linket (például UNIX alatt az rm paranccsal), az adat továbbra is hozzáférhető marad a rá mutató, még létező linkeken keresztül. Ha az összes link törlésre kerül és egy folyamat sem tartja nyitva a fájlt, akkor a fájl által elfoglalt terület szabaddá válik, így azt később más fájlok vehetik használatba. Ez a megoldás lehetővé teszi használatban lévő fájlok törlését anélkül, hogy ez megzavarná a fájlt használó folyamatot. Ez nem lehetséges olyan fájlrendszereken, amik egy-az-egyhez kapcsolatot tartanak fönn a fájlnevek és az adatok között.

A hard linkek korlátozásai[szerkesztés | forrásszöveg szerkesztése]

Bizonyos esetekben a hard linkek nem bizonyulnak megfelelő megoldásnak. Mivel a link gyakorlatilag megyezik az adattal, amire mutat, nehézkessé válik olyan parancsok kiadása, mint "listázd ki rekurzívan egy adott könyvtár teljes tartalmát, de hagyd figyelmen kívül a linkeket". A legtöbb modern operációs rendszer tiltja a könyvtárakra mutató hard linkeket, megakadályozva ezzel az önmagába visszatérő végtelen rekurziót. (Fontos kivétel ezalól a Mac OS X 10.5 Leopard.) A hard linkek egy másik hátránya, hogy a linkeknek ugyanazon a fájlrendszeren kell elhelyezkedniük, míg manapság a nagy számítógépes rendszerek több fájlrendszert is alkalmaznak.

További információk[szerkesztés | forrásszöveg szerkesztése]