Május 10, 2017 – 5 min read

Hello there again. A kemény linkek és szimbolikus linkek bemutatásában először is megpróbáljuk megtanulni és definiálni, hogy mit jelentenek az egyes linkek. Ezután megbeszéljük, hogy mi a különbség a kettő között.

Mi az a hard link, és pontosan mit csinál a shellben?

A hard link csupán egy további név egy meglévő fájlhoz Linuxon vagy más Unix-szerű operációs rendszereken.

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

A hard linkek talán leghasznosabb alkalmazása az, hogy a fájlok, programok és szkriptek (azaz rövid programok) könnyen elérhetők legyenek egy másik könyvtárban, mint az eredeti fájl vagy futtatható fájl (azaz egy program futtatásra kész változata). A hardlink nevének beírásával a program vagy szkript ugyanúgy végrehajtódik, mintha az eredeti nevét használná. (http://www.linfo.org/hard_link.html)

Később szeretné elolvasni ezt a történetet? Mentsd el a Naplóban.

Szóval, mit is jelent valójában ez a definíció? Nos, hardlinket hozhatunk létre egy meglévő fájlhoz az ln file_név hardlink parancs segítségével. Az alábbiakban egy példát adtam a hard link létrehozására a gyakorlatban. Az alábbi példában létrehoztam egy hardlinket, azaz egy parancsikont a file1 nevű fájlhoz a hlink1 nevű hardlinkkel.

Legyen most ls -i. Így listázza az összes inode fájlokat.

INODE Definíció: Az inode egy adatszerkezet egy Unix-stílusú fájlrendszerben, amely egy fájlrendszer-objektumot, például egy fájlt vagy egy könyvtárat ír le. Minden inode tárolja az objektum adatainak attribútumait és a lemezblokkok helyét (helyeit). A fájlrendszer-objektum attribútumai tartalmazhatnak metaadatokat (utolsó módosítás, hozzáférés, módosítás időpontja), valamint tulajdonos- és jogosultsági adatokat.

A könyvtárak az inode-okhoz rendelt nevek listái. Egy könyvtár tartalmaz egy bejegyzést saját magáról, a szülőjéről és minden egyes gyermekéről. (https://en.wikipedia.org/wiki/Inode)

Ha megnézzük a file1-et és a hlink1-et, láthatjuk, hogy az inode a bal oldalon ugyanaz. Lényegében a hardlinkek a hardlinkelt fájl parancsikonjaként működnek.

Most továbblépve a “Softlinkek”

A softlinkek egy speciális fájlfajta, amely egy másik fájlra mutat, hasonlóan a parancsikonokhoz. A hard linkkel ellentétben a szimbolikus link nem tartalmazza a célfájl adatait. Egyszerűen csak egy másik bejegyzésre mutat valahol a fájlrendszerben. Ez a különbség olyan tulajdonságokkal ruházza fel a szimbolikus linkeket, amelyekkel a kemény linkek nem rendelkeznek, mint például a könyvtárakra vagy az NFS-en keresztül hálózatba kapcsolt távoli számítógépeken lévő fájlokra való hivatkozás képessége. Továbbá, ha töröl egy célfájlt, az adott fájlra mutató szimbolikus hivatkozások használhatatlanná válnak, míg a kemény hivatkozások megőrzik a fájl tartalmát. (https://kb.iu.edu/d/abbe)

Most hozzunk létre egy lágy linket, hogy összehasonlítsuk a fent létrehozott kemény linkkel.

Nyissunk tehát egy terminált. Menjünk a keresőbe vagy a keresőbe és írjuk be a terminál bevitelt, fel kell ugrania, kattintsunk rá és nyissuk meg.

Példánkhoz először hozzunk létre egy fájlt. Ha beírjuk, hogy touch example1 nyomjuk meg az Entert. Létre tudunk hozni egy fájlt. Most hozzuk létre a soft linket.

Ha beírjuk a shellbe ln -s example1 softlink1 létrehozunk egy soft linket a fájlok között. Lásd az alábbi példát.

softlink

Most ha beírnánk a ls -i-et, akkor azt is észrevehetjük, hogy csak a hardlink fájlnak ugyanaz az inode-ja, mint a hardlinknek, míg a softlink fájlnak más inode-ja van.

Mi a különbség a hard és soft linkek között?

A soft link nem tartalmazza a célfájlban lévő adatokat.

A lágy hivatkozás egy másik bejegyzésre mutat valahol a fájlrendszerben.

A lágy hivatkozás képes könyvtárakra, vagy NFS-en keresztül hálózatba kapcsolt távoli számítógépeken lévő fájlokra hivatkozni.

A szimbolikus link célfájljának törlése a linket használhatatlanná teszi.

A hardlink megőrzi a fájl tartalmát.

A hardlink nem hozható létre könyvtárakhoz, és nem lépheti át a fájlrendszer határait, illetve nem terjedhet át partíciókat.

A hardlinkben a létrehozott hardlink nevek bármelyikét használhatja egy program vagy szkript végrehajtásához ugyanúgy, mint az eredetileg megadott nevet.

A lényeg:

“A fájlrendszer alatt a fájlokat inode-ok reprezentálják

A fájlrendszerben egy fájl alapvetően egy inode-ra mutató link.
A hardlink ezután csak létrehoz egy másik fájlt, amely ugyanarra a mögöttes inode-ra mutató linkkel rendelkezik.

Mikor törölsz egy fájlt, eltávolít egy linket a mögöttes inode-hoz. Az inode csak akkor törlődik (vagy törölhető/felülírható), ha az inode-ra mutató összes linket törölték.

A szimbolikus link egy másik névre mutató link a fájlrendszerben.

Amikor egy hard link létrejött, a link az inode-ra mutat. az eredeti fájl törlése, átnevezése vagy áthelyezése nem befolyásolja a hard linket, mivel az az alapul szolgáló inode-ra mutat. Az inode-on lévő adatokban bekövetkezett bármilyen változás tükröződik az összes olyan fájlban, amely az adott inode-ra hivatkozik.

Figyelem: A hard linkek csak ugyanazon a fájlrendszeren belül érvényesek. A szimbolikus hivatkozások áthaladhatnak az állományrendszereken, mivel ezek egyszerűen egy másik állomány neve.”

(http://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link)

A Shell vizsgálata és a parancsok végrehajtása

  • A shell a bemenetet egy fájlból, egy karakterláncból vagy a felhasználó termináljáról olvassa.
  • A bemenetet szavakra és operátorokra bontja, az idézőjel-szabályoknak engedelmeskedve. Ezeket a tokeneket metakarakterek választják el egymástól. Alias kiterjesztés történik.
  • A shell elemzi (elemzi és helyettesíti) a tokeneket egyszerű és összetett parancsokká.
  • A shell különböző shell kiterjesztéseket végez, a kiterjesztett tokeneket fájlnevek és parancsok és argumentumok listájára bontja.
  • Az átirányítást szükség esetén elvégzi, az átirányítási operátorokat és operandusaikat eltávolítja az argumentumlistából.
  • A parancsok végrehajtása.
  • A shell opcionálisan megvárja a parancs befejezését és begyűjti a kilépési állapotot.

.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.