CTO Zafer GÜREL - Linux’ta Dosya Sistemi

Güncelleme tarihi: 10 Eyl 2021


Yazar: CTO - Zafer GÜREL


Linux’u komut satırından kullanan biri olarak dosya sisteminde hangi dizinin ne anlama geldiğini bilmek işimi kolaylaştırıyor. Kullanım ve pratikle öğrenilen bu bilgileri derli toplu bir yere oturtmak için dosya sistemi yapısına tekrar dönmek istedim, biraz araştırma ve okuma ile kendime bazı notlar çıkardım. Bu yazıda, bu notlarımı paylaşıyorum.


Dosya Hiyerarşisi Standardı

Wikipedia’da, Linux dağıtımlarında, dizin yapısını ve dizin içeriklerini tanımlayan Dosya Hiyerarşisi Standardı (The Filesystem Hierarchy Standard — FHS) kullanıldığını görüyoruz. Bu standart aslında Unix sisteminin tasarımında kullanılan kuralları açıklayan bir referans [1], çoğu Linux dağıtımında da kullanılıyor. Bu standartın geliştirilmesi, yeni sürümlerinin çıkarılması Linux Foundation tarafından yapılmakta. [2]


Dosyalar, Dizinler ve Dizin Ağacı

Kısaca dosya sistemini anlatmak gerekirse Linux’ta dosya sistemi, dosya ve dizinlerden oluşur; dosyalar dizinler içinde tutulur. Dizinler, hiyerarşik bir yapı oluştururlar. Bu yapıya dizin ağacı da denir. En üstteki dizine, kök dizin (root directory) denir. Kök dizin altında dosyalar ve başka dizinler, bu dizinler altında da başka dosyalar ve dizinler bulunabilir ve bu sonsuza kadar tekrar edebilir. Bir dizinin altında bulunan dizinlere de alt dizin (subdirectory ya da subfolder) denir. Aşağıdaki resimde, Linux dosya sisteminin bir kısmını görebilirsiniz.

Linux kullanıyorsanız komut satırına man hier komutunu yazıp ya da bu linke [4] tıklayıp dosya sistemi hiyerarşisine ait detaylı bilgilere ulaşabilirsiniz.


Önemli Dizinler

  • / : Kök dizin (root directory). Dosya ağacının en üst noktası.

  • /bin: Tek kullanıcı modunda (single user mode) sistemi ayağa kaldırmak ya da düzeltmek için gerekli en az sayıda çalıştırılabilir programın olduğu dizindir.

/bin dizininde olan bazı programlar aşağıdadır: - bash: “Bourne Again Shell” isimli kabuk (shell) programı. Komut satırına girdiğimiz komutları işleyen, komut işleyicisi programı olarak çalışan uygulamalara kabul (shell) ismi veriliyor. Kabuk, hem komut satırına girilen komutları dikkate alarak (ls, cp gibi) sistemde kurulu diğer programları, hem de kendi anlayabileceği betik dilinde (Bash betik dili) yazılmış komutları çalıştırabiliyor. Örneğin aşağıdaki komutu, komut satırına yazdığınızda a.txt dosyasını b.txt dosyası olarak kopyalar.
cp a.txt b.txt
Aşağıdaki ise Bash betik dilinde yazılmış ufak bir betik. Yaptığı ise 1 ile 10 arasındaki sayıları, komut satırı arabirimine (veya terminale veya konsola) yazması.
for i in {1..10}; do echo $i; done
Kabuklar hakkında daha fazla bilgi için buraya [5]ve şuraya [6]bakabilirsiniz. cp: Bir dosya ya da dizini kopyalamak (copy) için kullanılır. mv: Bir dosya ya da dizinin yerini değiştirmek (move — başka bir deyişle ismini değiştirmek) için kullanılır. ls: Bir dizindeki dosyaları listelemek (list) için kullanılır. echo: Terminale (komut satırı arabirimine) metin yazdırmak için kullanılır. date: Sistem tarih ve saatini gösterir. uname: Sistem bilgilerini gösterir. Tüm sistem bilgisini görmek için “uname -a” kullanılır
  • /usr/bin: Bu dizin, çalıştırılabilir programlar için birincil dizindir. Normal kullanıcılar tarafından çalıştırılabilen çoğu program burada bulunmaktadır. Sistemin ayağa kaldırılması ya da düzeltilmesi için gerekli olmayan ve lokal olarak kurulmayan programlar burada bulunur.

