Fájlok: speciális fájlok létrehozása (blokk, karakter, cső)
2010. April 27. - 06:29 | szerző: jonci

Az alábbi írásban megismerkedünk a speciális fájlokat létrehozó programokkal (mknod, mkfifo, ln) és azt is megtudjuk, mi a különbség a szimbolikus link és a kemény kötés között.

Blokkeszköz, karaktereszköz és elnevezett csövek létrehozása – mknod

Blokkeszköz (“b“), karaktereszköz(“c“) vagy elnevezett csővezeték (“p“) hozható létre az mknod használatával. Csővezeték esetén csak a típust és a nevet kell megadni:

root@bash# mknod proba p
root@bash# ls -l proba
prw-------    1 root     root            0 nov 23 17:43 proba
root@bash#

Blokkeszköz esetén meg kell adni a fő- és alcsoport azonosítót is:

root@bash# mknod proba b 123 45
root@bash# ls -l proba
brw-------    1 root     root     123,  45 nov 23 17:44 proba
root@bash#

Beállíthatjuk a létrehozandó fájl jogait is (“m jog“), amit megadhatunk számokkal és betűjelekkel is (lásd Fájlok: jogosultságok):

root@bash# mknod -m 744 proba c 987 65
root@bash# ls -l proba
crw-r--r--    1 root     root     987,  65 nov 23 17:45 proba
root@bash#

Elnevezett csövek (named-pipe) létrehozása – mkfifo

Az mkfifo csak és kizárólag elnevezett csővezeték létrehozására használható. A “-m” vagy “mod=” paraméterrel adhatjuk meg a létrehozandó állomány jogait (lásd Fájlok: jogosultságok):

root@bash# mkfifo --mod=u=rw,g=r,o= proba
root@bash# ls -l proba
prw-r-----    1 root     root            0 nov 23 17:46 proba
root@bash#

Fájlok közötti kötések (linkek) létrehozása – ln

Alapesetben az ln kemény kötést hoz létre. Szimbolikus link létrehozásához a “s” vagy “symbolic” kapcsolók valamelyikét kell használni. A “f” kapcsoló magadásával “force”-olhatjuk a link létrehozását, azaz ha már létezik ugyanolyan nevű állomány, akkor a régi törlésre kerül. A “i” vagy “interactive” kapcsoló esetén rákérdez a törlésre. A bőbeszédű üzemmódot pedig a “v” megadásával kapcsolhatjuk be, azaz minden esetben kapunk írásos visszajelzés az alap kimeneti eszközre (jelen esetben a képernyőre).

A szimbolikus (symbolic link) és a kemény kötés (hard link) közötti különbség

Mielőtt továbblépnénk érdemes tisztázni a két típus közötti eltérést.

Legegyszerűbben a szimbolikus linket (“szimlink“) a következőképpen definiálhatnánk: “mint Windows rendszereket a parancsikon”. Azaz a szimlinkek csak mutatók az adott célfájlra, könyvtárra. Ebből következik, hogy a tartalom továbbra is csak a cél állományból érhető el, így belátható, hogy ha a célállomány törlésre kerül, úgy a link “törött” állapotba kerül (olyan helyre mutat, ami már nem létezik) és a továbbiakban nem érhető el a tartalom rajta keresztül.

Hard link esetében létrejövő link nem csak egy mutató az eredeti fájlra, hanem a létrehozott hard linken maga a fájl látszódik más néven. Azaz, ha az eredeti fájlt töröljük, attól még az eredeti tartalom elérhető a kemény kötésen keresztül. (Például: egy adott szobának csinálunk még egy ajtót, majd az első ajtót befalazzuk, a másodikon keresztül továbbra is bejutunk a szobába.) Egy fájlhoz több kemény kötés is létrehozható. A tartalom akkor törlődik, ha az összes kemény kötés megszűnik.

Másik, nem elhanyagolható különbség, hogy kemény kötést csak partíción (device-on) belül lehet létrehozni, míg a szimbolikus linkek túlmutathatnak rajta.

Szimbolikus link (“szimlink“)

Ha egy fájlt adunk meg paraméterként, akkor az aktuális könyvtárban jön létre egy azonos nevű kötés. A paraméterként megadott fájlnak az elérési útvonalát is adjuk meg, különben egy önmagára mutató kötés jön létre, amit nem tudunk mire használni. Lássunk egy jó példát:

root@bash# ln -sv ../proba2
create symbolic link `proba2' to `../proba2'
root@bash# ls -lak proba2
lrwxrwxrwx    1 jonci    jonci      6 nov 30 15:46 proba2 -> ../proba2
root@bash#

Ha két fájlt adunk meg, akkor az elsőhöz hoz létre kötést a második által megadott néven:

root@bash# ln -sfiv proba1 proba2
ln: replace `proba2'? y
create symbolic link `proba2' to `proba1'
root@bash# ls -lak proba2
lrwxrwxrwx    1 jonci    jonci      6 nov 30 15:46 proba2 -> proba1
root@bash#

Amennyiben az utolsó argumentum egy létező könyvtár, az ln program minden más megadott fájlhoz létrehoz egy ugyan olyan nevű kötést a megadott könyvtárban:

root@bash# ln -s /tmp/proba/a /tmp/proba/b /tmp/cucc/
root@bash# ls -lak /tmp/cucc/
lrwxrwxrwx  1 jonci  jonci  6 nov 30 15:46 /tmp/cucc/a -> /tmp/proba/a
lrwxrwxrwx  1 jonci  jonci  6 nov 30 15:46 /tmp/cucc/b -> /tmp/proba/b
root@bash#

Rövidebben:

root@bash# ln -s /tmp/proba/* /tmp/cucc/
root@bash#

Kemény kötés (“hardlink“)

Hozzunk létre kemény kötést! Figyeljük meg a jogok utáni első oszlopot, 2-es szám jelent meg a kötés létrehozása után, utalva, hogy már kettő kemény kötés mutat a fájlra. Majd az eredeti fájl törlése után továbbra is elérhető az eredeti tartalom a kemény kötésen keresztül:

root@bash# echo "proba fajl tartalma" > /tmp/proba4
root@bash# ln /tmp/proba4 proba5
root@bash# ls -lak /tmp/proba4 proba5
-rw-r-----    2 jonci    jonci      6 nov 30 15:46 /tmp/proba4
-rw-r-----    2 jonci    jonci      6 nov 30 15:46 proba5
root@bash#
root@bash# cat proba5
proba fajl tartalma
root@bash# rm /tmp/proba4
root@bash# cat proba5
proba file tartalma
root@bash#
Email This Post Email This Post Print This Post Print This Post
 
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Szólj hozzá!