Linux Dosya Sistemi: Dizin Yapısı ve İzin Yönetimi

Linux'ta kök dizinden başlayan hiyerarşiyi, /etc ve /var gibi ana klasörleri, izin kodlarını ve disk bağlama mantığını tüm gerçek örnekleriyle anlatıyorum.

Linux
Linux Dosya Sistemi: Dizin Yapısı ve İzin Yönetimi

Windows'tan Linux'a geçen herkes ilk anda aynı şeye takılır: ortada C: ya da D: sürücüsü yoktur, tek bir "/" vardır ve her şey onun altında durur. Bu fark yalnızca görünüşte değildir; Linux, tüm depolama aygıtlarını tek bir hiyerarşik ağaçta topluyor ve komut satırında rahat çalışabilmek bu yapıyı anlamaktan geçiyor. Bu rehberde dizin yapısını, izin sistemini ve günlük yönetim komutlarını gerçek örneklerle anlatıyorum.

Kök Dizinden Başlayan Tek Ağaç

Linux'ta her şey / (kök) dizininden başlar; sabit diskler, USB bellekler ve ağ paylaşımları dahil tüm depolama alanları bu ağacın bir noktasına bağlanır (mount edilir). Windows'ta D: sürücüsüne geçmek için sürücü harfini değiştirirsiniz; Linux'ta ise o disk /mnt/veri gibi bir dizine bağlanır ve o dizinin bir parçasıymış gibi görünür.

ls -la /
df -h

ls -la / komutu kök dizinin altındaki ana klasörleri listeler; df -h ise hangi diskin sisteme nereden bağlı olduğunu ve ne kadar dolu olduğunu okunabilir birimlerle gösterir. Bir USB bellek taktığınızda genelde /media/kullanici-adi/ altında otomatik olarak görünür; sunucularda ek diskler ise genelde /mnt altına elle bağlanır.

Bu tek ağaç yapısının pratik faydası şudur: dosyanın hangi fiziksel diskte olduğunu bilmeden çalışabilirsiniz. Bir uygulama /var/www/site yoluna dosya yazdığında, o yolun ayrı bir diske mi yoksa ana diske mi bağlı olduğu uygulamayı ilgilendirmez; bu ayrımı sistem sizin adınıza yönetir.

Ana Dizinler ve Ne İşe Yaradıkları

Linux dağıtımlarının büyük çoğunluğu Dosya Sistemi Hiyerarşisi Standardı'na (FHS) uyar; bu da bir dizinde neyin bulunacağını tahmin edilebilir kılar. Aşağıdaki tablo en sık karşılaşacağınız dizinleri ve içeriklerini özetliyor.

Linux dosya sistemi hiyerarşisinde kök dizin altındaki ana klasörleri gösteren ağaç şeması
Dizinİçeriği
/etcSistem ve uygulama yapılandırma dosyaları
/homeKullanıcıların kişisel dosyaları
/varLoglar, önbellekler, sık değişen veriler
/usrKurulu programlar ve paylaşılan kütüphaneler
/bin, /sbinTemel sistem komutları
/tmpGeçici dosyalar, yeniden başlatmada silinir
/rootRoot kullanıcısının ev dizini

/etc dizini özellikle önemlidir: bir servisin yapılandırmasını değiştirmek istediğinizde neredeyse her zaman burada bir dosya düzenlersiniz; örneğin SSH ayarları /etc/ssh/sshd_config içinde durur. /var/log ise sorun giderirken ilk bakılacak yerdir, çünkü sistem ve uygulama logları genelde buraya yazılır. /usr/bin ile /usr/local/bin arasındaki fark da sık kafa karıştırır: /usr/bin dağıtımın paket yöneticisiyle kurulan programları barındırır, /usr/local/bin ise elle veya kaynak koddan derlenip kurulan programları. Bu dizin düzeninin resmi tanımı Dosya Sistemi Hiyerarşi Standardı'nda (FHS) belgelenmiştir.

Dosya ve Dizin İzinleri Nasıl Okunur

ls -l çıktısındaki ilk sütun bir dosyanın izinlerini gösterir; -rwxr-xr-- gibi on karakterlik bir dizidir. İlk karakter dosya türünü belirtir (- normal dosya, d dizin); sonraki dokuz karakter ise sırasıyla sahibin, grubun ve diğer herkesin okuma (r), yazma (w) ve çalıştırma (x) haklarını gösterir.

find ve du komutlarıyla büyük dosyaları ve disk kullanımını arayan terminal penceresi
ls -l dosya.sh
chmod +x dosya.sh
chown celil:celil dosya.sh

chmod +x bir dosyaya çalıştırma izni ekler; indirdiğiniz bir betiği çalıştırmadan önce neredeyse her zaman gereken bir adımdır. İzinleri sayısal olarak da ayarlayabilirsiniz: chmod 755 dosya.sh sahibe tam yetki (7), gruba ve diğerlerine okuma-çalıştırma (5) verir. chown dosyanın sahibini ve grubunu değiştirir; sunucularda yanlış sahiplik, "Permission denied" hatalarının en sık nedenlerinden biridir.

İzin sayılarının mantığı basittir: okuma 4, yazma 2, çalıştırma 1 değerini taşır ve bu üçü toplanarak tek bir rakam elde edilir. 7 (4+2+1) tüm yetkiler, 6 (4+2) okuma-yazma, 5 (4+1) okuma-çalıştırma anlamına gelir. Üç haneli bir izin kodu, örneğin 644, sırasıyla sahip, grup ve diğerleri için bu mantığı tekrarlar.

