UNIX – i-node, Hard Link ve Soft Link

Making symlinks to replace GLUT yazısını okurken;

ln -s /usr/lib/libfreeglut.so.0.2.0 /usr/lib/libglut.so.3
ln -s /usr/lib/libfreeglut.so.0.2.0 /usr/lib/libglut.so.3.7
ln -s /usr/lib/libfreeglut.so.0.2.0 /usr/lib/libglut.so.3.7.0

ile karşılaştım ve neden link yapılmaya gerek duyulduğunu merak ettim.

Değişik versionlardaki .so ları(.so,.so.3,.so.3.9) tek bir versiyona(.so.0.2.0) link ettik. Ayrıca, kütüphane ismini(libglut) de daha belirgin bir hale(libfreeglut) getirdik. Artık, libglut kütüphanelerinden herhangi biri yerine sadece libfreeglut.0.2.0‘ı kullanabiliriz. Sanırım, bu şekilde olası karmaşaları önledik.

i-node

UNIX’te her dosya, dosya içeriğiyle ilgili önemli bilgiler tutan, i-node denilen, bir veri yapısıyla ilişkilendirilir. i-node; dosyanın boyutu, son erişim zamanı, son değiştirme zamanı, kendisinin en son değiştirilme zamanı, dosyanın sahibi, izin bilgileri, dosyanın disk üzerinde bulunan verisine olan pointer‘ları ve dosyaya verilen link sayısını tutar. UNIX’te dizinlere karşılık gelen veri yapısı, dizindeki dosya isimlerini tutar. Bir dosya ismi, ilişkili olduğu i-node‘a pointer dır.

Dosya ismi, veri yapısına bir pointer ise bu veri yapısına erişmek için başka pointer‘lar da kullanabiliriz. Bunun çeşitli amaçları vardır. Dosya ismi harici böyle pointerlara link denir. Hard Link ve Soft Link vardır.

Hard Link, bir dosyanın i-node‘una pointer‘ olan başka bir dosyadır. Elimizde file1 olsun. İçeriği bravo, milord! 🙂 olsun. Bu dosyaya file2 isimli bir dosyayı link edelim.
ln file1 file2
Sağdan sola okunursa, file2,file1‘e link edilmiştir. Şimdi cat file2 dersek, file2‘nin de bravo milord! dediğini görürüz. Yani, bu iki dosya ismi de aynı i-node‘a pointer oldu.

Soft/Symbolic Link, oluşturulduğunda, file2 olsun ve file1‘e link edilmiş olsun, file2‘nin içerisinde file1 yazılır. Bu şekilde file1‘in içeriğine file2 ile erişebiliriz. ln -s file1 file2 şeklinde yazılır.

lifeinbeta@lifeinbeta:~/Desktop$ touch file1
lifeinbeta@lifeinbeta:~/Desktop$ vim file1
lifeinbeta@lifeinbeta:~/Desktop$ cat file1
bravo milord!
lifeinbeta@lifeinbeta:~/Desktop$ ln -s file1 file2
lifeinbeta@lifeinbeta:~/Desktop$ ls -F
...
file1                                 ...
file2@                                ...
lifeinbeta@lifeinbeta:~/Desktop$ cat file2
bravo milord!

Görüldüğü gibi, sembolik link @ işareti ile belirtiliyor. Hard Link‘te olduğu gibi, link edilmiş olan dosyanın içeriğini değiştirdiğimizde gerçek dosyanın içeriği de değiştirilmiş olur.

UNIX’te bir dosya sistemi hiyerarşisi, birden fazla disk ya da disk bölümü üzerindeki dosya sistemlerinden oluşabilir. Her dosya sistemi, kendisinden sorumludur, diğer dosya sistemleri hakkında bilgiye sahip değildir.

Hard Link‘ler, bir dosya sisteminin kendi veri yapısı olan bir i-node ile ilişkili olduğu için, sadece kendi dosya sistemi hakkında bilgiye sahiptir. Bu nedenle, bir dosya sistemindeki bir dosyadan, başka bir dosya sistemindeki bir dosya için oluşturulamaz.

Soft linkler ise dosya ismini içerdiği için bu durumdan etkilenmez. freeglut için aynı dosya sistemi içinde çalışacağımdan aslında Hard Link de oluşturabilirdim.

Advertisements

1 Comment

Filed under UNIX

One response to “UNIX – i-node, Hard Link ve Soft Link

  1. ikisini de birbiri yerine kullanabiliyorsun bu kadar saçma bir ayrım görmedim.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s