close

Linux Directory Structure (Linux Dosya ve Dizin Yapısı)

Linux Directory Structure (Linux Dosya Ve Dizin Yapısı)

Linux Directory Structure

Bir önce ki makalemde File System hakkında bilgi vermiştim, şimdi Linux Dizin yapısına daha derinlemesine bir giriş yapacağız. Dosya sistemi iki genel yapıdan oluşur.

 • SuperBlock 

Dosya sisteminin boyutu, bütünü gibi bilgileri içeren bölümdür. Dosya sisteminde ki büyüklüğü, başlangıç/bitiş adreslerini, inode tablosunu, boş blok tablosunu ve veri bloklarının başlangıç adresleri gibi verileri saklar. Superblock aynı zamanda dosya sistemi ve işleyişinin düzgün olarak kalmasını sağlar. Yapı bir sebeple bozulursa bu sorunu giderebilecekler yazılımların çalışmasını sağlar.

 • Inode

Dosyanın ismi dışında bütün bilgilerini içeren bölümdür. Dosyanın ismi, dosya düğümünün numarasıyla birlikte bulunur. Dosya düğümü, veri bloklarının da numaralarını içerir. Bir dosya düğümünde belli sayıda veri bloğu için yer vardır. Daha fazla alana ihtiyaç duyulması durumunda dosya düğümünde dinamik olarak yeni bir yer ayrılır.



Günlükleme (Journaling)
 

Özelliği, bilgisayar üzerinde yapılan işlemlerin loglarının başka bir yerde tutulmasını sağlar. Bu özellik sayesinde yapılan son işlemlere ulaşılabilir. Herhangi bir sistem çökmesi durumunda, sistemde yapılan son işlemlere ulaşılıp bu işlemlerin tekrarlanmasıyla verilerin kaybedilmemesi sağlanır. Linux işletim sisteminde kullanılan en kararlı ve sağlam günlükleme sistemlerinden biri XFS dosya sistemidir.

Bazı dosya sistemleri, daha sonradan ulaşılacak veri bloklarının kopyalarını harfi harfine tutar,  bu günlüklere “fiziksel günlük(physical journal)” denir. Bu olayın gerçekleştiği dosya sistemine örnek olarak ETC3 dosya sistemi verilebilir. Bilgilerin sıkıştırılmış bir format içerisinde saklandığı günlüklere “mantıksal günlük (logical journal)”denir ve bu günlüklerin en çok kullanıldığı dosya sistemi XFS dosya sistemidir. Bu olay sayesinde, sistemden okunup yazılacak olan verinin boyutu azaltılmış olur ve işlemin hızlanması sağlanır.

Bilgisayar üzerinde yapılan işlem kayıtlarının (loglar) başka bir alanda tutulmasını sağlar. Bu özellik sayesinde yapılan son işlemlere ulaşılabilir. Sistem çökmesi gibi olası kriz senaryolarında sistemde yapılan en son işlemlere ulaşılabilir ve işlemlerin tekrarlanmasıyla verilerin kaybolmaması sağlanabilir. Oldukça kararlı çalışan ve Linux tabanlı çalışan önerilen günlükleme sistemlerinden biri XFS dosya sistemidir.

ETC3 dosya ssistemi örnek vermek gerekirse daha sonradan ulaşılması gereken bütün veri bloklarının kopyalarını harfi harfine tutar. Bu logların tutulduğu günlüklere Fiziksel günlük “(Physical journal)” denir. Bilgilerin sıkıştırılmış bir format içerisinde saklandığı günlüklere “mantıksal günlük (logical journal)”denir ve bu günlüklerin en çok kullanıldığı dosya sistemi XFS dosya sistemidir. Bu olay sayesinde, sistemden okunup yazılacak olan verinin boyutu azaltılmış olur ve işlemin hızlanması sağlanır.

Metadata-Only Günlükleme (Metadata-Only Journaling):

Bu günlükleme özelliği, sadece sistemde yapılan değişiklikleri, günlük içerisinde metadata adı verilen dosyaların içerisinde saklar. UNIX dosya sistemine dosya eklemek için yapılması gereken üç adım şöyledir:

  1. Dosyanın bulunduğu düğümün (inode) içerisindeki dosyanın büyüklüğünü arttırmak
  2. Dosyanın ekleneceği alanda olabilecek genişleme için yer ayırmak
  3. Eklenecek dosyanın, yeni ayrılmış alana yazılması

