Linux – Dizin Yapısı ve Dosya Sistemi Hiyerarşisi

Linux işletim sistemi ile ilk tanıştığım zamanlarda bana en karmaşık gelen konulardan bir tanesi, Linux’un dizin yapısı ve dosya hiyerarşisi idi. Çünkü o ana kadar hayatım boyunca Windows işletim sistemlerini kullanmıştım, tamamen adapte olmuştum ve alışkanlık edinmiştim. Tabi ki yeteri kadar zaman sahibi iseniz ve biraz da meraklıysanız kolaylıkla üstesinden gelebiliyorsunuz. Ben de yeteri kadar zaman ayırdıktan sonra, bana başta karmaşık gelen bu yapıyı anlamayı başardım. Hatta, Linux dizin yapısını, dosya sistemi hiyerarşisini öğrendikten sonra Windows’u ve macOS’u daha iyi anladığımı düşünüyorum.  Bu yazımda, meraklılarına belki biraz faydası dokunur ümidi ile öğrendiklerimi paylaşıyorum. Umarım faydalanacağız bir yazı olur.

Benim için ilk sıkıntı, Linux işletim sisteminde dosya sisteminin kök dizininin neresi olduğuydu. Çünkü Windows işletim sisteminde bu bir harf ile gösteriliyordu ve genelde “C:\” diziniydi. Bu da,  dizinin direkt olarak diski gösterdiği anlamına geliyordu. Yani sizin işletim sisteminizin kurulu olduğu bir disk var ve “C:\” dizini bu diskin adresiydi. Linux işletim sisteminde ise durum bundan tamamen farklı. Linux işletim sistemlerinde kök dizin herhangi bir fiziksel cihaz ya da fiziksel yer ile ilişkilendirilmez. Linux işletim sistemlerinde kök dizinin mantıksal yeri “/” sembolü gösterilir. (Burada “mantıksal” kelimesini kullanmamın nedeni, önceki cümlelerde de bahsettiğim gibi, Linux kök dizininin fiziksel bir cihaz veya fiziksel bir yer ile ilişkili olmamasıdır.) Geriye kalan tüm dizinler “/” sembolü ile gösterilen kök dizinin altındadır ve bu “geriye kalan” diye tabir ettiğim dizinler ile bu dizinlerin içerikleri rast gele üretilmiş değildir.

FilesystemHierarchyStandard (FHS), Linux ve diğer Unix benzeri işletim sistemlerinde, dizinleri ve bu dizinlerin içeriklerini belirleyen standarttır.

Bu standardı, Linux Vakfı (Linux Foundation) oturtmuştur ve geliştirilmesi ile desteklenmesine devam etmektedir. Linux Vakfı hakkında daha detaylı bilgi almak için bu linkteki yazıyı okuyabilirsiniz.

Yukarıda anlattığım kendi basit trajedik hikayem ve birkaç bilgilendirmeden sonra, gelin aşağıdaki resme bir göz atalım:

Linux işletim sistemi dizin yapısı

Linux işletim sistemi dizin yapısı

Biliyorum biliyorum biraz ürkütücü geldi 🙂 . Ancak hiç korkulacak bir durum yok. Siz Linux işletim sistemi üzerinde çalışmaya başladıktan bir süre sonra şunu fark edeceksiniz: Siz bu dizinleri nasıl olduysa bir şekilde öğrenmişsiniz 🙂 . Bir program kurarken, bir konfigürasyon yaparken, bir dosyayı bir yerden başka bir yere kopyalarken bu dizinler ile ister istemez çalışmış ve öğrenmiş olacaksınız. Sadece biraz zamana ihtiyacınız var. Şimdi gelin, biraz Linux – dosya felsefesi üzerine konuşalım ve sonrasında yukarıda incelediğimiz resimdeki dizinleri, resme eklemediğim diğer bazı dizinleri ve tüm bu dizinlere ait birtakım önemli alt dizinleri inceleyelim.

Linux’te herşey bir dosyadır, eğer dosya değil ise çalışan bir iş parçasıdır.

Linux işletim sisteminin tasarımını şekillendiren birkaç fikir ve konsept vardır. Yukarıdaki cümle de, Linux işletim sisteminin dosya anlayışını şekillendiren felsefeyi anlamamıza olanak tanıyan basitleştirilmiş, kısmen de olsa açıklayıcı bir ifadedir. Daha geniş bir şekilde ifade edecek olursak; dosya dediğimiz şey aslında okuyabildiğimiz ve yazabildiğimiz bir byte yığınıdır. Yeri gelmişken, bu felsefeyi Linus Torvalds amcamız (kendisigithub hesabı) kesin olarak şöyle ifade eder:

