27 Haziran 2018 Çarşamba

ORANGE PI CHMOD VE DOSYA İZİNLERİ

Chmod - Dosya İzinleri ve C dosyası oluşturma

Chmod komutu, dosya ve dizin izinlerini değiştirmek için kullanılır. Linux ve diğer Unix işletim sistemlerinde her bir dosyanın, dosyaya kimlerin erişebileceği ve nasıl erişebileceklerini tanımlayan bir dizi kural vardır. Bu kurallara dayanarak izinleri "change mod" kelimelerinden türetilen chmod komutu ile ayarlarız.

chmod [izinler] [dosya_adı]

Chmod komutunu kullanmadan önce dosya erişimi ile alakalı birkaç konuyu bilmeliyiz.

Genel olarak 3 tür kullanıcı sınıfı vardır. Tüm kullanıcılar için ise "all" diyebiliriz. 
  • Dosyanın sahibi olan kullanıcı -> user - u
  • Dosyanın tanımlı sahip grubu -> group - g
  • Geri kalan herkes -> other - o
  • Tüm kullanıcılar için  -> all - a
Daha sonra bu kullanıcı türlerinden her birinin dosya veya dizine 3 farklı erişimi vardır.
  • Read -> Dosya içeriğine bakma - r
  • Write -> Dosya içeriğini değiştirme - w
  • Execute -> Dosyayı bir program gibi çalıştırma - x
Bu izinleri birbirine atarken "+", "-", ve "=" sembolleri ile atama yaparız. Bunu örneklerle açıklayalım.
  • "+" -> Belirtilen dosya sınıfları için belirtilen dosya izinlerinin etkinleştirilmesini sağlar. u+x demek diğer izinlere dokunmadan çalıştırma iznini etkinleştiriyoruz demektir.
  • "-" ->Belirtilen dosya sınıfları için belirtilen dosya izinlerinin devre dışı olmasını sağlar. u-x demek diğer izinlere dokunmadan çalıştırma iznini devre dışı bırakıyoruz demektir.
  • "=" Burada belirtilen kullanıcı için belirtilen izni etkinleştirir diğer izinleri ise devre dışı bırakır. u=x demek user kullanıcısı için çalıştırma iznini aktifleştirir ve okuma ve yazma iznini devre dışı bırakıyor demektir. Burada "=" sembolü kullanırsak belirtilen izinler dışındaki izinlerin devre dışı bırakılacağına dikkat edin.

İzinleri iki şekilde gösterebiliriz..

1-) Alfanümerik karakterlerle
Yukarıda belirttiğim harf şeklindeki karakterleri kullanarak gösterebiliriz. Örneğin;

  • a+rwx->tüm kullanıcılara  tüm izinleri verdiğini
                           
  •  a+rx ->tüm kullanıcılara okuma ve çalıştırma iznini verdiğini 
                         
  • u-x -> user kullanıcısı için çalıştırma iznini iptal ettiğini 
                           

  • o=r ->diğer kullanıcısı  için okumanın etkinleştirildiğini ve yazma ile çalıştırma izinin yasaklandığını gösterir.
                           


2-) Sekizlik tabandaki sayılarla

Burada r=4 , w=2 , x=1 değerine gelir ve izin atarken bu değerler kullanılır. Burada 3 basamak birden kullanılır ve ilk basamak user, ikinci basamak group, üçüncü basamak ise other kullanıcıları için izinleri belirtir. Bir kullanıcı için tüm izinleri vermek için  4+2+1=7 'den  dolayı 7' yi kullanırız. Yukarıdaki örneklerin aynısını bir de bu şekilde gösterelim ve daha iyi anlamaya çalışalım. Tabi


  • 777 -> tüm kullanıcılar için tüm izinleri aktif ettiğini 
  • +555 ->tüm kullanıcılara okuma ve çalıştırma iznini verdiğini 
                       
  • -100 ->user kullanıcısı için çalıştırma iznini iptal ettiğini
                       

  • +004 >diğer kullanıcısı  için okumanın etkinleştirildiğini ve yazma ile çalıştırma izinin yasaklandığını gösterir.
