UNIX/Linux Sistemlerinin Dosya Sistemine İlişkin Temel Bilgiler
POSIX dosya sisteminde dosya isimlerinin büyük/küçük harf duyarlılığı vardır. Örneğin,
ankara isimli dosyayla Ankara isimli dosya aynı anda bulunabilir ve birbirlerinden farklıdır.
Bu dosya sistemi de FAT sisteminde olduğu gibi bir kök dizin ve iç içe geçmiş dizinler
topluluğundan oluşur.
POSIX sistemlerinde orta karmaşıklıkta bir koruma mekanizması uygulanmıştır, yani
dosyalar ve dizinler bunları yaratanların isteğiyle diğer kullanıcılardan gizlenebilmektedir.
Her dosya ve dizine erişim üç durum dikkate alınarak değerlendirilmektedir:
1) Erişimi dosyayı yaratan kişi mi yapmaya çalışmaktadır?
2) Erişim dosyayı yaratan kullanıcının dahil olduğu gruptan herhangi bir kullanıcı tarafından
mı yapılmak istenmektedir? Çeşitli kullanıcılar bir grup altında toplanabilir. Yani erişimde
dosyayı yaratan kişi olmanın yanı sıra yaratan kişi ile aynı grupta olmanın da önemi vardır.
3) Erişimi ne dosyayı yaratan kişi ne de dosyayı yaratan kişi ile aynı grupta olan bir kişi mi
yapmaya çalışmaktadır, yani herhangi bir kullanıcı mı yapmaya çalışmaktadır?
İşte bir dosyaya ya da dizine erişimde bu ölçütlere dikkat edilmektedir. POSIX sisteminde her
dosyanın onu yaratan kişi (owner), yaratan kişinin grubu ve herhangi bir kişi için erişim
hakları vardır. Yani her dosya için o dosya üzerinde kimin hangi işlemleri yapacağı
belirlenmiştir.
Bir dosya üzerinde üç erişim işlemi yapılabilir: okuma, yazma ve çalıştırma. Bir dosyanın
erişim bilgilerini görmenin en kolay yolu ls -l komutunu uygulamaktır. Bu komut
uygulandığında dosyanın tipik erişim bilgisi aşağıdaki gibi olur:
-rw-rw-rw-
Bu erişim bilgisindeki en soldaki karakter dosyanın türünü belirtir. Örneğin bu karakter - ise
dosya sıradan bir dosyadır, d ise bir dizin, p ise bir pipe vs... Sonraki karakterler üçerli
C ve Sistem Programcıları Derneği 8
gruplara ayrılır. İlk grup dosyayı yaratan kişi için, sonraki grup dosyayı yaratan kişinin grubu
için, sonraki grup ise herhangi bir kişi için erişim haklarını belirtmektedir.
Örneğin,
d rwx rwx rwx
sahibi grup herhangi birisi
Örneğin bir dosyanın erişim bilgileri şöyle olsun:
-rw-r--r--
-,rw-,r--,r--
Dosyayı yaratan kişi buradaki dosya üzerinde hem okuma hem yazma yapabilir, ancak
dosyayı yaratan kişi ile aynı gruptaki kişiler ve diğer kişiler yalnızca okuma yapabilirler.
Bir dosyanın okunabilmesi demek dosya fonksiyonlarıyla okuma işlemlerinin yapılabilmesi
demektir. Bir dosyaya dosya fonksiyonlarıyla yazma, ekleme gibi işlemlerin yapılabilmesi
için yazma hakkının olabilmesi gerekir. POSIX sistemlerinde çalıştırılabilen dosyalar
uzantılarıyla tespit edilmezler, erişim haklarıyla tespit edilirler. Yani dosyanın x erişim
özelliği varsa bu dosya çalıştırılabilir bir dosyadır. İsmi yazıldığında işletim sistemi tarafından
yüklenir. Bir dizin için okuma hakkının olması o dizin için dizin listesinin alınabilmesi
anlamındadır. Yazma hakkının anlamı o dizinde yeni bir dosya yaratma ya da olan bir dosyayı
silme anlamındadır. Çünkü aslında dizinler de birer dosya gibidir. Dizinler için
çalıştırılabilme hakkı tamamen farklı bir anlama gelir, bu hak bir path ifadesinde bir dizinin
içerisinden başka bir dizine atlanabileceğini belirtir. Örneğin, bir dosya açacak olalım ve
dosyanın path bilgisi şöyle olsun:
/a/b/c.dat
Burada biz c.dat dosyasının içeriğini yalnızca okumak isteyelim, yani fopen() fonksiyonu ile
c.dat dosyasını "r+" modunda açmak isteyelim. Burada a dizininin içerisinden geçilmektedir.
Yani a'nın çalıştırılabilir hakkına sahip olması gerekir. c.dat dosyasının okuma ve yazma
haklarına sahip olması gerekir. b'nin okuma ve çalıştırılabilir hakkına sahip olması gerekir,
ancak yazma hakkına sahip olmasına gerek yoktur. Dizinler için böyle bir mekanizma
kurulmasının anlamı şudur: Bir kişi bir dizini korumak isteyebilir ama o dizinin altındaki
başka bir dizini korumak istemeyebilir, bu durumda korumak istediği dizin için okuma ve
yazma hakkı vermez onun alt dizini için okuma ve yazma hakkı verir, ancak üst dizin için
geçiş hakkını vermesi gerekir.
Aşağıdaki path ile verilen fonksiyonu "w+" modunda açmak isteyelim.
/a/b/c/d.dat
Bu durumda a, b, c dizinleri için x hakkının olması gerekir, ancak a ve b için r ve w haklarının
olmasına gerek yoktur. d.dat dosyasının okuma ve yazma hakkına sahip olması gerekir.
Burada c dizininin hangi haklara sahip olması gerekir? Bir dizin için yazma hakkı dizin
içerisinde yeni bir giriş oluşturmak anlamındadır. Yani yukarıdaki örnekte d.dat dosyası daha
önce varsa, yani biz truncate işlemi yapıyorsak, c dizininin yazma hakkına sahip olmasına
gerek yoktur. Ancak d.dat dosyası yoksa dizin içerisinde yeni bir giriş oluşturulacaktır, bu
durumda c'nin yazma hakkına sahip olması gerekir.