Everything is a stream of bytes in Linux – Linux’te herşey bir byte akışıdır.

Bu şekilde daha teknik ifade edildiği zaman, sistemimizde gerçekleşen dosya okuma ve dosya yazma işlemlerini (I/O operations) daha rahat anlayabiliyoruz. Bu I/O işlemlerini Linux perspektifinden ayrıca anlatacağım bir yazı yazacağım eğer ilginizi çeker ise, ancak şimdilik şu yazıyı okuyabilirsiniz.

Dizinlere göz atmanın hemen öncesinde aşağıdaki iki adet hatırlatmayı yapmak istiyorum:

Linux dizin ve dosya yapısı, büyük ve küçük harflere duyarlıdır.

Windows işletim sistemlerinde “C:\BEN_KOCAMANIM” ile “c:\ben_kocamanim” aynı dizindir, aynı yeri adresler. Ancak Linux işletim sisteminde “/var/log/BEN_DAHA_KOCAMANIM” ile “/var/log/ben_daha_kocamanim” birbirinden tamamen farklı dizinlerdir, yani farklı yerleri adreslerler.

Sola yatık slash – Sağa yatık slash

Windows işletim sisteminde dizin-dosya adreslerinde sola yatık slash “\” kullanılırken, Linux işletim sistemlerinde sağa yatak slash “/” kullanılır. Bir önceki örnekte görüldüğü gibi.

“C:” , “D:” gibi sürücüler vs “/”

Windows işletim sisteminde diskler veya disk bölümleri çeşitli harfler ile adreslenir (c, d, e, f vb.). Linux’te ise böyle bir adresleme yoktur ve herşey “/” dizini altındadır.

Açık dosyaları silmek

Windows işletim sistemi genellikle açık olan dosyaları silmenize izin vermez ve sizden önce bu açık olan dosyayı kapatmanızı ister. Linux işletim sisteminde ise genellikle böyle bir kısıtlayıcılık yoktur.

