104.6 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
104 Eszközök, Linux fájlrendszerek, Fájlrendszer-hierarchia szabvány |
Fejezet: |
104.6 Szimbolikus és hard linkek létrehozása és megváltoztatása |
Lecke: |
1/1 |
Bevezetés
A Linuxon néhány fájl különleges bánásmódban részesül, vagy a tárolási helyük miatt, mint például az ideiglenes fájlok, vagy a fájlrendszerrel való kölcsönhatásuk miatt, mint például a hivatkozások. Ebben a leckében megtudhatjuk, hogy mik azok a linkek és hogyan kezelhetjük őket.
A linkek megértése
Mint már említettük, Linuxon mindent fájlként kezelünk. De van egy speciális fájlfajta, amit linknek hívnak, és a Linux rendszerben kétféle link létezik:
- Szimbolikus linkek
-
Más néven soft linkek, egy másik fájl elérési útvonalára mutatnak. Ha töröljük a fájlt, amire a link mutat (az úgynevezett target (cél)), a link továbbra is létezni fog, de “nem működik”, mivel most már a “semmire” mutat.
- Hard linkek
-
Gondoljunk úgy a hard linkre, mint az eredeti fájl második nevére. Ez nem duplikátum, hanem egy további bejegyzés a fájlrendszerben, amely ugyanarra a helyre (inode) mutat a lemezen.
Tip
|
Az inode egy olyan adatszerkezet, amely egy fájlrendszerben lévő objektum (például egy fájl vagy mappa) attribútumait tárolja. Ezen attribútumok közé tartoznak a jogosultságok, a tulajdonjog és az, hogy a lemez mely blokkjain tárolják az objektum adatait. Gondoljunk rá úgy, mint egy index bejegyzésére, innen ered a neve is, amely az “index node”-ból származik. |
Munka a hard linkekkel
Hard linkek létrehozása
Linuxon a hard link létrehozásának parancsa az ln
. Az alapvető szintaxis a következő:
$ ln TARGET LINK_NAME
A TARGET
-nek már léteznie kell (ez az a fájl, amelyre a hivatkozás mutat), és ha a cél nem az aktuális mappában van, vagy ha máshol akarjuk létrehozni a hivatkozást, akkor meg kell adni a teljes elérési utat. Például a parancs:
$ ln target.txt /home/carol/Documents/hardlink
létre fog hozni egy hardlink
nevű fájlt a /home/carol/Documents/
mappában, ami a target.txt
fájlra hivatkozik az aktuális mappában.
Ha az utolsó paramétert (LINK_NAME
) elhagyjuk, akkor egy, a célponttal azonos nevű link jön létre az aktuális mappában.
Hard linkek menedzselése
A hard linkek olyan bejegyzések a fájlrendszerben, amelyek különböző nevűek, de ugyanarra az adatra mutatnak a lemezen. Minden ilyen név azonos, és használható egy fájlra való hivatkozáshoz. Ha megváltoztatjuk az egyik név tartalmát, akkor az összes többi, erre a fájlra mutató név tartalma is megváltozik, mivel ezek a nevek mind ugyanarra az adatra mutatnak. Ha az egyik nevet töröjük, a többi név továbbra is működik.
Ez azért történik, mert amikor “törlünk” egy fájlt, az adatok valójában nem törlődnek a lemezről. A rendszer egyszerűen törli a fájlrendszer táblájában a lemezen lévő adatoknak megfelelő inode-ra mutató bejegyzést. De ha van egy második bejegyzés, amely ugyanarra az inode-ra mutat, akkor még mindig hozzáférhetünk az adatokhoz. Gondoljunk erre úgy, mintha két út találkozna ugyanabban a pontban. Még ha az egyik utat blokkoljuk vagy átirányítjuk is, akkor is elérhetjük a célt a másik úton.
Ezt az ls
paraméter -i
paraméterének használatával ellenőrizhetjük. Tekintsük a következő mappa tartalmát:
$ ls -li total 224 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 hardlink 3806696 -r--r--r-- 2 carol carol 111702 Jun 7 10:13 target.txt
Az engedélyek előtti szám az inode száma. Látjuk, hogy a hardlink
és a target.txt
fájlnak ugyanaz a száma (3806696
)? Ez azért van, mert az egyik a másik hard linkje.
De melyik az eredeti és melyik a link? Nem igazán lehet megmondani, mivel minden gyakorlati szempontból ugyanazok.
Vegyük figyelembe, hogy minden egyes hard link, amely egy fájlra mutat, növeli a fájl linkszámát (link count). Ez a szám közvetlenül az ls -l
kimenetén a jogosultságok után található. Alapértelmezés szerint minden fájl linkszáma 1
(a mappáké 2
), és minden rá mutató hard link eggyel növeli a számot. Ez az oka tehát annak, hogy a fenti listában szereplő fájlok linkszáma 2
.
A szimbolikus linkekkel ellentétben itt csak fájlokra lehet hard linkeket létrehozni, és mind a linknek, mind a célnak ugyanabban a fájlrendszerben kell lennie.
Hard linkek mozgatása és eltávolítása
Mivel a hardlinkeket hagyományos fájlokként kezeljük, az rm
paranccsal törölhetők, az mv
paranccsal pedig átnevezhetők vagy mozgathatók a fájlrendszerben. És mivel a hard link a céllal azonos inode-ra mutat, szabadon mozgatható, nem kell attól tartani, hogy a link “eltörik”.
Szimbolikus linkek
Szimbolikus linkek létrehozása
A szimbolikus link létrehozására használt parancs szintén az ln
, de az -s
paraméterrel kiegészítve. Például így:
$ ln -s target.txt /home/carol/Documents/softlink
Ez létrehoz egy softlink
nevű fájlt a /home/carol/Documents/
mappában, amely az aktuális mappában lévő target.txt
fájlra mutat.
A hard linekkhez hasonlóan elhagyhatjuk a hivatkozás nevét, hogy az aktuális mappában a céllal azonos nevű hivatkozást hozzunk létre.
Szimbolikus linkek menedzselése
A szimbolikus hivatkozások a fájlrendszer egy másik elérési útvonalára mutatnak. Soft linkeket hozhatunk létre fájlokra és mappákra, akár különböző partíciókon is. Egy szimbolikus linket elég könnyű észrevenni az ls
parancs kimenete alapján:
$ ls -lh total 112K -rw-r--r-- 1 carol carol 110K Jun 7 10:13 target.txt lrwxrwxrwx 1 carol carol 12 Jun 7 10:14 softlink -> target.txt
A fenti példában a softlink
fájl jogosultságainak első karaktere l
, ami szimbolikus linket jelez. Továbbá, közvetlenül a fájlnév után látható a link céljának neve, a target.txt
fájl.
Vegyük figyelembe, hogy a fájl- és mappalistákon a soft linkek maguk mindig az rwx
engedélyeket mutatják a felhasználó, a csoport és mások számára, de a gyakorlatban a hozzáférési engedélyek ugyanazok, mint a célponté.
Szimbolikus linkek mozgatása és eltávolítása
A hard linkekhez hasonlóan a szimbolikus linkek is eltávolíthatók az rm
segítségével, és áthelyezhetők vagy átnevezhetők az mv
segítségével. Létrehozásukkor azonban különös gondossággal kell eljárni, hogy a linket ne “törjük el”, ha elmozdítjuk az eredeti helyéről.
Szimbolikus hivatkozások létrehozásakor tisztában kell lennünk azzal, hogy hacsak nincs teljes mértékben megadva az elérési útvonal, a célpont helyét a hivatkozás helyéhez képest relatívnak értelmezi a rendszer. Ez problémákat okozhat, ha a hivatkozás vagy a fájl, amelyre mutat, áthelyezésre kerül.
Ezt egy példával könnyebb megérteni. Tegyük fel, hogy van egy original.txt
nevű fájl az aktuális mappában, és egy softlink
nevű szimbolikus linket szeretnénk létrehozni hozzá. Használhatjuk a következőt:
$ ln -s original.txt softlink
És úgy tűnik, minden rendben lesz. Ellenőrizzük le az ls
-el:
$ ls -lh total 112K -r--r--r-- 1 carol carol 110K Jun 7 10:13 original.txt lrwxrwxrwx 1 carol carol 12 Jun 7 19:23 softlink -> original.txt
Nézzük meg, hogyan épül fel a hivatkozás: a softlink
az (→
) original.txt
fájlra mutat. Nézzük azonban, mi történik, ha a linket az előző mappába helyezzük át, és megpróbáljuk megjeleníteni a tartalmát a less
paranccsal:
$ mv softlink ../ $ less ../softlink ../softlink: No such file or directory
Mivel az original.txt
elérési útvonalát nem adtuk meg, a rendszer azt feltételezi, hogy az ugyanabban a mappában van, mint a hivatkozás. Ha ez már nem igaz, a hivatkozás nem működik.
Ezt úgy lehet megelőzni, ha a hivatkozás létrehozásakor mindig megadjuk a cél teljes elérési útvonalát:
$ ln -s /home/carol/Documents/original.txt softlink
Így nem számít, hogy hová helyezzük át a linket, az továbbra is működni fog, mivel a cél abszolút helyére mutat. Ellenőrizzük az ls
-el:
$ ls -lh total 112K lrwxrwxrwx 1 carol carol 40 Jun 7 19:34 softlink -> /home/carol/Documents/original.txt
Gyakorló feladatok
-
Mi a
chmod
paramétere szimbolikus módban, hogy engedélyezzük a sticky bitet egy mappán? -
Képzeljük el, hogy van egy
document.txt
nevű fájl a/home/carol/Documents
mappában. Milyen paranccsal hozhatunk létre egytext.txt
nevű szimbolikus linket az aktuális mappán? -
Magyarázzuk el a különbséget egy fájlhoz vezető hard link és a fájl másolata között!
Gondolkodtató feladatok
-
Képzeljük el, hogy egy mappában létrehozunk egy
recipes.txt
nevű fájlt. Ebben a mappában létrehozunk egy hard linket is erre a fájlra, areceitas.txt
-t, és egy szimbolikus (vagy soft) linket erre a fájlra, arezepte.txt
-t.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s recipes.txt rezepte.txt
A mappa tartalma a következő lesz:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Ne feledjük, hogy a
receitas.txt
hard linkként ugyanarra az inode-ra mutat, amelyhez arecipes.txt
van rendelve. Mi történne arezepte.txt
soft linkkel, ha areceitas.txt
fájlt törölnénk? Miért? -
Képzeljük el, hogy egy pendrive van csatlakoztatva a rendszerhez és mountolva van a
/media/youruser/FlashA
címre. Létre akarunk hozni egyschematics.pdf
nevű linket a home mappában, amely a pendrive gyökerén lévőesquema.pdf
fájlra mutat. Írjuk be tehát a következő parancsot:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Mi fog történni? Miért?
-
Vegyük a következő
ls -lah
kimenetet:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Hány link mutat a
document.txt
fájlra? -
Soft vagy hard linkek?
-
Melyik paramétert kell átadni az
ls
-nek, hogy lássuk, melyik inode-ot foglalják el az egyes állományok?
-
-
Képzeljük el, hogy a
~/Documents
mappában van egyclients.txt
nevű fájl, amely néhány ügyfél nevét tartalmazza, és egysomedir
nevű mappa. Ezen belül van egy másik fájl, szinténclients.txt
néven, más nevekkel. Ennek a struktúrának a lemásolásához használjuk a következő parancsokat:$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Ezután hozzunk létre egy linket a
somedir
-benpartners.txt
néven, amely erre a fájlra mutat, a következő parancsokkal:$ cd somedir/ $ ln -s clients.txt partners.txt
Tehát a mappastruktúra a következő:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Most helyezzük át a
partners.txt
-t asomedir
-ből a~/Documents
-be és listázzuk a tartalmát!$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Működni fog a link? Ha igen, akkor melyik fájl tartalma lesz felsorolva? Miért?
-
Vegyük a következő fájlokat:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Milyen hozzáférési jogosultságok vannak a
partners.txt
fájlhoz? Miért?
Összefoglalás
Ebben a leckében megtanultuk:
-
Mik azok a linkek.
-
A különbségeket a szimbolikus és hard linkek között.
-
Hogyan hozzunk létre linkeket.
-
Hogyan mozgassuk, nevezzük át vagy töröljük ezeket a linkeket.
A leckében az alábbi parancsokról volt szó:
-
ln
: A “link” parancs. Önmagában ez a parancs egy hard linket hoz létre. Az-s
kapcsolóval szimbolikus vagy soft link hozható létre. Ne feledjük, hogy a hard linkek csak ugyanazon a partíción és fájlrendszeren belül lehetnek, a szimbolikus linkek pedig áthaladhatnak a partíciók és fájlrendszerek között (még a hálózathoz csatolt tárolókon is). -
Az
ls
-i
paramétere, amely lehetővé teszi egy fájl inode számának megtekintését.
Válaszok a gyakorló feladatokra
-
Mi a
chmod
paramétere szimbolikus módban, hogy engedélyezzük a sticky bitet egy mappán?Szimbolikus módban a sticky bit szimbóluma a
t
. Mivel ezt a jogosultságot szeretnénk engedélyezni (hozzáadni) a mappához, a paraméternek+t
-nek kell lennie. -
Képzeljük el, hogy van egy
document.txt
nevű fájl a/home/carol/Documents
mappában. Milyen paranccsal hozhatunk létre egytext.txt
nevű szimbolikus linket az aktuális mappán?ln -s
a parancs a szimbolikus létrehozásához. Mivel meg kell adni a linkelni kívánt fájl teljes elérési útvonalát, a parancs a következőképpen néz ki:$ ln -s /home/carol/Documents/document.txt text.txt
-
Magyarázzuk el a különbséget egy fájlhoz vezető hard link és a fájl másolata között!
A hard link csak egy másik neve egy fájlnak. Bár úgy néz ki, mint az eredeti fájl másolata, mind a link és az eredeti fájl ugyanaz, mivel ugyanarra az adatra mutatnak a lemezen. A link tartalmán végrehajtott változtatások az eredetin is tükröződnek, és vica-versa. A másolat egy teljesen független egység, amely más helyet foglal el a lemezen. A másolaton végrehajtott változtatások nem jelennek meg az eredetin, és vica-versa.
Válaszok a gondolkodtató feladatokra
-
Képzeljük el, hogy egy mappában létrehozunk egy
recipes.txt
nevű fájlt. Ebben a mappában létrehozunk egy hard linket is erre a fájlra, areceitas.txt
-t, és egy szimbolikus (vagy soft) linket erre a fájlra, arezepte.txt
-t.$ touch recipes.txt $ ln recipes.txt receitas.txt $ ln -s receitas.txt rezepte.txt
A mappa tartalma a következő lesz:
$ ls -lhi total 160K 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 receitas.txt 5388833 -rw-r--r-- 4 carol carol 0K jun 17 17:25 recipes.txt 5388837 lrwxrwxrwx 1 carol carol 12 jun 17 17:25 rezepte.txt -> receitas.txt
Ne feledjük, hogy a
receitas.txt
hard linkként ugyanarra az inode-ra mutat, amelyhez arecipes.txt
van rendelve. Mi történne arezepte.txt
soft linkkel, ha areceitas.txt
fájlt törölnénk? Miért?A
rezepte.txt
soft link nem működik. Ennek oka, hogy a soft linkek nevekre mutatnak, nem pedig inodeokra és areceitas.txt
név már nem létezik, még akkor sem, ha az adatok még mindig a lemezen vannakrecipes.txt
néven. -
Képzeljük el, hogy egy pendrive van csatlakoztatva és a
/media/youruser/FlashA
címre van mountolva. Létre akarunk hozni egyschematics.pdf
nevű linket a home mappában, amely a pendrive gyökerén lévőesquema.pdf
fájlra mutat. Írjuk be tehát a következő parancsot:$ ln /media/youruser/FlashA/esquema.pdf ~/schematics.pdf
Mi fog történni? Miért?
A parancs sikertelen lesz. A hibaüzenet
Invalid cross-device link
lesz és ez a magyarázatot is világossá teszi: a hard linkek nem mutathatnak egy másik partíción vagy eszközön lévő célpontra. Az egyetlen módja egy ilyen hivatkozás létrehozásának, ha szimbolikus vagy soft linket használunk, azln
parancshoz hozzáadva az-s
paramétert. -
Vegyük a következő
ls -lah
kimenetet:$ ls -lah total 3,1M drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
Hány link mutat a
document.txt
fájlra?Minden fájl
1
linkszámmal kezdődik. Mivel a fájl linkszáma4
, három link mutat erre a fájlra. -
Soft vagy hard linkek?
Hard linkek, mivel a soft linkek nem növelik a fájl linkszámát.
-
Melyik paramétert kell átadni az
ls
-nek, hogy lássuk, melyik inode-ot foglalják el az egyes állományok?A paraméter az
-i
. Az inode azls
kimenetének első oszlopa lesz, mint például:$ ls -lahi total 3,1M 5388773 drwxr-xr-x 2 carol carol 4,0K jun 17 17:27 . 5245554 drwxr-xr-x 5 carol carol 4,0K jun 17 17:29 .. 5388840 -rw-rw-r-- 1 carol carol 2,8M jun 17 15:45 compressed.zip 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 document.txt 5388837 -rw-rw-r-- 1 carol carol 216K jun 17 17:25 image.png 5388833 -rw-r--r-- 4 carol carol 77K jun 17 17:25 text.txt
-
-
Képzeljük el, hogy a
~/Documents
mappában van egyclients.txt
nevű fájl, amely néhány ügyfél nevét tartalmazza, és egysomedir
nevű mappa. Ezen belül van egy másik fájl, szinténclients.txt
néven, más nevekkel. Ennek a struktúrának a lemásolásához használjuk a következő parancsokat:$ cd ~/Documents $ echo "John, Michael, Bob" > clients.txt $ mkdir somedir $ echo "Bill, Luke, Karl" > somedir/clients.txt
Ezután hozzunk létre egy linket a
somedir
-benpartners.txt
néven, amely erre a fájlra mutat, a következő parancsokkal:$ cd somedir/ $ ln -s clients.txt partners.txt
Tehát a mappastruktúra a következő:
Documents |-- clients.txt `-- somedir |-- clients.txt `-- partners.txt -> clients.txt
Most helyezzük át a
partners.txt
-t asomedir
-ből a~/Documents
-be és listázzuk a tartalmát!$ cd ~/Documents/ $ mv somedir/partners.txt . $ less partners.txt
Működni fog a link? Ha igen, akkor melyik fájl tartalma lesz felsorolva? Miért?
Ez “trükkös” , de a link működni fog és a
~/Documents
-ben lévő fájl tartalma lesz listázva, amely aJohn
,Michael
,Bob
neveket tartalmazza.Ne feledjük, hogy mivel a
partners.txt
soft link létrehozásakor nem adtuk meg aclients.txt
cél teljes elérési útját, a cél helyét a link helyéhez képest relatívnak fogja értelmezni, ami ebben az esetben az aktuális mappa.Amikor a hivatkozás a
~/Documents/somedir
mappából a~/Documents
mappába került, a linknek nem kellett volna működnie, mivel a cél már nem volt ugyanabban a mappában, mint a hivatkozás. Történetesen azonban a~/Documents
mappában van egyclients.txt
nevű fájl, így a link erre a fájlra mutat a~/somedir
mappában lévő eredeti célpont helyett.Ennek elkerülése érdekében szimbolikus link létrehozásakor mindig adjuk meg a cél teljes elérési útját.
-
Vegyük a következő fájlokat:
-rw-r--r-- 1 carol carol 19 Jun 24 11:12 clients.txt lrwxrwxrwx 1 carol carol 11 Jun 24 11:13 partners.txt -> clients.txt
Milyen hozzáférési jogosultságok vannak a
partners.txt
fájlhoz? Miért?A
partners.txt
hozzáférési engedélyeirw-r—r—r--
, mivel a linkek mindig ugyanazokat a hozzáférési engedélyeket öröklik, mint a célpont.