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#