Artık önemli dizinleri ve alt dizinleri inceleyebiliriz.

  • /
    • Her bir dosya ve dizin “/” kök dizini altındadır.
    • Sadece root kullanıcısı bu dizin altında yazmaya yetkilidir.
    • /root dizini ile karıştırılmamalıdır.
  • /bin – User Binaries – Kullanıcı Çalıştırılabilir Dosyaları
    • “Binaries” kelimesinin kısaltmasıdır.
    • Temel ve yaygın Linux komutlarının çalıştırılabilir dosyalarının olduğu dizindir.
    • Sistemdeki tüm kullanıcıların çalıştırabileceği komutların, çalıştırılabilir dosyaları bu dizinde tutulur.
    • Örn: ps, ls, ping, grep, cp
  • /sbin – System Binaries – Sistem Çalıştırılabilir Dosyaları
    • /bin dizini gibi bu dizinde çalıştırılabilir dosyaları tutar.
    • /bin dizininden farklı olarak buradaki çalıştırılabilir dosyalar genelde sistem yöneticisi tarafından kullanılır.
    • Örn: iptables, reboot, fdisk, ifconfig, swapon, fsck, init, route
  • /etc – Configuration Files – Konfigürasyon Dosyaları
    • Tüm programların ihtiyaç duyduğu konfigürasyon dosyaları bu dizinde saklanır.
    • Bu dizinde ayrıca, kurulumunu yaptığımız programların başlatma ve durdurma betikleri de bulunabilir.
    • Örn: /etc/apache.conf, /etc/resolv.conf
  •  /dev – Device Files – Cihaz Dosyaları
    • Sisteme bağlı tüm cihazlara ait dosyaları  tutar.
    • Örn: /dev/null, /dev/tty1, /dev/sda
  • /proc – Process Information – İş parçası bilgisi
    • Sistemde çalışan iş parçaları hakkında bilgileri içeren dosyaları barındırır.
    • Sistem kaynakları hakkında bilgiler içeren dosyalar bu dizin altındadır.
    • Örn: /proc/uptime, /proc/{pid}
    • Bu dizin “pseudo filesystem” ve/veya “virtual filesystem” yapısındadır. Detaylı bilgi için buradan.
  • /var  – Variable Files – Değşken Dosyalar
    • İçeriğinin giderek artması beklenen dosyalar (özellikle log dosyaları) bu dizin altında tutulur.
    • Örn: /var/log, /var/lib, /var/mail, /var/spool, /var/lock, /var/tmp önemli diğer alt dizinleridir.
  • /tmp – Temporary Files – Geçici Dosyalar
    • Sistem ve/veya kullanıcılar tarafından yaratılan geçici dosyalar bu dizinde tutulur.
    • Bu dizin altındaki dosyalar, sistem yeniden başlatıldığında silinir.
  • /usr – User Programs – Kullanıcı Programları
    • İkinci seviye programlar yani kullanıcıların yükleyip kullandığı programlara ait çalıştırılabilir dosyalar, kütüphaneler, dökümantasyonlar ve kaynak kodlar bu dizin altında tutulur.
    • Eğer bir program /bin altında bulunamıyor ise /usr/bin dizinine bakılmalıdır. Örn: at, awk, cc, less, scp
    • /usr/sbin alt dizini sistem yöneticileri için bazı çalıştırılabilir dosyaları tutar. Eğer bir program /sbin altında bulunamıyor ise /usr/sbin dizini kontrol edilmelidir. Örn: atd, cron, sshd, useradd, userdel
    • /usr/lib dizini, /usr/bin ve /usr/sbin dizinlerindeki programlar için kütüphaneleri barındırır.
    • /usr/local dizini kullanıcının bir kaynaktan yüklediği programları barındırır. Örn: /usr/local/apache2
  • /home – Home Directories – Kullanıcı Profil Dizinleri
    • Sistemdeki tüm kullanıcıların kişisel dosyalarını sakladığı dizindir.
    • Örn: /home/bozok, /home/hasan, /home/burcu
  • /boot – Boot Loader Files – Önyükleme Dosyaları
    • Sistem önyüklemesi (sistemin ayağa kalkması) için gerekli dosyaları barındırır.
    • Linux kernel’e (Linux çekirdeği) ait initrd, vmlinux, grub dosyaları bu dizin altındadır.
  • /lib – System Libraries – Sistem Kütüphaneleri
    • /bin ve /sbin dizinleri altındaki programların ihtiyaç duydukları kütüphaneler bu dizinler altında konumlanmıştır.
    • Kütüphane dosya isimleri ld* veya lib*.so.* şeklinde ifade edilir.
    • Örn: ld-hasan-3.5.2.4.so, libbozok.so.2.7
  • /opt – Optional add-on Applications  – Opsiyonel Eklentiler
    • Çeşitli geliştiricilere ait eklentiler bu dizin altında tutulur.
    • Eklenti uygulamalar /opt/ veya /opt/alt-dizin dizinlerine kurulmalıdır.
  • /mnt – Mount Directory – Bağlantı (monte) Dizini
    • Sistem yöneticilerinin çeşitli dosya sistemlerini bağladığı geçici dizindir.
  • /media – Removable Media Devices – Çıkarılabilir Medya Cihazları
    • Çıkarılabilir cihazlar için geçici bağlantı (monte) dizinidir.
    • Örn: /media/cdrom, /media/floppy, /media/usb
  • /srv – Service Data – Servis Verisi
    • Sistem tarafından verilen hizmetlerin verilerini tutar.
    • Örn: Web sunucular için veri ve betikler, FTP sunucusu tarafından sunulan veriler, versiyon kontrol sistemi tarafından sunulan veriler

 

Linux işletim sisteminde kök dizin ve altındaki dizinler yukarıdaki şekildedir. Ancak şu da unutulmamalı, farklı Linux işletim sistemi dağıtımlarının büyük çoğunluğu, FHS standartlarına uymanın yanı sıra, kendilerine ait başka dizinleri de kök dizin altında barındırabilir.  Bazı Linux dağıtımları ise (GoboLinux, NixOS) FHS standartlarına uymayan kendi dosya sistemi uygulamaları geliştirmiştir. Linux dağıtımların listesine şuradan erişebilirsiniz.

Linux dizin ve dosya sistemi – hiyerarşisi üzerine ve Linux işletim sisteminin dosya ve dizin felsefesi üzerine aktarabileceğim çok ama çok bilgiler var. Ancak bu bilgileri tek yazı yerine, hem farklı yazılara hem de zamana yaymayı daha uygun buluyorum. Yine de, sorularınızı ya da detay istediğiniz konuları yorumlarda belirtirseniz, yazıları daha erken bir zamana alabilirim.

Hata yaptığım yerleri ve/veya yanlış bilgi olarak gördüğünüz yerleri kaynak gösterip belirtirseniz yazımı güncelleyip sizleri de yazıda etiketleyebilirim. Yazımı okuduğunuz ve bana zaman ayırdığınız için teşekkür eder, başarılar dilerim.

 


So, what do you think ?