Ubuntu 20'de /bin dizini /usr/bin dizinine sembolik link ile bağlanmış; /usr/bin dizinini gösteriyor. Yani /bin’de olması gereken çalıştırılabilir programlar da, Ubuntu 20'de /usr/bin altında toplanmış. Ama Debian 10'da ise bu iki dizin birbirinden ayrı. Windows üzerine WSL 2 kullanarak kurduğum Debian 10'da /bin dizininde 108, /usr/bin dizininde 290 dosya bulunmakta.
  • /sbin: Sistemin başlatılmasında ihtiyaç duyulan ve genelde normal kullanıcıların kullanmadığı programlar burada tutulur.

sbin dizindeki programlara birkaç örnek: fdisk: Disk bölümleme tablolarını (disk partition table) düzenlemek için kullanılır. shutdown: Sistemi kapatır. reboot: Sistemi yeniden başlatır. sysctl: Kernel parametrelerini sistem çalışırken değiştirmek için kullanılır.
  • /usr/sbin: Burada sistemin başlatılmasında gerek duyulmayan ve sistem yönetiminde kullanılan programlar bulunur.

/usr/sbin içindeki programlara örnekler: mount: Diskleri, dosya sistemine bağlamak (mount) etmek için kullanılır. adduser, deluser: Kullanıcı eklemek ve silmek için kullanılırlar. addgroup, delgroup: Kullanıcı grubu eklemek ve silmek için. usermod: Kullanıcı şifresini, gruplarını, kullanıcı ana dizinini değiştirmek için kullanılır. Ufak bir not: Ubuntu’da bin dizinin /usr/bin dizinine sembolik link ile bağlandığı gibi /sbin dizini de /usr/sbin dizinine sembolik link ile bağlanmıştır. Mesela Debian’da ise bu iki dizin birbirinden ayrıdır.
  • /dev: Özel ya da aygıt (fiziksel cihazlar) dosyaları buradadır. Bu dizin, “Linux’ta her şey bir dosyadır.” prensibi açısından önemli bir dizindir. Aslında teknik olarak, her şey bir dosyadır lafı; sistemdeki her şeyin (dosya, dizin, proses, socket, vs.) Linux çekirdeğindeki sanal dosya sistemi katmanında bir dosya tanımlayıcı (file descriptor) olarak soyutlanmasını ifade eder. Yani aslında her şey bir dosya tanımlayıcıdır demek daha net bir tanım olacaktır. /dev dizininde /dev/hda1, /dev/hda2 gibi ana diskin çeşitli bölümlemelerini temsil eder. Örneğin /dev/vda, sanal makinede sanal diskin bir bölümlemesini temsil eder.


stat komutu ile bir dosyanın özelliklerini görüntüleyebilirsiniz. Aşağıdaki komut ile /dev/vda dosyasının özelliklerini görebilirsiniz:

stat /dev/vda

