Bár szinte mindig csak soft linkeket használok, mégis nagyon zavart, hogy nem volt tiszta, mi is a pontos különbség a hard és soft link között, és hogy is működnek. Böngésztem sok oldalt, bőséges szöveges magyarázatokkal, de nehezen hámoztam ki a lényeget, pedig egyszerű. Végül lerajzoltam (a hard link egy újabb név az adott fájlra; a soft link a fájl nevére mutató név):
fájlok és linkek.png
Végül, néhány hasznos leírás:
What is hard link in Linux?
https://linuxhandbook.com/hard-link/
Hard links and soft links in Linux explained
https://www.redhat.com/en/blog/linking-linux-explained
Creating Symbolic and Hard Links
https://www.baeldung.com/linux/symbolic-and-hard-links
Van még további rengeteg szöveges leírás.
Hozzászólások
a hard link egy újabb név az adott fájlra
Beküldte lynx (nem ellenőrzött) -
Értékelés:
"a hard link egy újabb név az adott fájlra".
Azért ennél egy kicsit többről van szó.
Lehet más is a neve, de lehet ugyanaz. Amit adsz neki
Én inkább azt mondanám, hogy egy újabb mutató a fájlra.
Vegyünk egy konkrét példát:
Van a letöltések mappában egy film.mp4 fájl.
Készítesz erről az Asztalra egy hard linket.
Ott is lesz egy film.mp4 fájl.
(Ez nem teljesen korrekt megfogalmazás, de azt most hagyjuk)
A te elméleted szerint, hogy az csak egy új név, akkor megkérdezem, hogy mi történik, ha törlöd az egyik vagy másik fájlt?
Mivel alaposan utánanéztél, tudsz erre válaszolni?
Akármelyiket törlöd, a másik megmarad.
Ezért meg fognak kövezni, mert így nem igaz, de olyan, mintha egy másolatot készítettél volna az Asztalra.
De ha a fájl mondjuk 10 GB-os, akkor a másolat is elfoglalna 10 GB-ot a lemezen, míg a hard link nem.
Akkor se, ha ott is 10 GB-osnak látod a fájlt.
Talán ez sem helyes megfogalmazás, de a Letöltések mappában lévő film.mp4 is egy hard link, ami a fájl valódi helyére mutat a lemezen.
Mert azt csak mi gondoljuk úgy, hogy amikor letöltünk valamit, akkor megnyílik a Letöltések dosszié, és oda kerül a film.
A film valahol van a lemezen, és a hard linkje a Letöltések mappába kerül. Amiből készíthetsz egy másikat az Asztalra.
A szoft link egy parancsikon. Azt hiszem, ezt a fogalmat mindenki ismeri.
Ha törlöd, nem történik semmi, a fájl megmarad. De ha a fájl törlöd, a szoft linkkel nem mész sokra. Azt egyébként törött linknek fogja nyilvánítani a rendszer, mert nem mutat sehová.
Szoft link bárhol lehet, akár egy pendrájvon is, ami az Asztalon lévő filmre mutat.
Hard link viszont csak ugyanazon a fájlrendszeren, vagyis partíción lehet.
a hard link egy újabb név az adott fájlra
Beküldte Margarita -
Értékelés:
Nem mondom, hogy már értem, de közeledek hozzá.
a hard link egy újabb név az adott fájlra
Beküldte lynx (nem ellenőrzött) -
Értékelés:
Csinálj egy próbát, akkor érteni fogod.
Tölts le egy próbavideót YouTube-ról a Letöltések mappába film.mp4 néven.
ln ~/Letöltések/film.mp4 ~/Asztal/film.mp4
ln ~/Letöltések/film.mp4 ~/Asztal/Terminator.mp4
ln ~/Letöltések/film.mp4 ~/Videók/film.mp4
ln ~/Letöltések/film.mp4 ~/Videók/Terminator.mp4
Próbáld meg ezt újra:
ln ~/Letöltések/film.mp4 ~/Videók/Terminator.mp4
Aztán próbáld meg így:
ln ~/Letöltések/film.mp4 ~/Videók/Terminator2.mp4
Nézd meg, hogy mindegyik ugyanaz a film. Aztán kezd el törölni őket bármilyen sorrendben.
a hard link egy újabb név az adott fájlra
Beküldte T.István -
Értékelés:
Ez végül is helyes megfogalmazás, de igen, kontextusban kell érteni.
Fájl= logikailag egy csoportba tartozó adatok összessége. Ez nullákból és egyesekből van sorban akár több részletben felírva a lemezre.
És van egy adatbázis, amiben nyilván van tartva a fájl nevével, egyéb adatival (dátumok, attribútumok), a lemezre mutató címekkel, hogy mettől meddig tartanak a nullák és az egyesek, amik a lemezen vannak,esetleg hol vannak a hibajavító kódok, stb. Ennek az adatbázisnak még neve is van egyes fájlrendszerek esetén, optikai lemezeknél ez a TOC, FAT esetén ez a FAT (a fájlrendszer neve ugyanaz), mondjuk ext4 esetén konkrétan ilyen kitüntetett név nincs, ám egyfelől van egy leíró, ami felsorolja, hogy adott fájlrendszerek esetén a lemez első blokkja után mi meddig tart (tehát ezt nem a lemezen levő adatokból olvassa ki, hanem mintegy "fejből tudja") -ami persze így sem igaz, mert az /etc/mke2fs.conf -ból olvassa ki ezeket, ami végül is a rendszer lemezen van.
Azoknak a leíróknak amiket így beolvas a rendszer, és amik már a fájlokról szólnak, már van nevük, sorban : Superblock - Block Group Descriptor, Group Descriptor Table - Inode Bitmap - Block Bitmap - Inode Table - Extent Tree - Hash Tree - Journal -ezek mind adott területeket foglalnak el a lemezen ebben a sorrendben.
Mindezt csak azért említem, ha valaki azon agyalna, hogy hogy néz ki linux alatt az allokációs tábla. Még annyit hozzátennék, hogy FAT és TOC bejegyzéseknek van felső határa, azaz fix méretűek, adott számú bejegyzés lehet bennük. Míg pl. ext4 és hasonlók esetén a partíció méretéből van visszaszámolva (arányosítva) hogy mekkora az a terület ami a fájl leírókat tartalmazza, tehát az, hogy mondjuk mennyi 1 bájtos fájlod lehet, az függ attól is, hogy mekkora a partíció, mármint nem csak úgy hogy mennyi fér el fizikailag, hanem mennyi bejegyzés fér el a leírókba. Ezek az arányosítási tényezők vannak a /etc/mke2fs.conf -ban
No, a hard link az azt jelenti, hogy egy újabb rekord a táblába, ami ugyanarra a fájlra (lemez területre) mutat. (értelemszerűen ez adott partíción belül értendő)
Látszólag kettő fájlunk van, mármint kettő név, de az valójában csak egy. És az, hogy ez hogyan van kezelve, az már fájlrendszer függő, az arra vonatkozó szabályok, ill. beállítások írják le.
Btrfs deduplikáció: Ha ez be van kapcsolva, akkor, ha egy fájlról másolatot készítünk egy másik mappába, akkor az egy hard link lesz, nem lesz fizikailag kettő fájlunk. Módosítsuk az egyik fájlt. Ekkor majdnem kettő fájlunk lesz, azért majdnem, mert csak a módosított rész kerül mentésre, azt figyelembe véve mutatja a fájlrendszer az a fájlt, amit módosítottunk, a másik estében meg úgy, ahogy eredetileg is volt. Töröljük az egyik fájlt. Ekkor a hard link törlődik, csak egy bejegyzés lesz, amelyik a megmaradt rekordhoz tartozó adatokat mutatja.
Sikerült jól összezavarnom a dolgokat?
a hard link egy újabb név az adott fájlra
Beküldte Margarita -
Értékelés:
Nálam bekövetkezett az overflow.
Most egy újabb pár évig nem érdekel a téma. Majd egyszer, ha úgy érzem, szükségem van rá, megkeresem.
a hard link egy újabb név az adott fájlra
Beküldte lynx (nem ellenőrzött) -
Értékelés:
Mire lehet ezt használni, mi a gyakorlati haszna?
a hard link egy újabb név az adott fájlra
Beküldte Margarita -
Értékelés:
Egy program keres egy libet, ami olyan néven nincs benne a rendszerben. A meglevőhöz csináltam egy szoftlinket, olyan néven, amit a program keresett.
Ha mázlim volt (és volt), akkor a program elfogadta meglevőként az addig hiányolt libet, és vígan települt, működött.
A hardlinkbe ezek után nem akartam belebonyolódni, és a következő húsz évben sem tervezem.
A hardlinkbe nem akartam belebonyolódni...
Beküldte csuhas32 -
Értékelés:
Én se akartam belebonyolódni, pedig ez érdekes, sőt hasznos tudás lehet! Azt hiszem, nekem megvan, szóval neked ez nem lehet gond!
Van az /usr/share alatt egy lib.so, de azt a te alkalmazásod az amúgy létező /usr/pityipalko alatt keresi.
Csinál egy symlinket az /usr/share/lib.so fájl nevére. Ha a kiindulási fájlt átnevezed, törlöd, a symlink „eltörik”. Ezt ismerjük.
Készít egy hardlinket az /usr/share/lib.so nevű fájl mögött lévő tartalomra, csak más névvel. A lemezen egy fájlnyi helyet foglal. Amíg marad a tartalomra mutató bármilyen nevű fájl a másik(akat) akár törölheted is, hisz valójában csak a nevet törlöd ilyenkor. A mögöttes tartalom és a másik név (vagy nevek) érintetlen(ek) marad(nak).
Készít egy hardlinket az /usr/share/lib.so nevű fájl mögött lévő tartalomra, azonos névvel, de persze más helyre. A lemezen egy fájlnyi helyet foglal. Amíg marad a mögöttes tartalomra mutató másik fájl, a többit akár törölheted is bármikor...
Más helyre másolja a fájlt azonos névvel, a lemezen két fájlnyi helyet foglal, hiszen nem csak a név, hanem a háttértartalom is megduplázódik.
Átnevezi a fájlt, a lemezen egy fájlnyi helyet foglal, de az eredeti fájlt ezzel „elvesztetted” olyan értelemben, ha a rendszer az eredeti nevén keresi, úgy már nem fogja megtalálni. Hasonló a helyzet, ha azonos néven, de máshová mozgatod át, a rendszer, ha keresi az eredeti helyén, ott már nem találja.
Mivel jól megmagyaráztam, eddig lehet, hogy értetted, de most már tutira nem! :-D
Ahh, de jó volt ezt
Beküldte IG -
Értékelés:
Ahh, de jó volt ezt végigolvasni. Közelebb kerültem én is a témához. Nekem talán a "szoft link egy parancsikon" kapcsolta fel a villanyt. :D
Lám, lám, milyen sok gondolatot indított el a 2 link...
Beküldte balint -
Értékelés:
Azt gondoltam, a rajzom magáért beszél. De most hozzáteszek a rajzomhoz egy kicsi magyarázatot:
1. Áttekintés
Linuxos gépen létrehozhatunk linkeket (hivatkozásokat) egy meglévő fájlra. A link a Unixban mutatónak vagy fájlra való hivatkozásnak tekinthető. (Win terminológiával egy "parancsikon" a fájl elérésére). Annyi linket hozhatunk létre, amennyit csak akarunk.
2. Hard link
Bármely Unix alapú operációs rendszerben található fájl adatblokk(oka)t és inode-ot tartalmaz. Az adatblokkok a tényleges fájltartalmat tárolják. Az inode tárolja a fájlattribútumokat (a fájlnév kivételével) és a lemezblokk helyét.
A hard link csak egy olyan másik fájl, amely ugyanarra a mögöttes inode-ra mutat, mint az eredeti fájlnév. Így ugyanarra a fizikai fájlhelyre hivatkozik. De nem duplikálja meg az eredeti fájl inode-ját és tartalmát!
Az ln paranccsal hard linket hozhatunk létre:
$ ln eredetiFile eredetiFileHardLinkje
Ha a file-kezelőnkből töröljük a kettő közül az egyiket, a másikkal még mindig elérhetjük a tartalmát, mert sem az Innode, sem a File tartalma nem törlődik.
Nem tudunk azonban hard linket létrehozni a könyvtárakhoz. Ezenkívül a hard linkek nem léphetik át a fájlrendszer határait, például a hálózatra leképezett lemezek között.
3. Szimbolikus link
A szimbolikus vagy soft link egy olyan új fájl, amely csak az eredeti fájl elérési útját tárolja. A soft link az eredeti fájl áthelyezése vagy törlése után nem működik.
Így hozzunk létre egy soft vagy szimbolikus linket:
$ ln -s eredetiFile eredetiFileSoftLinkje
A -s opció, a –symbolic rövidítése, szimbolikus (soft) hivatkozást hoz létre a megadott fájlhoz.
A hard linkkel ellentétben a soft link egy olyan fájl, amelynek az inode száma eltér az eredeti fájltól.
Ha töröljük az eredetiFile-t, a soft link törött lesz, nem tudjuk megnyitni az eredetiFile-t.
4. Különbségek
a hard linkek ugyanazzal az inode-számmal rendelkeznek, mint az eredeti fájl
a soft linkek olyan új fájlok, amelyek csak az eredeti fájl helyét tárolják
a hard linkek lehetővé teszik az áthelyezett vagy eltávolított fájlokhoz való hozzáférést
a soft linkek érvénytelenné válnak, ha egy fájlt áthelyeznek vagy eltávolítanak
a hard linkekkel ellentétben létrehozhatunk soft linkeket a könyvtárakhoz is
a hard linkekkel ellentétben a soft linkek átívelhetnek fájlrendszereken is
Minden kapcsolattípusnak megvannak a maga alkalmazásai.