Burada bir şeye dikkat çekmek istiyorum. "+" ve "-" sembollerini kullandığımızda sadece belirtilen izin kadar ekleme veya çıkarma yapıyor. "-100" dediğimizde bu demek oluyor ki user kullanıcısı için çalıştırma iznini iptal et diğer izinlere dokunma, group kullanıcısı için hiçbir izne dokunma ve aynı şekilde other kullanıcısı içinde hiçbir izne dokunma anlamına geliyor. Hemen  bir örnekle buna bakalım.
  • +164 -> user kullanıcısı için çalıştırma iznini etkinleştir diğer izinlere dokunma("+" sembolü olduğu için verilen izinleri etkinleştirip geri kalan izinlere dokunmuyoruz), group kullanıcısı için 4+2'den okuma ve yazma iznini etkinleştir geri kalan izne dokunma ve son olarak da other kullanıcısı için yazma iznini etkinleştir geri kalan izinlere dokunma demek oluyor.
                      

  • 164 -> Bu kullanım direk atamadır. "=" sembolü ile işlevleri benzerdir. Bu ifade user kullanıcısı için çalıştırma iznini etkinleştirip okuma ve yazma iznini iptal ediyor, group kullanıcısı için yazma ve çalıştırma iznini etkinleştirip yazma iznini iptal ediyor ve son olarak da other kullanıcısı için okuma iznini etkinleştirip yazma ve çalıştırma iznini iptal ediyor.
                      


Linux' da varsayılan izinler bir dosya için 666, bir dizin için ise 777' dir. Fakat "umask" var ise bu izinler maskelenebilir.

Örnekler

Hiç bir izni olmaya file1, file2, file3 dosyaları üzerinden birkaç örnek yapalım.

  • chmod  +x file1 =>file1 dosyası için tüm kullanıcılara çalıştırma izni verecek. Diğer izinlere dokunulmayacak.
  • chmod 656 file2 =>file2 dosyası için user kullanıcısının 4(read)+2(write)=6' dan okuma ve yazma izni olacak fakat çalıştırma izni olmayacak, group kullanıcısının 4(read)+1(execute) =5' den okuma ve çalıştırma izni olacak fakat yazma izni olmayacak,  other kullanıcısının 4(read)+2(write)=6' dan okuma ve yazma izni olacak fakat çalıştırma izni olmayacak.

  • chmod u+rx file3 => file 3 dosyası için user kullanıcısına okuma ve çalıştırma izni verilecek. Diğer izinlere dokunulmayacak

ls -l ile dosyaları izinle birlikte listelediğimizde, "-rw-r-xrw- 1 admin admin 0 Jun 26 14:31 file2" şeklinde gözükür.
  • Burada ilk baştaki bölüm dosya mı dizin mi olduğunu belirtir. Eğer dosya ise "-", dizin ise "d" olur.
  • Daha sonraki kısımlar sırasıyla user, group ve other kullanıcıları için "rwx(okuma,yazma,çalıştırma)" izinleridir. Etkinleştirilmemiş herhangi bir izin için "-" işareti konulur. user kısmına bakacak olursak "rw-" demek okuma ve yazma ve çalıştırma izni yok demektir.
  •  Daha sonraki "1" bağlantı sayısını gösterir.
  • Sonraki "admin admin" kısmı dosya sahibini ve bağlı olduğu grubu gösterir.
  • Bir sonraki  "0" dosya boyutunu gösterir.
  • "Jun 26 14:31" kısmı son değiştirilme tarihini gösterir.
chmod  -R 755 dizin/   Komutu dizin altındaki bütün dosyalarının izinlerini ayarlar.



chmod --reference =file2 file1 komutu file2' nin izinlerini file1 için de ayarlar.


Umask

Sistemin dosya modunu  oluşturma maskesinin değeri döndürür veya bir değer ayarlar. Linux , Unix benzeri işletim sistemlerinde yeni dosyalar varsayılan izinlerle oluşturulur. Yukarıda dosya için 666 demiştim. Umask ile yeni dosya oluşturulurken  maske izinleri uygulayarak bu dosyanın izinleri kısıtlanabilir.

Umask komutu  bu maskeyi ayarlamak için veya o anki değerini göstermek için kullanılır.

Umask varsayılan değeri 0002' dir. Burada ilk baştaki 0 bizim için anlamsızdır. Sonraki basamaklar ise sırasıyla u,g,o kullanıcılarını temsil eder.