Metadata-Only günlükleme olayında, bu üçüncü basamak loglarda tutulmaz. Eğer üçüncü basamak gerçekleşmeyip birinci ve ikinci basamak kurtarma işlemi sırasında tekrarlanırsa, dosya çöplüğe atılır.



Linux Dosya Sistemi Yapısı

Linux, Unix‘de de olduğu gibi “Tekil Hiyerarşik Klasör Yapısını” kullanmaktadır(FSSTND). Root(kök) dizin olan ve / simgesiyle ifade edilen dizinden başlayıp, aşşağıya doğru dallanıp, budaklayarak uzayan bir sistem mevcuttur.  Linux / (root) klasöründen başlar ve boot işleminde belirlenen önem sırasına göre klasörleri dizer. Bir Unix geleneği olan büyük/küçük harf duyarlılığı Linux’da da bulunmaktadır. Windows işletim sisteminde “Belgeler” ile “belgeler” klasörü arasında hiç bir fark bulunmazken, Linux‘da bu ikisi ayrı iki klasördür ve birbirinden bağımsızdır. Linux dağıtımlarının büyük çoğunluğunun FSSTND standartında belirlenmiş klasörlerin dışında kök dizine bir iki klasör daha ekledikleri ya da nadiren bu yapıdan bir klasörü çıkardıkları görülmektedir.

Linux’ta Her Şey Bir Dosya
Linux
sistemi içerisinde bulunan her şey bir dosyadır. Sistem aygıtları, donanım kaynakları, hafıza içinde çalışan programlar gibi. Linux Kernel‘i, bir ethernet kartına ulaşmak isteyeceği zaman /dev/eth0 dosyasına okuma ve yazma yapar ya da bir sabit disk bölümü içim /dev/sda1 dosyasını kullanır. /dev dizini altında aygıtlar, /proc dizini altında sistem kaynakları ile ilgili dosyalar bulunur. Bu dosyalar hakkında unutulmaması gereken şey sistem açıldığında oluşturulan ve sistem kapandığında kaybolan dosyalardır ve sadece sistem programları tarafından erişebilirdir.



MOUNT

Mount, sisteme takılan, aktif edilmesi gereken USB, CD/DVD, DISK‘ler gibi çeşitli aygıtların sisteme bağlanarak kullanılabilir ve içeriğe erişebilir hale gelmesini sağlayan bağlama işlemidir.

Linux’ta, işletim sisteminin kurulu olduğu disk bölümü dışındaki bölümler genellikle, kullanıcı tarafında ilk erişim sağlanıncaya kadar bağlanmaz. Kullanıcı bilgisayarı açtıktan sonra dosya yöneticisi üzerinden (yani klasörler üzerinden) bir disk bölümüne tıkladığı anda o disk bölümü sisteme otomatikman bağlanır . Linux‘ta işletim sistemi içeren dizinin dışında bulunan bölümler genellikle üstünde bir işlem yapılıp, ilk erişim sağlanıncaya kadar mount edilmez. Kullanıcı, bilgisayarı açtıktan sonra dosya yöneticisi ya da Shell üzerinden bir disk ile etkilişime girdiği anda o disk bölümü sisteme otomatikman bağlanır. Bu şekilde göremediğiniz diskleri manuel olarakta mount edebilirsiniz.

Örnek verecek olursam bir USB taktınız,  “fdisk -l” komutunu kullanarak diskin Linux‘da bulunduğu dizini görmüş olacaksınız. Şu an için USB aygıtınız takılı ve Linux bunu tanıdı fakat mount edilmeden hiç bir işlem yapılamayacak, içinde bulunan verilere erişemeyeceksiniz.

Örneğimizden devam edelim. USB’miz /dev/sda1 şeklinde gösteriliyor.” mount /dev/sda1 /media/usb” komutunu kullanarak şu an USB Device’ımızı belirlediğimiz  /media/usb dizinine bağladık. Aygıtımızı çıkardığımız da unmount etmemiz gerektiğini unutmayalım.


Linux Tekil Hiyerarsik Klasör Yapısı (FSSTND) 

Linux Tekil Hiyerarşik Klasör Yapısı (FSSTND) standartı içinde bulunan, root dizini altında bulunan dizinlerin temel görevleri

