linux filesytem

Docker öğrenme sürecimde storage ve volumes konusuna girdiğimde ilk önce Linux için filesytem mantığını daha net anlamam gerektiğini düşündüm. Ee belirli bir altyapının olmaması ve ufak adımlarla ilerlediğimden dolayı bu konular çok temel bilgiler olabilir; fakat benim için temel olmasından ziyade yeni bir bilgi kategorisinde yer almakta. Diğer taraftan öğrenmeyi öğrenme sürecim okuma-not alma-uygulama gibi bir süreçten geçiyor. Bu blogta zaten not alma sürecimin eğlenceli bir parçası o halde Linux Filesystem konusu hakkında bir iki not alalım.

Linux işletim sisteminde her şey bir file yanı dosyadır; partitionlar, klasörler, text dosyaları, resimler kısaca Linux her şeyi birer dosya olarak düşünür ve case-sensitive'dir. Dosya sistemine geçmeden önce dosya türlerini de kısaca not edelim.

Regular files (-), programları, executable (yürütülebilir) dosyaları ve text-metin dosyalarını temsil eder.

Directory files (d), bunu Türkçe olarak çevirmek istersek klasörleri temsil etmektedir.

Special files, özel dosyal türlerini temsil eder: block file (b), socket file (s), symbolic link file (l), named pipe file (p), character device file (c).

Bazı temel Linux dosya komutlarını da listeledikten sonra filesystem konusuna geçebiliriz.

file Dosya tipini tanımlar.
touch Yeni bir dosya oluşturur.
rm Dosyayı siler.
cp Dosyayı kopyalar.
mv Dosyayı taşır veya ismini değiştirir.
mkdir Yeni bir klasör oluşturur.
ls Dosyaları listeler.

 


Linux dosya sistemi (filesystem - buradan sonra Türkçe kullanacağım) disk veya partition'da bulunan tüm dosyaların/verilerin yapılandırılmış koleksiyonudur. Bu tanımın çok açıklayıcı olduğunu düşünmüyorum. İlk olarak neden bir dosya sistemine ihtiyacımız var? ve bu sistemin asıl amacı nedir? Bunlara yanıt arayalım. Büyük ihtimalle teknolojiyi kullanan en küçük birimler biz bireylerizdir. En azından ekonomide öyle diyoruz; ekonominin en küçük birimleri bireylerdir. Herhangi bir sistemin kullanıcısı olan bireylerin bile ihtiyaç duyduğu temel ihtiyaçlardan birisi verilerin saklaması olacaktır. Mobil cihazlarda saklanan fotoğraflar, kişiler, mesajlar, uygulamalar; bilgisayarlarda sakladığımız metinler, kişisel özelleştirmelerimiz, şifrelerimiz; oyun konsollarında sakladığımız oyunlar kısaca tüm bunların kalıcı olarak saklanmasını isteriz yani veriyi saklamak. Buradan sonra ben bilgisayar üzerinden açıklamaya devam edeceğim. Genel bir kullanım amacı olan bir bilgisayardan verileri saklamasını istememiz gayet doğal bir istek olacaktır. Bu istek üzerine de bilgisayarlar verileri Hard Disk Drive (HDD) veya eşdeğerlerinde saklayacaktır. Aslında bilgisayarlar verileri RAM üzerinde de saklayabilmektedir; fakat basit bir düşünce ile bunun bazı eksik yönleri bulunmaktadır. RAM'ler geçicidir, verileri kalıcı olarak saklayamaz. Tamam hemen şaha kalkmayalım; RAM'ler ile verileri kalıcı olarak da saklayabiliriz; fakat bu oldukça maliyetli bir yaklaşım olacaktır. Herhangi bir bilgisayar donanımı alırken boyut-tür karşılaştırması yapmanız ne demek istediğimi açıklayacaktır. Mantık açısından en düşük maliyetle en fazla bilgiyi saklamayı isteriz bundan dolayı RAM'ler pek mantıklı olmayacaktır. O halde neden disklere ihtiyacımız olduğunu anlamışızdır. Sorumuza buradan da basit bir cevap verebiliriz. Verileri saklamak için disklere ihtiyacımız vardır. Dosya sisteminin de nihai amacı, verilerin kalıcı olarak depolanması sağlamaktır; bu amaç onun nihai amacıdır. Bununla birlikte dosya sisteminin farklı işlevleri de bulunmaktadır. Örneğin, dosya sistemleri, daha yönetilebilir bir süreç için namespaceler sağlar. Namespacelerin'de hiyerarşik yapısını desteklemek gibi pek çok mantıksal yapı için de metadata yapısı sağlar. Daha modern dosya sistemleri, dizinlere veya dosyalara erişim için güvenlik modeli sağlar. Çok temel düzeyde dosya sistemlerinin bu tarz görevleri ve yaklaşımları vardır. Linux bu süreci iki parçalı veya bölümlü yazılım ile daha verimli bir şekilde sunmaktadır. Bu konuya kısaca değindikten sonra Linux'ta klasör-dizin yapısına geçelim.