Bu demek oluyor ki bir dosya oluşturulduğunda varsayılan izni 666 demiştik. Fakat 002' lik bir maske uygulandığına göre, yani kısıtlama olduğuna göre 666-002 = 664' lük bir izne sahip olacaktır. Bunu alfanümerik karakterlerle gösterirsek "rw-rw-r--" olur.

Umask

Umask -S

Umask 022 -> bir maske değeri ayarlanır ve dosyalar bu maskedeki izinler kısıtlanarak oluşturulur.



Burada varsayılan umask değerinin 0002 olduğunu gördük. Daha sonra umask değerini 0022' ye ayarladık. Her iki durumda da oluşturduğumuz dosyalara bakarsak  maske işlemi rahatça anlaşılıyor.

Umask değerini daha spesifik şekilde ayarlayabiliriz. Örneğin

umask u=rw, go=  komutunu yazarsak bu demek oluyor ki yeni oluşturduğumuz dosyada user için okuma ve yazma izinleri olsun, diğer kullanıcılarda ise hiçbir izin olmasın demek oluyor. 


umask -S komutundan yeni oluşturulacak dosyada  hangi izinlerin olacağına bakabilirsiniz. Aşağıdaki resme bakarak daha detaylı görebilirsiniz.

                           


C kütüphanesi kurulumu ve C dosyası oluşturma


Bizim c kütüphanesini kurmak için build dosyasını çalıştırmamız gerekir fakat yukarıdaki fotoğrafa baktığımızda build dosyasının çalıştırma izni yok. Bu yüzden build dosyasına çalıştırma izni vermemiz gerekiyor.

chmod +x ./build veya chmod +x build diyerek çalıştırma izni veririz.

WiringOP kütüphanesini kurduk ve artık bir c dosyası oluşturup kodumuzu yazıp çalıştırmak istiyoruz. Bunun için touch komutu veya nano komutunu kullanarak yeni bir dosya oluşturmamız lazım. Burada da izin konusunu bilmek gerekiyor. Şimdi aşağıda birkaç farklı şekilde c dosyası oluşturduğumuzda ne gibi durumlarla karşılaşırız ona bakalım.


  • touch komutu ile bir c dosyası oluşturalım ve daha sonrasında yeni oluşturduğumuz dosyanın izinlerine bakalım. Bu izinler varsayılan izinler olacaktır. Yukarıda anlattığım umask konusuna bakarak bu durumu kendimiz de ayarlayabiliriz. İzinlere baktıktan sonra eğer yoksa çalıştırma izni verelim.


  • Bu sefer nano komutu ile bir c dosyası oluşturalım ve aynı şekilde bu dosyanın izinlerine bakalım. Burada izinlere baktığımızda görüyoruz ki dosya sahibi admin. Ayrıca user ve group kullanıcıları için okuma yazma izni etkinleştirilmiş durumda.


  • Bu sefer yine nano komutu ile bir dosya oluşturulacak fakat sudo ile yani root yetkisi ile oluşturacağız bu dosyayı. Burada da göreceğiz ki dosya sahibi root. Ayrıca okuma izni tüm kullanıcılar için etkin fakat yazma izni sadece root kullanıcısı için etkin. Yani siz dosyayı sudo nano dosya_adı yerine nano dosya_adı komutu ile açar ve bu dosyaya bir şeyler yazamazsınız. Yani dosyayı değiştirmeye iznini yoktur. Aşağıdaki fotoğrafa bakarak verilen hatayı görebiliriz.





Okuduğunuz için teşekkür ederim. Aklınıza takılan bir soru veya karşılaştığınız bir sorun olduğunda yorumlarda belirtebilirsiniz. Burada eksik olarak anlattığımı düşündüğünüz veya sizlerin gerekli olarak gördüğünüz bilgileri yine yorumlarda yazarsanız, bundan herkesin faydalanmasını sağlamış olursunuz. Herkese iyi çalışmalar.








Hiç yorum yok:

Yorum Gönder

Öne Çıkan Yayın

ORANGE PI PYTHON UART

ORANGE PI PYTHON UART Python kurulum  yazısında Orange pi'de Python konusuna giriş yapmıştık. Daha sonra  Python Gpio  yazısında gir...