• /bin
İşletim sistemini kullanmak için gereken temel gereksinim komutları /bin klasörü altında bulunmaktadır. Bunlara basit örnekler vermemiz gerekirse klasör açmak için kullandığımız “mkdir” komutu, dosya kopyalamak için kullandığımız “cp” komutu, dizinleri görüntüleyebileceğimiz “ls” komutu, herhangi bir klasör ya da dosyanın yerini başka bir yola(path) taşımak için kullandığımız “mv” komutu, bir klasör ya da dosyayı silmek için kullandığımız “rm” komutu bulunmaktadır.

Sistem boot ediliğinde, ilk olarak /bin klasörü çalışır hale gelir. Linux sistemimiz de ne kadar ağır bir sorun olursa olsun /bin klasörü içinde bulunan komutlar çalışmaya devam eder. Sistemimiz de olası bir sorun meydana geldiğinde /bin klasörü altında bulunan komutları kullanarak sistemimizi kurtarabilir/onarabiliriz.

• /boot
Boot
, işletim sisteminin yüklenme evresidir. /boot dizini içinde, boot işlemi için gereksinim duyulan tüm dosyalar vardır. (Kernel görüntüsü, sistem haritası, önyükleyici yapılandırmaları gibi.) Bilgisayarın başlangıç (boot) aşamasında gerekmeyen ayar ve yapılandırma dosyaları burada bulunmaz; başka klasörlerden gerektiği zamanlarda yüklenir.

• /dev
Yukarıda Linux’ta bulunan her şeyin bir dosya olduğundan bahsetmiştim. Tekrar örnek vermem gerekirse USB girişleri, paralel portlar, CD sürücüleri, Input/Output dosyaları, Sabit diskler gibi bütün aygıtlar ve bilgisayarın desteklediği tüm aygıtlar  /dev dizini altında tutulan dosyalardan ibarettir. Örneğin /dev/sda1 dosyası sabit diskinizi temsil eder. Bunları programlar vasıtasıyla kullanırız fakat bu dizinler üzerinden de doğrudan müdahele edebilmek mümkündür.

• /etc

Bu dizinde çalıştırılabilir dosyalar yerine, birçok programın ve sistemin yapılandırma dosyaları ve dizinleri saklanır. Etc’nin içindeki bazı alt dizinler ve dosyalar:

  • skel: Kullanıcı hesabı açıldığında kullanıcı dizinine kopyalanan dosyaların bulunduğu bölümdür.
  • inittab: Sistem başlatıldığında ya da herhangi bi çalışma anında hangi processlerin çalışmakta olduğunu gösteren dosyadır. Bu dosyada uygun değişiklikleri yapılarak, sistem başlatıldığında hangi işletim sisteminin yüklenmesi gerektiğini ya da ctrl+alt+del e basıldığında bilgisayarın ne yapacağını ayarlanabilir.
  • fstab: Çeşitli dosya sistemlerinin ve bağlantı konumlarının (mount pointers) ayrıntılı açıklamalarını tutan dosyadır.
  • rc.d:(run commands) rc dosyalarının bulunduğu bölümdür. Rc dosyaları başlangıç betiklerinin içerir. Yani bir programın nasıl başlaması gerektiğini kontrol eder. Mesela vim metin düzenleyici açıldığında, hangi ayarlarla başlayacağını “.vimrc” dosyasına bakarak anlar. Ayrıca rc.0,rc.1..rc.6 ya kadar olan dosyalar ise bilgisayarınızın hangi seviyede çalıştığına dair bilgiler içerir. 0. level durma,1. level tek kullanıcılı seviye,4. level çok kullanıcılı seviyeyi,6. level ise yeniden yükleme (reboot) seviyesini gösterir. Rc.local bilgisayarın açılış işlemleri bittikten sonra çalıştırılır. Eğer bilgisayarın, her açıldığında farklı birşey daha yapması isteniyorsa bu dosyaya gerekli komutlar eklenebilir. Rc sistemini kullanmayan bazı dağıtımlar da bulunmaktadır.(örneğin:pardus)
  • passwd: Kullanıcılara ait çeşitli bilgilerin bulunduğu ve kullanıcıların tanımlandığı bölümdür.
  • motd: Kullanıcı sistemi başlattığında, ekrana basılması istenen mesajlar burada tutulur.
  • profile: sisteme girildiğinde çalıştırılması istenen dosyalar saklandığı yerdir.
  • X11:Grafik arayüzünü(X window) yapılandırma dosyalarının bulunduğu yerdir.