Bu dizinde olan özel dosyalardan biri de /dev/urandom dosyasıdır. Aslında bu bir dosya değil, Linux çekirdeğinin rasgele sayı kaynağı aygıtıdır. Yine stat komutu ile bakıldığında, dosya tipi character special file olarak çıkar. Rasgele sayı üretmek için kullanılan bu özel dosya, okunmak istendiğinde hiç bitmeyen bir su kaynağı gibi rasgele veri üretir. Aşağıdaki gibi bir komut ile üretilen verinin ilk satırı alınabilir: od -d /dev/urandom | head -n 1

  • /etc: Sisteme kurulu uygulamaların ayarlarının olduğu dizindir. Bu dizinde bulunan en önemli alt dizinlerden ikisi systemd ve init.d dizinleridir. Linux’ta servislerin başlatılmasını sağlayan iki servis, init ve systemd servisleridir.init (System V Init olarak da isimlendirilir) daha eski olmakla beraber, systemd init’in eksiklerini gidermeye yönelik olarak geliştirilmiş [7] ve çoğu Linux dağıtımı tarafından desteklenmektedir. init ile başlatılabilen servislere ait başlatma ve durdurma betikleri, Ubuntu ve Debian’da /etc/init.d, Fedora’da ise /etc/rc.d/init.d lokasyonundadır. systemd ile başlatılabilen servislerin servis konfigürasyon dosyaları ise /etc/systemd altında bulunur. systemd ile ilgili şurada [8] ve şurada [9] da faydalı açıklamalar bulunmakta. Başka bir örnek de /etc/crontab dosyasıdır. Bu dosyada, belli zamanlarda çalıştırılması gereken takvimlendirilmiş işlerin kayıtlı olduğu dosyadır.

  • /home: Sisteme erişimi olan sistem yöneticisi kullanıcısı (root) dışındaki kullanıcıların bir nevi kişisel çalışma alanı olarak erişebildikleri, kullanıcı adlarıyla isimlendirilmiş dizinlerdir. Örneğin /home/mehmet gibi… Sistem yöneticisi kullanıcısının ana dizini /root dizinidir. Sistem yöneticisi ve dizinin sahibi kullanıcı (örneğimize göre bu kullanıcı mehmet oluyor) dışında başka kullanıcılar bu dizinlere erişemez. Komut satırında, “~” karakteri kullanıcının ana dizini olarak açılır. Yani kullanıcı dizinine gitmek için cd ~ komutu yeterlidir.

  • /mnt: Geçici olarak bağlanan dosya sistemleri (harici disk, sanal dosya sistemleri gibi) /mnt dizini altında ayrı dizin olarak bağlanır. /mnt/disk1 gibi…

  • /tmp: Geçici dosyaları kaydedilebildiği ve silinmesinde sakınca olmayan dosyalar burada tutulur. Tüm kullanıcıların bu dizine yazma hakkı vardır.

  • /var: Uygulamaların, çalışma süreleri boyunca ürettikleri dosyalar (log dosyaları, önbellek dosyaları, yazıcı dosyaları gibi) burada tutulur. En önemli dizinlerden biri, /var/log dizinidir. Bu dizinde, sistemin ve sistemde çalışan çoğu uygulamanın logları bulunur. Örnek vermek gerekirse /var/log/syslog, sistemdeki genel mesajların ve bilgilerin loglandığı önemli dosyalardan biridir.


Makale:


Kaynaklar:

  1. “Filesystem Hierarchy Standard”, https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

  2. ”Filesystem Hierarchy Standard”, https://wiki.linuxfoundation.org/lsb/fhs

  3. “Everything is a file?”, https://unix.stackexchange.com/a/225542

  4. “HIER”, https://man7.org/linux/man-pages/man7/hier.7.html

  5. “Unix shell”, https://en.wikipedia.org/wiki/Unix_shell

  6. “Bash (Unix shell)”, https://en.wikipedia.org/wiki/Bash_(Unix_shell)

  7. “The Story Behind ‘init’ and ‘systemd’: Why ‘init’ Needed to be Replaced with ‘systemd’ in Linux”, https://www.tecmint.com/systemd-replaces-init-in-linux/

  8. “Common location for systemd unit files on Ubuntu and RHEL”, https://unix.stackexchange.com/questions/469123/common-location-for-systemd-unit-files-on-ubuntu-and-rhel

  9. “Where do I put my systemd unit file?”, https://unix.stackexchange.com/a/367237

12 görüntüleme0 yorum

Son Paylaşımlar

Hepsini Gör