Linux Dosya ve Dizin Hiyerarşisi: Verileri Organize Etme Sanatı
- Murat Akpınar
- Linux öğrenme yolculuğu
- 24 Ağustos 2023
İçindekiler
Bir Linux sunucusuna ilk kez bağlandığınızda / altında yirmiye yakın dizin görürsünüz ve hiçbirinin adı ne işe yaradığını söylemez: /etc, /opt, /srv, /var. Bu isimler rastgele seçilmedi — her biri Filesystem Hierarchy Standard (FHS) adlı bir sözleşmenin parçası. O sözleşmeyi bilen yönetici, ömründe hiç görmediği bir dağıtımda bile log dosyasını, yapılandırmayı ve kullanıcı verisini nerede arayacağını bilir.
Bu yazıda kök dizinin altındaki yapıyı dizin dizin geziyoruz: her dizinin görevi ne, hangi veri nerede durur ve bu ayrım yedekleme ile sorun giderme kararlarınızı nasıl belirler.
Kök Dizin / ve usr-merge: /bin Artık Bir Sembolik Link
Linux’ta tek bir ağaç vardır ve kökü /‘tır. Windows’taki gibi ayrı C:, D: sürücü harfleri yoktur; ikinci bir disk de sürücü harfi almaz, bu ağacın bir dalına bağlanır.
Ağaca girmeden önce bilinmesi gereken bir değişiklik var: Debian 12, Ubuntu 22.04, RHEL 9 ve Arch gibi güncel dağıtımlarda /bin, /sbin ve /lib artık gerçek dizin değil, sembolik linktir. Kendi sisteminizde doğrulayın:
ls -ld /bin /sbin /lib
# lrwxrwxrwx 1 root root 7 Haz 12 09:41 /bin -> usr/bin
# lrwxrwxrwx 1 root root 8 Haz 12 09:41 /sbin -> usr/sbin
# lrwxrwxrwx 1 root root 7 Haz 12 09:41 /lib -> usr/lib
Linkin tam olarak nereyi gösterdiği dağıtıma göre değişir: yukarıdaki çıktı Debian 12’ye ait, Arch ise sbin‘i tamamen bin içinde eritmiştir (/sbin -> usr/bin, /usr/sbin -> bin). Aşağıdaki açıklamalar bu dizinlerin görevini anlatır; dosyaların fiziksel olarak durduğu yer güncel sistemlerde her hâlükârda /usr altıdır.
Yeniden Kurulabilenler: /usr, /usr/local, /boot
Bu grubun ortak özelliği şu: içeriği paket yöneticisiyle yeniden üretilebilir. Diski kaybederseniz apt install ya da pacman -S bunları geri getirir; yedekleme planınızda öncelikli değildirler.
/usr— sistemin asıl gövdesi. Adı “user” değil Unix System Resources’tan gelir; tüm kullanıcıların paylaştığı program, kütüphane ve belge burada durur./usr/binkomutlar,/usr/libpaylaşılan kütüphaneler,/usr/sharemimariden bağımsız veri (man sayfaları, ikonlar)./usr/local— paket yöneticisinin asla dokunmadığı alan. Elle derlediğiniz yazılım ve yazdığınız betikler buraya gider;/usr/local/binvarsayılanPATH‘te zaten vardır./boot— çekirdek (vmlinuz-*), initramfs ve önyükleyici dosyaları. Ayrı bir bölüm olarak kurulduysa ve dolduysa çekirdek güncellemesi yarıda kalır; eski çekirdekleri temizlemek gerçek bir bakım işidir./bin,/sbin,/lib— usr-merge sonrası/usraltına yönlenen tarihsel isimler./sbin‘deki komutlar herkes tarafından çalıştırılabilir; root yetkisi isteyen şey komutun kendisi değil, yaptığı iştir.
Yeniden Kurulamayanlar: /etc, /home, /var, /srv, /opt
Yedeklemenin asıl konusu bu gruptur. Buradaki hiçbir şey paket yöneticisinden geri gelmez — hepsi ya sizin yazdığınız ya da sistemin zamanla biriktirdiği veridir.
/etc— sistemin ve kurduğunuz her uygulamanın yapılandırma dosyaları. Tamamı düz metindir, bu yüzden sürüm kontrolüne alınabilir; birçok yönetici/etc‘yigitaltında tutar./home— kullanıcı ev dizinleri (/home/murat). Kişisel dosyaların yanında kullanıcıya özel ayarlar da burada:~/.ssh,~/.bashrc./root— root kullanıcısının ev dizini,/homealtında değildir. Sebebi pratiktir:/homeayrı bir diskte olabilir ve o disk bağlanamazsa root’un yine de bir ev dizini olması gerekir. İzinleri dardır (drwx------ya dadrwxr-x---)./var— sürekli büyüyen veri:/var/loggünlükler,/var/libveritabanı ve uygulama durumu,/var/spoolkuyruklar. Diski dolduran dizin neredeyse her zaman budur./srv— sunucunun dışarıya servis ettiği veri: web kök dizini, FTP paylaşımı. Varsayılan olarak kullanan dağıtım azdır ama FHS’in bu iş için önerdiği yer burasıdır./opt— paket yöneticisinden gelmeyen üçüncü taraf yazılım./usraltına dağılmak yerine kendi ağacını tek bir dizinde kurar:/opt/uygulama/bin,/opt/uygulama/lib.
Bir dizin değil ama bu grupla birlikte anılmayı hak eden tek dosya /etc/fstab: hangi disk bölümünün açılışta nereye ve hangi seçeneklerle bağlanacağını satır satır tarif eder. Yanlış yazılmış tek bir satır sistemin açılmamasına yol açabilir; bu yüzden düzenlemeden önce kopyasını almak alışkanlık hâline gelmelidir.
Diskte Yer Kaplamayanlar: /proc, /sys, /dev, /run
Bunlar gerçek dosya sistemi değildir. Çekirdeğin bellekteki durumunu dosya arayüzüyle gösterirler; sistem kapandığında içerikleri kaybolur ve yedeklenecek bir şey yoktur:
stat -f -c '%n → %T' /proc /sys /run
# /proc → proc
# /sys → sysfs
# /run → tmpfs
/proc— çalışan her süreç için PID’siyle adlandırılmış bir dizin:/proc/1,/proc/2324.topya dapsçıktısında soldaki PID sütununda gördüğünüz her numaranın burada bir karşılığı vardır; bu araçlar bilgiyi başka bir yerden değil, oradaki dosyalardan okur./sys— çekirdeğin aygıt ve sürücü ağacı./proc‘tan farkı bakış açısıdır:/procsüreçlere,/sysdonanıma bakar. Fan hızı, pil durumu, ağ kartı sayaçları burada./dev— aygıtların dosya arayüzü./dev/sdadiskin kendisi,/dev/nullyazılan her şeyi yutan sanal aygıttır. Bunlar aygıtın var olduğunu bildiren işaretler değil, aygıtla konuşulan kapılardır./run— açılıştan beri biriken çalışma zamanı verisi: PID dosyaları, soketler. RAM’dedir, her açılışta sıfırdan oluşur.
Bağlama Noktaları ve Geçici Alan: /mnt, /media, /tmp
/mnt— yöneticinin elle bağladığı dosya sistemleri için ayrılmış, normalde boş duran dizin. Bir yedek diskinimount /dev/sdb1 /mnt/yedekile buraya bağlarsınız./media— USB bellek, harici disk ve CD gibi çıkarılabilir ortamların masaüstü ortamı tarafından otomatik bağlandığı yer. Aradaki fark niyettir:/mntsizin,/mediasistemin./tmp— geçici dosyalar. Kalıcı olduğunu varsaymayın: birçok güncel dağıtımda/tmpdiskte değil RAM’dedir (tmpfs) ve yeniden başlatmada tamamen kaybolur. Diskte tutan sistemlerde bilesystemd-tmpfilesbelirli bir yaşın üstündeki dosyaları siler; Arch ve Fedora’da varsayılan 10 gündür (/usr/lib/tmpfiles.d/tmp.conf).
Sözleşmeye Uymazsanız Ne Olur
Yanlış dizin seçmek hemen hata vermez — bedeli aylar sonra çıkar. En sık görülen üçü:
- Kendi betiğinizi
/usr/bin‘e koymak. O dizinin sahibi paket yöneticisidir. Aynı ada sahip bir dosya getiren bir güncelleme betiğinizin üzerine yazar ve kimse bir silme komutu çalıştırmadığı için sebep uzun süre bulunamaz. Doğru yer/usr/local/bin. - Uygulama verisini
/tmp‘ye yazmak. Yukarıdaki sebeple veri ya ilk yeniden başlatmada ya da onuncu günde yok olur. Test ederken çalışır, üretimde bir gece kaybolur. /var‘ı ayrı bölüm yapmadan log biriktirmek./var/logkök bölümle aynı diskteyse dolduğunda sistemin tamamı yazamaz hâle gelir: paket yöneticisi çalışmaz, yeni oturum açılamaz. Disk doluysa ilk bakılacak yerdu -sh /var/*çıktısıdır.
Sonuç
Dizin yapısının tamamını ezberlemek gerekmez; üç ayrımı bilmek yeter:
- Yapılandırma
/etc‘de, değişen veri/var‘da, paylaşılan kaynaklar/usr‘de durur. Bir sunucuyu yedeklerken bakacağınız yer bu ayrımdır:/usraltındakiler paket yöneticisiyle yeniden kurulabilir,/etc‘deki değişiklikleriniz ve/var‘daki veriniz kurulamaz. /procve/sysdiskte yer kaplamaz. Çekirdeğin canlı durumunu dosya gibi gösteren sanal dosya sistemleridir; sistem kapandığında içerikleri kalmaz.topkomutunun okuduğu değerler de oradan gelir.- Bir dosyayı nereye koyacağınız tercih değil, sözleşmedir. Kendi yazılımınızı
/opt‘a, yazdığınız betikleri/usr/local/bin‘e koyduğunuzda sizden sonraki yönetici nerede arayacağını bilir.
Yol haritasının 2. bölümünü — temel kabuk kavramlarını — burada tamamladık. Sırada temel komutlar ve dosya işlemleri var: Dosya Oluşturma ve Kopyalama (touch, cp). Serinin tamamına GNU/Linux Öğrenme Yolculuğu sayfasından ulaşabilirsiniz.