• /lib
Çekirdek modülleri ve paylaşılan kütüphane dosyaları bu klasörde bulunur. Var olan çekirdek modüllerini /lib/modules/[versiyon_numarasi] içerisinde bulabilirsiniz. Bahsedilen kütüphane dosyalarıysa, sistemi başlatmak ve /bin ile /sbin içerisindeki komutları çalıştırmak için gereklidir. Paylaşılan kütüphane dosyalarını, Windows’ta DLL ile eş tutabiliriz. Linux’ta kütüphane dosyalarının sonu “.so” ile biter.

Kernel Modules (Çekirdek Modülleri) ve paylaşılan kütüphane dosyaları bu dizinde içerisinde bulunur(Python, Ruby, Perl, C gibi).  Var olan kernel modüllerini /lib/modules[versiyon_numarası) içerisinde bulabilirsiniz. Kütüphane dosyaları ise sistemi başlatmak ve /bin /sbin içerisinde ki komutları çalıştırmak için gereklidir. Linux’ta kütüphane dosyalarının uzantısı “.so” uzantısıdır.

• /media 
CD-Rom
, disket sürücü, flash bellek gibi çıkarılabilir aygıtlar buraya bağlanır. En basit tanımla, çıkarılabilir aygıtların, bağlantı noktası (mount point) olarak düşünebilirsiniz

• /mnt
İşletim sisteminin kurulu olduğu disk bölümü hariç olmak üzere sistem başlangıcında bağlanan sabit disk bölümleri ve donanım aygıtlarının bağlanma noktasıdır. (İşletim sisteminin kurulu olduğu disk bölümünün içeriği ise doğrudan / (kök dizin) altında bulunur.)

Bağlama(mount) işlemi, bir disk bölümünün sisteme bağlanarak kullanıma hazır hâle gelmesi demektir. Nereye bağladığınız sizin tercihinizdir, değiştirmeniz mümkündür. Yani bir diski, /media veya /mnt klasörüne ya da bir başka yere bağlamanız fark etmeyecektir. /media ve /mnt genel kabul görmüş bağlantı noktalarıdır.

• /opt
İşletim sistemimizden bağımsız, sistem için zorunlu olmayan 3.parti uygulamaları bu dizinde tutulur. Tabii ki siz herhangi bir uygulamayı kurarken farklı br dizin altına da kurabilirsiniz ancak unutmamalısınız ki genel kabul gören dosya/dizin sistemini anlatıyoruz.

• /sbin
Linux’ta
normal kullanıcının kullanabileceği komutlarla, kök kullanıcının (root) kullanabileceği komutlar ayrılmıştır. root tarafından kullanılacak bakım ve yönetim için kullanılan önemli programlar, /sbin altında tutulur. Daha az öneme sahip yönetim komutlarıysa, /usr/sbin klasöründedir. Eğer yerelde, yani kullandığınız makineye özgü kök kullanıcı (root) komutları bulunuyorsa, bunları da /usr/local/sbin altında bulabilirsiniz.

• /srv
Sistemin sunduğu servislerin ve datalarının bulunduğu bölümdür.

• /tmp
Geçici dosyaların saklanması için kullanılan yerdir . Sistem başlatıldıktan sonra bu görevi “/var/tmp” dosyası üstlenir. Bir program yüklediğinizde, sadece yükleme süresince kullanılan daha sonra lazım olmayacak dosyalar burada saklanır. Ancak bu dizinden bilinçsizce dosya silinmesi sistem çökmesine neden olabilir.

Geçici dosyaların saklanıldığı dizin burasıdır. Sistem boot edildikten sonra bu görevi /var/tmp dizini üstlenir. Bir program yüklendiğinde, sadece bu süreç içerisinde kullanılan ve daha sonra ihtiyacımız olmayan dosyalar da burada saklanır. Boyutu genellikler MB’lara bile ulaşmaz fakat dikkatli olmakta fayda var ne sildiğinizi bilmeden bu klasörü boşaltırsanız, sistem çökmesine kadar varan sorunlar yaşayabilirsiniz.

