Bir dosyaya erişmek demek, o dosya üzerinde dosya işlemlerini yapmak demektir. Dosya işlemlerini okuma, yazma ve çalıştırma (execute) diye üç ayrı eylemle belirteceğiz.
Okuma
hakkı, bir dosyayı okumak yetkisidir. Yazma hakkı, bir dosyayı yaratmak ve
istendiğinde dosyayı değiştirmek ya da silmek yetkisidir. Execute (çalıştırma)
hakkı, bir dosyayı çalıştırma, kullanma yetkisidir.
Unix çok kullanıcılı bir sistem olsuğu için, her kullanıcı ancak kendisine erişim izni verilen dosyalara erişebilir ve dosya ile ilgili olarak yapabileceği işler, kendisine verilen erişim hakkıyla sınırlıdır. Böyle olmasaydı, bir kullanıcı başka bir kullanıcının dosyalarını okuyabilir, üzerinde istenmeyen eğişiklikler yapabilir ve hatta silebilirdi.
Bir dizin (directory) için okuma hakkı, o dizinin içindekileri listeleme yetkisidir. Yazma hakkı, o dizinde yeni dosyalar ve alt dizinler yaratma ve silme hakkıdır. Execute hakkı ise, cd komutunu kullanarak dizine girme ve bu dizini yol (path) olarak kullanma yetkisidir.
Unix’in, DOS gibi tek kullanıcılı
sistemlerden farklı olan, bu özeliğini ayrıntılarıyla bilmeliyiz.
Chmod
Dosya
ve dizinlerin erişim haklarını koyan ve bu hakları değiştiren komuttur. Bir
dosya ya da dizinin erişim hakkını ancak dosyanın sahibi (owner) ya da üst
kullanıcı (superuser) değiştirebilir.
Unix üç türlü
kullanıcı tanımlar:
u user [dosya
sahibi, dosya yaratıcısı]
g group [dosyanın
ait olduğu grup]
o other [ötekiler,
u ve g dışında olup, dosyaya erişebilenler]
a all (ugo) [
hepsi]
Erişim
İzinleri (Permissions)
İzinler üç harfle belirtilir: rwx. Bu harflerin anlamları şöyledir:
r read [okuma ]
w write
[yazma]
x execute
[çalıştırma]
Bir dizindeki dosyaları ayrıntılarıyla listelemek için ls –l komutunun verildiğini söylemiştik. Bu komuttan sonra, ekranda her dosya için yazılan satırın başında 10 karekterlik bir dizim açılır. Bitişik olarak yazılan bu 10 karekterlik dizim, soldan sağa doğru 1-3-3-3 karekterlik dört kısma ayrılır. Her kısım, listelenen dosya ya da dizin ile ilgili ayrı ayrı bilgiler verir. Bu bilgiler şunlardır:
Tür sahibi grup ötekiler
(Type) (user) (group) (other)
- - - - - - - - - -
İlk karekter tür belirtir. Tür hanesine aşağıdaki karekterlerden birisi gelir ve karşısında belirtilen türden olduğunu bildirir:
- Normal dosya
d Dizin
b Özel blok dosyası
c Özel karekter dosyası
l Sembolik bağlantı
P Özel adlandırılmış pipe dosyası
İlk karekterden sonra gelen üçer karekterden oluşan üç blok, soldan sağa doğru user, group ve other için verilen izinleri gösterir. Bu izinler daima
rwx
sırasında yazılır. Bu üç harften birisi yerine (-) simgesi konulursa, o iznin verilmediği anlamına gelir.
Örnekler:
rwx Okuma, yazma ve çalıştırma izinleri var
rw- Okuma ve yazma izni var, çalıştırma izni yok
r-x Okuma ve çalıştırma izni var, yazma izni yok
-wx Okuma izni yok, yazma ve çalıştırma izni var
r-- Yalnız okuma izni var
-w- Yalnız yazma izni var
--x Yalnız çalıştırma izni var
--- Hiçbir izin yok
Buna göre, örneğin,
drwxrwxrwx
ifadesinde d harfi listelenenin bir dizin olduğunu söyler. Geriye kalanlar ise u, g, o için rwx izinlerinin hepsinin verildiğini belirtir.
-rwxr-x--x
ifadesinde ilk (-) karekteri, listelenenin normal bir dosya olduğunu; sonra gelen rwx dizimi user’e okuma yazma ve çalıştırma izinlerinin verildiğini; sonra gelen r-x dizimi gruba okuma ve çalıştırma izinlerinin verildiğini ama yazma izni verilmediğini; en sondaki --x dizimi ise ötekilere (other) okuma ve yazma izni verilmediğini, yalnızca çalıştırma izni verildiğini belirtir.
Erişim
Kiplerinin (mod) Octal Gösterimi
Yukarıda belirtildiği gibi, dosya erişim hakları harflerle belirlenebildiği gibi, octal sayıtlama ( 8-li sayıtlama) sistemiyle de belirlenebilir. 0..7 octal sayaklarını 2-li sayıtlama sisteminde ifade edersek şu tabloyu oluşturabiliriz.
2-li Temsil |
Octal Sayı |
r |
w |
x |
Sembolic Form |
000 |
0 |
hayır |
hayır |
hatır |
--- |
001 |
1 |
hayır |
hayır |
evet |
--x |
010 |
2 |
hayır |
evet |
hayır |
-w- |
011 |
3 |
hayır |
evet |
evet |
-rw |
100 |
4 |
evet |
hayır |
hayır |
r-- |
101 |
5 |
evet |
hayır |
evet |
r-x |
110 |
6 |
evet |
evet |
hayır |
rw- |
111 |
7 |
evet |
evet |
evet |
rwx |
Bu tablonun en solundaki sütün ile en sağındaki sütünu satır satır birbirine eşleyerek, rwx izinlerini kolayca belirleyebiliriz. Örneğin, 101 ikili sayısı 5 octal sayısına ve r-x erişim iznine karşılık gelmektedir. Sol sütundaki ikili sistemde 4 ler hanesi sağ sütundaki r iznine, 2 ler hanesi w iznine ve 1 ler hanesi x iznine karşılıktır. İkili sayıtlama sisteminde 0 lar iznin verilmediği, 1 ler ise iznin verildiği anlamındadır. rwx simgesinde 0 ‘a karşılık olan harf yerine (-) simgesi konulmaktadır.
Öte yandan, sol sütundaki her ikili sayı ikinci sütundaki octal sayı ile temsil edilebilir. İkili sayılarla octal sayılar bire bir eşlenmiştir. Bundan yararlanarak, her satırdaki izni, ona karşılık gelen octal sayı ile tek olarak belirlemek mümkündür. Örneğin,
101 5 r-x
simgelerinin her üçü de aynı izni belirtirler. Bundan yararlanarak, ugo kullanıcılarının izinlerini yan yana yazacağımız üç octal sayı ile belirtebiliriz. Örneğin,
751 rwxr-x--x
simgeleri aynı anlamı taşıyor olacaklardır. Dolayısıyla, 751 dizimi u ya rwx iznini, g ye r-x iznini ve o ya --x iznini veriyor olacaktır.
Chmod
Dosya ve dizinlerin erişim haklarını koyan ve bu hakları değiştiren komuttur. Bir dosya ya da dizinin erişim hakkını ancak dosyanın sahibi (owner) ya da üst kullanıcı (superuser) değiştirebilir.
Operatorler
-
İzin kaldır
(remove permission )
+ İzin ekle (add permission)
= İzin koy (set permission)
Örnekler
Bir dosya ya da dizinin erişim hakları octal kodlarla ya da ugo ve rwx simgeleriyle verilebilir. Octal kodlar kullanılarak verilen izne, mutlak izin verme (absolute permission) denir. Simgeler kullanılırsa göreceli izin verme (relative permission) denir. Her ikisini de kullanabiliriz. Ama, octal kodları biliyorsak, mutlak izin verme yöntemi daha kolaydır. Bunu değişik örnekler üzerinde açıklayalım.
1. Deneme.html dosyası için kullanıcıya (dosya sahibi) rwx, grup üyelerine r-x ve ötekilere (other) --x erişim haklarını vermek için
$ chmod 751 deneme.html
komutunu vermek yeterlidir. Oysa bunu sembollerle yapmak isteseydik
$ chmod u + rwx
$ chmod g +r-x
$ chmod o +--x
komutlarını vermek gerekirdi.
2. mektup.txt dosyasının bütün erişim haklarını kaldırmak için
$ chmod 000 mektup.txt
komutunu
vermek yeterlidir. Aynı işi,
$
chmod ugo –rwx mektup.txt
komutuyla
da yapabiliriz.
3.
programlar adlı dizinden g ve o nun okuma ve yazma
izinlerini kaldırmak için,
$ chmod go –rw programlar
komutunu
vermek yeterlidir. Aynı işi,
$ chmod 711 programlar
komutuyla
da yapabiliriz.
4.
Yeni Unix
sistemleri, bir dizin içindeki bütün dosya ve alt dizinlerin erişim haklarını
topluca belirlemeye izin verir. Bunun için –R (recursive) nitelemesi
kullanılır. Örneğin,
$ chmod –R u+r programlar
komutu, bu dizin içindeki bütün dosya ve alt
dizinler için u ya okuma izni verir.
5. Bir dizin için yalnız okuma iznine sahip bir kullanıcı, ls komutu ile o dizinin içindeki dosya ve alt dizinleri listeleyebilir. Ama o dosyaları okuyamaz, çalıştıramaz, değiştiremez ve silemez.
6. deneme.txt adlı dosyada grup üyelerinin bütün erişim haklarını yoketmek için
$ chmod g –rwx deneme.txt
komutu verilir.
7. deneme.txt adlı dosyada bütün
kullanıcılara bütün erişim haklarını vermek için
$ chmod a +rwx deneme.txt
komutu verilir. Aynı işi
$ chmod 777 deneme.txt
komutu ile de yapabiliriz.
8.
Joker (*)
simgesi kullanılarak bir grup dosya ya da dizine erişim hakkı
verilebilir.
$ chmod go +r pr*
komutu,
g ve o ya pr ile başlayan bütün dosya ve dizinler için okuma izni verir. [
Joker (*) gizli dosyaları dahil etmez.]
9. Bir dizindeki bütün dosyalara g ve o nun erişim haklarını kaldırmak için
$ chmod og –rwx *
komutu verilir. Aynı işi
$ chmod 700 *
komutuyla da yapabiliriz.
Yukarıda açıkladığımız rwx erişim hakları yerine l, s, t harfleri gelebilir. uid (user ID) ya da gid (group ID) nin konulmuş olması halinde x yerine s gelir. Bir dosya açıldığında, başka kullanıcıların onu açamaması için l izni verilir. Bu izin r, w ya da x yerine getirilebilir. Bu tür izinler, programcılar için gereklidir; normal kullanıcılar buna gerekseme duymazlar. Bunların nasıl belirlendiğini görmek için, Unix Kılavuzuna bakınız.
l set
locking privilege [kitleme
hakkını belirleme]
s set
user or group ID mode [kullanıcı
ya da grup kimliği kipini belirleme]
t set
save text (sticki bit) mode [kaydedilen
text kipini belirleme ]
u user's
current permissions [kullanıcının
izni]
g group's
current permissions [grubun
izni]
o other's
current permissions [ötekilerin
izni]