Sık kullanılan izin kodları şunlardır:

  • 755: sahibe tam yetki, gruba ve diğerlerine okuma-çalıştırma (betikler ve çalıştırılabilir dosyalar için tipik)
  • 644: sahibe okuma-yazma, gruba ve diğerlerine yalnızca okuma (çoğu normal dosya için varsayılan)
  • 700: yalnızca sahibe tam yetki, başka kimseye erişim yok (özel anahtarlar ve hassas dosyalar için)
  • 600: sahibe okuma-yazma, başkasına hiçbir izin yok

Dizinlerde çalıştırma (x) izni farklı bir anlam taşır: bir dizine "girebilmek", yani içine cd yapabilmek için bu izin gerekir. Okuma izni olmasa bile, çalıştırma izniyle dizinin içindeki bilinen bir dosyaya erişilebilir.

Dosya Arama ve Disk Kullanımını Kontrol Etme

Bir sunucuda disk doluyken hangi dosyaların yer kapladığını bulmak, günlük yönetimin sık karşılaşılan görevlerinden biridir. du ve find bu iş için birlikte kullanılan iki temel araçtır.

du -sh /var/log/*
find / -type f -size +100M 2>/dev/null

du -sh /var/log/* log dizinindeki her alt öğenin toplam boyutunu okunabilir birimlerle listeler; hangi servisin loglarının şiştiğini hızlıca gösterir. find / -type f -size +100M sistemdeki 100 megabayttan büyük tüm dosyaları arar; 2>/dev/null eki, izin hatası veren dizinlerin çıktıyı kirletmesini önler.

Belirli bir isimde dosya ararken find /home -name "*.log" gibi bir kalıp kullanılır. Disk doluluğu acil bir sorun haline geldiğinde, önce df -h ile hangi bölümün dolduğu, sonra du -sh ile o bölümün neresinin şiştiği, son olarak find ile spesifik büyük dosyaların nerede olduğu bulunur. Bu sıra, sistematik ve hızlı bir yöntemdir.

Bazen disk dolu görünür ama büyük dosya bulunamaz; bu genelde silinmiş ama hâlâ bir süreç tarafından açık tutulan dosyalardan kaynaklanır. lsof | grep deleted komutu bu tür gizli alan tüketicilerini ortaya çıkarır; servisin yeniden başlatılması genelde alanı geri kazandırır.

Bağlama Noktaları ve Ek Diskler

Yeni bir disk taktığınızda Linux onu otomatik olarak kullanıma açmaz; önce bir dosya sistemiyle biçimlendirilmesi, sonra bir dizine bağlanması gerekir. lsblk komutu sisteme bağlı tüm disk ve bölümleri ağaç yapısında listeler ve hangisinin nereye bağlı olduğunu gösterir.

Ek diski dizine bağlayan mount komutunu gösteren terminal penceresi
lsblk
sudo mount /dev/sdb1 /mnt/veri

Bu komut /dev/sdb1 bölümünü /mnt/veri dizinine bağlar; bağlamadan sonra o dizine yazılan her dosya gerçekte o fiziksel diskte saklanır. Bu bağlama kalıcı değildir, sistem yeniden başladığında kaybolur; kalıcı bağlama için /etc/fstab dosyasına bir satır eklenir.

/etc/fstab dosyasını yanlış düzenlemek sistemin açılışta takılmasına yol açabilir; bu dosyada değişiklik yapmadan önce yedek almak ve mount -a ile test etmek gerekir. Bulut sunucularında ek disk eklerken bu adım sık atlanır; disk bağlı göründüğü halde yeniden başlatmadan sonra kaybolur ve bu en yaygın karşılaşılan tuzaklardan biridir. fstab satırında aygıt adı (/dev/sdb1 gibi) yerine UUID kullanmak önerilir, çünkü disk sıralaması yeniden başlatmalar arasında değişebilir; blkid komutu her diskin UUID değerini gösterir.

Sembolik Bağlantılar ve Sert Bağlantılar

Aynı dosyaya birden fazla isimden erişmek istediğinizde bağlantılar (link) devreye girer. Sembolik bağlantı (symlink) bir dosyaya işaret eden kısayol gibi çalışır; orijinal dosya silinirse symlink kırık kalır. Sert bağlantı (hard link) ise aynı veriye işaret eden ikinci bir isimdir; orijinal dosya silinse bile veri hâlâ erişilebilir kalır.

ln -s /var/www/site/config.php ~/config-kisayolu.php
ln /var/www/site/index.php /var/www/site/index-yedek.php

ln -s sembolik bağlantı oluşturur; bu, uzun bir yolu kısaltmak veya farklı sürümler arasında geçiş yapmak için sık kullanılır. Örneğin birçok uygulama, current adında bir symlink'i her yeni sürümde farklı bir dizine yönlendirerek dağıtım yapar. Sert bağlantılar daha nadir kullanılır, çünkü yalnızca aynı disk bölümü içinde çalışır ve dizinler için oluşturulamaz. ls -li komutuyla bir dosyanın inode numarasını görebilirsiniz; aynı inode numarasına sahip iki dosya adı, aslında aynı veriye işaret eden sert bağlantılardır.

Dosya sistemi yapısını Docker ile birlikte kullanırken, volume'lerin ana makinede hangi dizine bağlandığını bilmek disk yönetimini kolaylaştırır.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

Bilgisayar mühendisiyim; 25 yılı aşkın süredir bilgi işlem sektörünün içindeyim. Bu blogu 2020'de, işimde her gün karşılaştığım sorunların çözümlerini bir yere yazmak için açtım: Linux, güvenlik, tarayıcılar, yapay zeka araçları. Yazdığım her rehberi önce kendi bilgisayarımda ya da sunucumda deniyorum; çalıştığını görmediğim adımı yayınlamam. Hatalı ya da eskimiş bir şey görürsen iletişim sayfasından yaz — düzeltirim.

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar