Mi az a hard link? — A Linux Információs Projekt (LINFO) definíciója

A hard link csupán egy kiegészítő név egy létező fájlhoz Linuxon vagy más Unix-szerű operációs rendszereken.

Minden fájlhoz tetszőleges számú hard link, és így tetszőleges számú név hozható létre. Kemény hivatkozások más kemény hivatkozásokhoz is létrehozhatók. Könyvtárakhoz azonban nem hozhatók létre, és nem léphetnek át fájlrendszerhatárokat vagy partíciókat.

Az operációs rendszer nem tesz különbséget a fájlhoz az első létrehozásakor eredetileg hozzárendelt név és a fájlhoz később létrehozott hard linkek között, kivéve, hogy ezek csupán több nevet jelentenek ugyanannak a fájlnak. Ez azért van így, mert az eredeti név és a hard linkek mind ugyanarra az inode-ra mutatnak. Az inode egy olyan adatstruktúra (azaz az információk tárolásának optimalizált módja), amely a fájl nevén (nevein) és tényleges adatain kívül minden információt tárol egy fájlról (pl. méretét, hozzáférési engedélyeit, létrehozásának időpontját és helyét a rendszerben). Az a tény, hogy az inode számok csak egy adott fájlrendszeren belül egyediek, az oka annak, hogy nem működnek fájlrendszerek és partíciók között.

A kemény hivatkozások az ln paranccsal jönnek létre. Például a következő parancs létrehoz egy hlink1 nevű hard linket egy file1 nevű fájlhoz, mindkettő az aktuális könyvtárban (azaz abban a könyvtárban, amelyben a felhasználó éppen dolgozik):

ln file1 hlink1

A hard link létrehozásakor nincs nyilvánvaló jele annak, hogy az különbözik bármely más fájltól. Vagyis a hard linkek ugyanolyan típusú fájloknak tűnnek, mint a célfájljaik (azaz a fájlok, amelyekhez kapcsolódnak), amikor olyan parancsokkal nézzük őket, mint az ls (azaz lista) és a file (amely bármely megadott fájl típusának meghatározására szolgál). Hasonlóképpen, ha egy GUI-ban (grafikus felhasználói felület) nézzük, a hard linkek ikonjai megegyeznek a célfájlok ikonjaival.

Az, hogy egy fájl eredeti neve és a fájlra mutató hard linkek mindegyike ugyanazt az inode-ot használja, egyértelműen látható az ls parancs -i (azaz inode) opciójával. Így például a következőkből kiderül, hogy a fenti példában szereplő file1 és hlink1 inode-számai megegyeznek:

ls -i file1 hlink1

A bármely fájlhoz tartozó hard linkek száma az ls parancs -l (azaz hosszú) opcióval történő használatával előállított kimenet második oszlopában látható. Látható, hogy a szám a célfájl és az arra mutató hard linkek összege (azaz, a kezdeti név és a később hozzáadott nevek összege), és hogy ez ugyanaz a célfájlra és minden egyes ilyen hivatkozásra.

A kemény linkkel rendelkező fájlok úgy is megtalálhatók, hogy a find parancsot a -type f kapcsolóval (csak a szabályos fájlok kiválasztásához), majd a -links +1 kapcsolóval (az összes olyan szabályos fájl megjelenítéséhez, amelyhez egynél több kemény link tartozik) használjuk a következőképpen:

find -type f -links +1

Az állomány tartalmának megváltoztatásakor az összes kemény linkhez tartozó link megmarad. Egyes szövegszerkesztők azonban megszakíthatják a kapcsolatot azáltal, hogy új inode-ot hoznak létre a módosított tartalomhoz,1 ezért a fájlok módosítása után célszerű lehet ellenőrizni a fontos hivatkozásokat.

A rm parancs felületesen úgy tűnik, hogy fájlok eltávolítására vagy törlésére szolgál. Valójában azonban csak annyit tesz, hogy eggyel csökkenti a fájl hard linkjeinek számát (azaz a fájl neveinek számát), és nem érinti közvetlenül az inode-ot vagy a fájl adatait. Amikor a szám eléri a nullát, úgy tűnik, hogy a fájl eltűnt, mert már nem lehet rá könnyen hivatkozni. A fájl adatai azonban csak akkor törlődnek valóban, ha a merevlemez-meghajtón (HDD) vagy más adathordozón található hely(ek)et, ahol a fájl található, egy új fájl felülírja.

Így például a következőkkel eltávolítható a fenti példában létrehozott hlink1 merevlemezes hivatkozás:

rm hlink1

Az rm ismételt használata az egyetlen megmaradt névvel az alábbiak szerint gyakorlatilag hozzáférhetetlenné teszi a fájl adatait:

rm file1

A hard linkek talán leghasznosabb alkalmazása az, hogy a fájlok, programok és szkriptek (i.azaz rövid programok) könnyen elérhetővé váljanak az eredeti fájltól vagy futtatható fájltól eltérő könyvtárban (ill, a program futtatásra kész változata). A hardlink nevének beírásával a program vagy szkript ugyanúgy végrehajtódik, mint az eredeti nevének használatával.

A szimbolikus linkek, más néven lágy linkek hasznosabbak, mint a kemény linkek, mivel könyvtárakhoz, valamint különböző fájlrendszerekben és különböző partíciókon lévő fájlokhoz is készíthetők. Ráadásul a GUI használatakor a szimbolikus linkek speciális ikonokkal rendelkeznek, amelyek azonnal azonosítják őket, hogy linkek, nem pedig közönséges fájlok. Hátrányuk azonban, hogy használhatatlanná válnak, ha a célfájlt törlik.

Az aliasok felületesen hasonlítanak a hard linkekhez, mivel egy másik módja annak, hogy bármely fájlnak több nevet adjunk. Az alias parancs azonban a héjba (azaz a csak szöveges felhasználói felületet biztosító programba) van beépítve, nem pedig egy különálló program, és a mechanizmusa nagyon különbözik a hard linkekétől. A szimbolikus linkekhez hasonlóan az aliasok nemcsak fájlokra, hanem könyvtárakra is használhatók, és átléphetik a fájlrendszer- és partícióhatárokat. Ezenkívül az alias bármely shell-szöveg rövid neveként használható (azaz parancs vagy összekapcsolt parancsok sorozata, beleértve a tbeir opciókat és/vagy argumentumokat is).

________
1A Red Hat Linux 9-en végzett tesztek szerint a kemény hivatkozások megszakadtak, amikor a gedit szövegszerkesztővel módosítottunk fájlokat. A vi és Abiword szövegszerkesztők, valamint a KHexEdit hexaszerkesztő használatakor azonban nem törtek meg ugyanezen a Linux-verzión. Az, hogy a gedit nem tudta megőrizni a kemény hivatkozásokat, annak volt köszönhető, hogy valójában egy másolatot készít a módosított fájlról, amelyet elment (és így az új inode számot), ahelyett, hogy az eredeti fájlon végezné el a változtatásokat, de ez a másolat az eredeti fájl nevét kapja. Azonban egy hasonló teszt a gedit újabb verziójával (2.14.0) a Fedora Core 5 rendszeren azt mutatta, hogy a problémát kijavították, és a linkek nem szakadtak meg.