• /usr
Kurduğunuz pek çok program /usr içine kurulur. Her ne kadar Linux’ta kurulan bir programa ait tüm dosyalar /usr dizini içine atılmıyor olsa da /usr dizini Windows’taki Program Files klasörü ile benzer görev görmektedir. /opt adresi işletim sistemi dışında gelen 3.parti programlar içindir. Fakat işletim sistemi aracılığıyla ya da paket yönetim sistemlerini kullanarak yüklediğiniz her şey /usr altına aktarılır. Aynı zamanda yüklediğiniz programların çalışmak için ihtiyaç duyacağı kütüphane dosyaları, /usr/lib altındadır.

/usr, daha geniş bir tanımla; tüm kullanıcılarca paylaşılan verileri (programlar, komutlar, kütüphaneler, dokümanlar gibi) içeren dizindir. /usr ile ilgili söylenebilecek bir başka nokta da “local” klasörüdür. Linux, sunucu olarak birçok istemciye hizmet verebilecek bir işletim sistemidir. Bir Linux sunucu (server) kurarsanız, ona bağlanan yüzlerce istemci (client) olabilir. Her istemci bilgisayara, /usr altındaki programların ayrı ayrı yüklenmesi gerekmez; bir başka konumdan bu komutları çalıştırabilirsiniz. Ancak /usr altında bulunan “local” klasörü sadece kullandığınız makineye özeldir. Örneğin /usr/local/bin klasörü içinde bulunan bütün komutlar, direkt olarak kullandığınız makineye yüklenmiştir. /usr/bin komutları ise geneldir ve bir ağ üstündeki bütün makinelerden erişilebilir. “local” gördüğünüzde, bunun sadece sizin makinenize özel olduğunu bilin.

• /var
Programların değişken sistem dosyalarını tutan bölümdür. Örneğin; programların çalışma sırasında kullandığı uygulamaların anlık durumları(/var/lib), yazıcıya gönderilen sayfalar(/var/spool),sistem hatalarının ya da mesajlarının saklandığı kayıt sayfaları(/var/log),o anda çalışan programların(process) Iplerini tutan dosyalar(/var/run) bu tip dosyalardır. Bu dosyaların boyutları ve sayısı o anki duruma göre değişebilmektedir. Geçici dosyaların /usr‘dan ayrı bir dizinde saklanmasının nedeni ise bazen /usr dizininin salt-okunur yapılmasındandır. Salt-okunur dizinde,bu dosyaların değiştirilmesi olanaksızdır.

• /root
Linux/Unix sistemlerde bulunan her şeye, her türlü müdahelede bulunabilme yetkisine sahip, “root” adıyla tanımlanmış bir kullanıcı hesabı vardır. Aslında bu dizin, kendisinin /home dizini diyebiliriz. Son kullanıcının sistemi root hesabıyla boot etmesi ya da root hesabıyla logon bir şekilde çalışmasına ihtiyaç olunmaması ve bu sürecin bilgisiz kişiler tarafından yönetildiğinde güvenlik açığı ortaya çıkarabileceği sebeplerden ötürü genellikle Windows’ta bulunan administrator hesabı nasıl açılışta bize verilmiyorsa, Linux öntanıtımlarında da genellikle bir kullanıcı hesabı yaratarak giriş yaparız ve geçici root hakları elde edilir(su).

/home
Belirli bir kullanıcının kişisel dosyalarının (Browser ayarları, masaüstü ayarları, bazı programlar auth edilmiş şifreler gibi) saklandığı yerdir. “~” işareti ile gösterilir. /home dizinine sadece dizin sahibi kullanıcı ve superuser/root kullanıcısı erişebilir.  Home dizini, sistem geneli verilerin kişisel bilgilerden ayrılması, herhangi bir çökme olması durumunda dosyaların kurtarılması ve yedeklenmesi açısından önem taşır. Ayrıca kişisel dosyalara virüs, trojen bulaşması durumunda, dosyaların göreceği zarar bu kullanıcının hesabındaki dosyalarla sınırlıdır. Herhangi bir anda cd ~username yazmak home dosyasına geçişi sağlar. Bu sebeple internet sunucuları /~xxxx gibi bir adres yazıldığında kullanıcının ev sayfasını açar.

Kaelnoxa

The author Kaelnoxa

Leave a Response