Linux, bütün süreci tek bir parça halinde ele almaktan ziyade, küçük parçalar halinde yönetilebilir bir dizin yapısı sağlamaktadır. Bu yaklaşım tabii UNIX'ten gelmektedir. Diğer işletim sistemlerinde de olduğu gibi Linux'ta da bu yapı tree yaklaşımı ile yapılandırılmaktadır; fakat daha anlaşılır ve yönetilebilir bir yapıya sahiptir. Bu yapıya yakında bakalım.

$ tree -x /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin -> usr/sbin
├── tmp
├── usr
└── var

Bunları kısa bir özetle yakından incelersek:

/ (root filesystem), dosya sisteminin en üst düzey dizinidir.

/bin, user tarafından yürütülebilir (executable) dosyaları içerir.

/boot, Linux işletim sistemini başlatmak için gereken statik bootloader, kernel executable ve yapılandırma dosyalarını içerir.

/dev, bilgisayardaki her bir aygıta ait dosyaları içerir.

/etc, ana bilgisayar için sistem yapılandırma dosyalarını içerir.

/home, kullanıcı dosyalarının yer aldığı dizindir. Her bir kullanıcı için alt dizin bulunur.

/lib, sistemi başlatmak içn gerekli olan kitaplık (library) dosyaları içerir.

/lost+found, dosya sisteminde bulunan "orphaned (artık)" veya bozuk dosya parçalarının tutulduğu dizin.

/media, harici çıkarılabilir medya aygıtlarını (USB gibi) mount etmek için kullanılan dizin.

/mnt, USB gibi depolama aygıtlarını mount etmek için kullanılan geçici dizin. (yazının sonunda /media ve /mnt arasındaki farkı yazacağım.)

/opt, isteğe bağlı dosyaların bulunduğu dizin. Diğer bir ifade ile sistemin parçası olmayan yazılımların yüklenmesi için ayrılan dizindir.

/proc, derin bir açıklaması vardır. Bunu araştırın. Kısaca kernel data yapılarına arayüz (interface) sağlayan sözde bir dosya sistemidir. Diğer bir ifade ile gerçek bir dosya sistemi değildir; sanal bir dosya sistemidir.

/root, "/" root filesystem ile karıştırılmaması gerekir. root kullanıcısı için home dizinidir.

/sbin, sistem yönetimi için kullanılan yardımcı programların depolandığı dizindir. Sistemi başlatmak, geri yüklemek, kurtarmak veya onarmak gibi gerekli binary dosyaları içerir.

/tmp, geçici dizindir. İşletim sistemi dahil olmak üzere birçok program geçici dosylarını saklamak için bu dizini kullanır.

/usr, kullanıcı programlarının ve dosyalarının bulunduğu dizindir.

/var, değişken veri dosyalarının saklandığı dizindir. Log dosyaları, database dosyları, web dosyaları gibi dosyaları içerir.

Bu dizinlerin her biri hakkında ayrıntılar için resmi Linux Filesystem Hierarchy Standard (FHS) web sayfasına bakmanızı tavsiye ederim. Linki buraya bırakıyorum.


İletişime geçmek, yorum bırakmak veya hatalarımı düzetlmek istersen mail atabilirsin.

iletişim için tıklama yeri