Microsoft
Windows gibi bir başka işletim sisteminden,
Linux'a
geçen son kullanıcıların en büyük sıkıntılarından biri, dosya
sistemleri arasındaki farklardır. Windows konusunda biraz tecrübeli kime
sorsanız, Program Files, Windows, System32, Documents and Settings
klasörleri hakkında bilgi verebilir. Ancak
Unix dünyası
farklıdır ve geçiş yapan kullanıcılar, hangi klasörün ne işe
yaradığını, hangisinin neyle alakalı olduğunu ilk bakışta çözemez. İşin
kötü tarafı, farklı dağıtımlar için, dosya sistem hiyerarşisi
değişebilir. Bu yazımızda, Linux Dokümantasyon Projesi (The Linux
Documentation Project) tarafından yayımlanmış
Linux Dosya Sistemi Hiyerarşisini baz alarak, sizlere Linux dosya sistemi hakkında bilgi vereceğiz. Eğer daha çok bilgi almak isterseniz
The Linux Documentation Project web sitesini ziyaret etmenizi tavsiye ederim.
Dosya Sistemi Nedir?
Dosya
sistemi, işletim sisteminin bir disk veya bölüm (partition) üzerindeki
dosyaları takip edebilmesi için oluşturulmuş yöntem ve veri yapıları
bütünüdür. Dosya sistemi farklı anlamlar için de kullanılıyor. Örneğin
iki diski olan bir kullanıcının "İki dosya sistemim var." dediğini
duymuşsunuzdur. Buna şimdilik girmeyelim. Bizi ilgilendiren Linux'taki
dosya yapısı.
Linux, bir Unix klonudur. Bu yüzden "Tekil Hiyerarşik Klasör Yapısı"nı benimsemiştir. Her şey / (slash) simgesiyle ifade edilen
root klasöründen
başlar, aşağıya doğru iner. Windows'taki gibi C: D: şeklinde sözde
sürücüler (drivers) bulunmaz. Windows ortamında, dosyalarınızı C
sürücüsü, D veya E sürücüsü gibi her yere koyabilirsiniz. Bu tarz dosya
sistemlerine, "Hiyerarşik Yapı"lı denmektedir.
Linux,
/ (root) klasöründen başlayarak, boot işlemindeki önem sırasına göre
klasörleri dizer. Windows'taki gibi \ (ters slash) işareti değil de /
(slash) işareti kullanılmasının nedenini merak edebilirsiniz. Bu
Linux'un Unix geleneğini takip etmesindendir. Ayrıca bu geleneğe uygun
olarak küçük büyük harf duyarlılığı önemli bir konudur. Örneğin;
Windows'ta KLASOR_ADI ve klasor_adi aynı şeydir; fark etmez. Ama
Linux'ta iki ayrı klasörden bahsediyor oluruz.
Windows'ta
bir program yüklediğinizde, programa ait dosyaların büyük çoğunluğu
kendi klasörüne yüklenir. Örneğin Matlab'i, C:\Program Files\Matlab
adresine kurduğunuzda, ona ait yardım dosyaları, bu klasör altındadır.
Fakat Linux farklı çalışır; program dokümanlarını
/usr/share/doc/program_adi/ altına koyarken, man(ual) dosyaları,
/usr/share/man/man[1-9] altına koyar. Eğer varsa info dosyaları da,
/usr/share/info altına atılır. Kısacası, sistem hiyerarşisine gömülen
bir yapı söz konusudur. Yüklenen herhangi bir program, işletim
sisteminin muhtelif yerlerine yerleşmektedir.
Linux'un
popülerleşmeye başladığı 90'ların ortalarında, dağıtım geliştiriciler,
dosyaları yerleştirmek için kendilerine en uygun şekilde çalıştılar;
belirli bir standart yoktu. Bu birçok soruna neden oldu. Bu anarşiyi
durdurmak için daha sonraları Linux Dosya Sistem Hiyerarşisi (kısaca
FSSTND) belirlendi. Bizim anlatacağımız yapı da bu standart dahilinde.
Linux
ve dosya sistemiyle ilgili söylenecek çok şey var; ama özet geçip son
kullanıcının ihtiyacına cevap vermek daha doğru olur: "Linux'ta hangi
klasör ne işe yarar?"
/ (
root) :
Yukarda belirttiğimiz gibi, / (root) işletim sisteminin başlangıç
noktasıdır. Bütün diğer klasörler, dosyalar, root'un 'çocuklarıdır'.
Bilgisayar başlarken, ilk önce buraya bakılır ve bulunmazsa sistem
başlamaz. / (root) ve /root (root kullanıcısına ait klasör) birbirinden
ayrıdır. İleriki bölümde farkını açıklayacağız.
FSSTND'a Göre root Altındaki Temel Klasörler
/bin: Olması şart komut dosyalarını içerir.
/boot: Başlangıç için gerekli dosyaları bulundurur.
/dev: Donanım dosyaları vardır.
/etc: Sistem ayarlarını barındırır.
/lib: Kütüphane dosyaları ve çekirdek modülleri bulunur.
/media: Kaldırılabilir aygıtların (CD-ROM, flash bellek vs...) sisteme eklendiği klasördür.
/mnt: Bir dosya sistemini geçici olarak eklemek için kullanılır.
/opt: Ekstra programların kurulması içindir.
/sbin: Sistemi yöneticisiyle ilgili çalıştırabilir dosyaları tutar.
/srv: Sistemin sunduğu hizmetlerle alakalıdır.
/tmp: Geçici dosyaları tutmak içindir.
/usr: İkincil bir hiyerarşi.
/var: Değişken verileri saklar.
Günümüzde
Linux dağıtımlarının
büyük çoğunluğu, zaman zaman FSSTND tarafından belirlenmiş klasörlerin
dışına çıkabiliyor. Bu tanıma bazen bir iki klasör eklendiğini ya da
nadiren bu yapıdan bir klasörün çıkarıldığını görüyoruz. Biz gerek
güncel dağıtımları, gerekse FSSTND'yi baz alarak incelememizi yapacağız.
Ancak yazımızda FSSTND tarafından belirlenen bütün klasörler
olmayacak.
Linuxdosya
sistemi oldukça derin bir konu ve her şeyi anlatmaya kalkarsak, ayrı
bir kitapçık yayımlamamız gerekir. Bunun yerine, son kullanıcının daha
çok ilgisini çekecek ve genellikle haşır neşir olabileceği klasörleri
ele alacağız.
/bin
İşletim
sisteminizi kullanmak için gereken birçok yararlı komut /bin klasörü
altındadır. cat, mkdir, cp, ls, mv, rm vb. temel komutların hepsini
burada bulabilirsiniz. Sistem boot ettiğinde, ilk olarak /bin klasörü
çalışır hâle getirilir. Network bağlantınız olmasa ya da önemli
klasörlere bir nedenden dolayı erişemeseniz bile, /bin klasöründeki
komutlar ne olursa olsun çalışır. Bir sorun çıktığında, /bin klasörü
altındaki komutları kullanarak sistemi onarırız.
/boot
Boot,
işletim sisteminin yüklenme evresidir. /boot klasörü, boot işlemi için
gereken her şeyi içerir. 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
Linux'ta
her şey bir dosyadır; donanım aygıtları da öyle. USB girişleri, seri ve
paralel portlar, diskleriniz, CD-ROM'larınız vb... Bütün aygıtlar /dev
klasörü altında tutulan dosyalardan ibarettir. Örneğin /dev altında
bulunan hda1 dosyası, sabit diskinizi temsil eder. Ya da /dev/dsp, ses
aygıtınızdır. Bunları programlar vasıtasıyla kullanırız; ancak direkt
müdahale etmek mümkündür. Mesela "cat /boot/vmlinuz > /dev/dsp"
yazarak Kernel'in sesini duyabilirsiniz.
Bazı Önemli Aygıt Dosyaları
/dev/ttyS0
Fare, modem gibi aygıtların bağlandığı seri port. (COM 1)
/dev/psaux
PS/2 girişi; fare ve klavyeler içindir.
/dev/lp0
Paralel port (LPT 1); yazıcı, tarayıcı vs...
/dev/dsp
Birincil ses aygıtı
/dev/usb
USB aygıtları
/dev/sda
SCSI aygıtlar, Flash Bellekler, harici CD-ROM'lar vs...
/dev/scd
SCSI CD-ROM'lar
/dev/js0
Joystick (Microsoft Türkçesiyle Eğlence Çubuğu)
/etc
İşletim
sistemini bir vücuda benzetirsek, /etc klasörünü sinir sisteminin
merkezi olarak görebiliriz. Sisteme dair bütün yapılandırma, bu klasör
veya bu klasörün alt klasörlerinde bulunur. Yapılandırma dosyası, bir
programın işlemlerini kontrol etmek için kullanılan lokal bir dosyadır;
durağandır ve çalıştırılmak için değildir.
/etc
klasörü içerisinde bulunan bütün klasör ve yapılandırma dosyalarını tek
tek incelememiz mümkün değil. Ancak son kullanıcının işine yarayacak
bir ipucu verebiliriz.
Sürekli DNS problemleri yaşayanlar, /etc/resolv.conf dosyasını
root olarak
açıp yeni DNS adresleri ekleyebilir. Siz de bu sorunlardan
muzdaripseniz, root olarak bu dosyayı açıp aşağıdaki satırları dosyanın
en başına ekleyin:
nameserver 208.67.222.222
nameserver 208.67.220.220
Verilen
adresler OpenDNS adında bir firmaya ait. Telekom'un adresleri yerine
bunları kullanırsanız; adres çözümleme problemleriniz geride kalacaktır.
Üstelik erişimi engellenen sitelere de girebilirsiniz.
/home
Zamanında
home klasörüyle ilgili hoş bir tanım duymuştum; /home klasörünü
kullanıcıların kalesi olarak açıklıyordu. Bu gayet yerinde bir açıklama.
/home klasörü içerisinde her kullanıcının kendi adında bir alt klasörü
bulunur. Örneğin kullanıcı adınız "ali" ise, /home/ali size aittir ve
altında istediğiniz her şeyi yapabilirsiniz; ama yapabilecekleriniz bu
klasörle sınırlıdır. /home klasörünü, Windows'taki Documents and
Settings'e benzetebiliriz. Ama daha güvenli bir yapıdır. Çünkü
Linux'ta bir başkasının ev klasörüne müdahale edemezken, Windows'ta çok zorlanmadan istediğinizi yapabilirsiniz.
/initrd
initrd,
"initial ramdisk" kısaltmasıdır. Aşağı yukarı anlamı "Başlangıç Bellek
Diski" oluyor. Boot aşamasında ilk önce çekirdek (kernel) yüklenir.
Bundan sonra bilgisayarınızın belleğinde bir Bellek Diski oluşturulur.
Oluşturulan Bellek Disk üzerinde / (root) yansısı açılır ve kök dizin
olarak monte edilir. /initrd bu işlemlerin yapılması ve Linux'un
yüklenmesi için gereklidir.
/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 (Dynamically Linked
Library) ile eş tutabiliriz.
Linux'ta kütüphane dosyalarının sonu ".so" ile biter.
/lost+found
İngilizce
bir terim olan Lost and Found, "kayıp eşya bürosu" demektir.
/lost+found klasörünün yaptığı işi düşününce, bundan uygun bir isim
herhâlde olamazdı.
Bazen
sistemimizde bir problem olur; yanlış kapatırız, elektrik gider, durup
dururken bilgisayar yeniden başlar vs... Bu gibi durumlarda
Linux'ta
fsck (File System Check) komutu devreye sokulur. fsck, Windows'taki
Scandisk programına benzetilebilir. Düzeltilemeyen bir sorun varsa,
bağlantıları kopmuş kayıp dosyalar ortaya çıkmışsa, bunlar /lost+found
altına atılır. Bağlantı kopması, inode gibi konulara girmek istemiyorum;
biraz karmaşık. Kısaca özetlersek; kötü bir sistem kapanmasından sonra,
olması gereken bazı dosyaları bulamıyorsanız, kayıp eşya bürosuna
bakmanızda yarar var.
/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
/media
klasörüne benzer. Temel farkı; çıkarılabilir aygıtlar yerine, dosya
sistemleri veya donanım aygıtları için kullanılıyor oluşudur. Bağlama (
mount)
işlemi, herhangi bir dosya sistemini, işletim sisteminin kullanmasını
sağlar. Nereye bağladığınız sizin tercihinizdir. Yani bir diski, /media
veya /mnt klasörüne ya da bir başka yere bağlamanız fark etmeyecektir.
Sadece genel kabul görmüş bazı bağlantı noktaları bulunuyor; /mnt
klasörü de onlardan bir tanesi.
/opt
Dağıtımdan
bağımsız ekstra yüklenen paketler için /opt klasörü kullanılmaktadır.
Örneğin; Google Earth programını indirip kurmak istediğinizde, 'default'
olarak kurulacağı nokta, /opt/google-earth adresidir.
Elbette
ki bunu değiştirebilir ve size uygun gelen bir başka konuma
yükleyebilirsiniz. Ancak daha önce söylediğimiz gibi bazı şeyler genel
kabule dayanır. Ekstra yüklenen yazılımların, /opt adresine atanması da
buna bir örnektir. Windows'taki C:\Program Files'i hatırlayalım;.
programları buraya kurmak zorunlu değil; ama hemen hepsi buraya
kuruluyor. Aynı mantık burada da geçerli.
/proc
/proc
oldukça özel sanal bir dosya sistemidir. Bizim bildiğimiz anlamda
fiziksel dosyalar bulundurmaz; sistem durumuna dair bilgi içeren sanal
dosyaları vardır. Örneğin "cat /proc/swaps" yazarak sisteminizdeki takas
dosyalarına dair bilgi alabilir ya da "cat /proc/cpuinfo" komutuyla
işlemcinizin özelliklerini görebilirsiniz.
/proc klasörü içersindeki dosyalar, sadece sistem durumunu
görüntülemek için kullanılmaz, gerektiğinde sistemde ayarlama yapmak
için de kullanılabilir. Fakat son kullanıcılara hitap eden bir konu
değildir.
Unix'in
ilk versiyonlarında root kullanıcısının kendine ait bir ev klasörü
yoktu. Direkt olarak / (root klasörü) altında çalışırdı. Fakat zamanla
bunun iyi bir yöntem olmadığı anlaşıldı ve root kullanıcısının ayrı bir
klasöre sahip olması gerektiğine karar verildi. Diğer kullanıcılardan
farklı olduğu için root, ev klasörü /home altında tutulmaz; /root
klasörü olarak ayrılmıştır.
/sbin
Linux'ta
normal kullanıcının kullanabileceği komutlarla, sistem kullanıcısının
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
lokalde, yani kullandığınız makineye özgü yönetici (root) komutları
bulunuyorsa, bunları da /usr/local/sbin altında bulabilirsiniz.
/usr
/
root kullanıcısına
benzer bir hikâye /usr için de söz konusudur. Unix ilk çıktığında,
kullanıcılara ait ev klasörleri, /usr altında tutulurdu. Örneğin;
"cagatay" isimli bir kullanıcının ev klasörü /usr/cagatay şeklindeydi.
Bu yöntem zamanla değişti ve /home klasörü doğmuş oldu. /usr klasörü
hâlâ çok önemli bir yapıdır ve işletim sisteminizde kullandığınız her
şeyle ilişkisi bulunur.
/usr
klasörünün önemi, yüklediğiniz programların buraya atılmasından
kaynaklanır. /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
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
Log
dosyaları, e-posta ve yazıcı kuyrukları gibi değişken sistem
bilgilerini barındırır. Sisteminize dair tutulan log'ları buradan
görebilir; güvenlik durumunu buradan kontrol edebilirsiniz.
/tmp
Geçici
dosyalar içindir. Birçok program, burayı geçici depolama alanı olarak
kullanır. /tmp klasörünün içeriği genellikle KB'lar mertebesinde kalır
ve genellikle işletim sistemi yeniden başlarken içindeki dosyalar
silinir. /tmp klasörü altında bulunan dosyaları, ne yaptığınızdan emin
değilseniz, kesinlikle silmemelisiniz! Sistem genelinde olmasa bile,
program bazında problemler çıkabilir. Örneğin açık bir soket dosyasını
sildiğinizde, onu kullanan programa ve kendinize sorun
çıkartabilirsiniz.