Linux Sunucuda Dosya Sistemini Keşfetmek İçin cd, pwd ve ls Komutlarını Kullanma Rehberi
Linux sunucular, modern bilgi işlem altyapısının temel taşlarından biridir. Web sitelerinden veritabanlarına, uygulama sunucularından bulut hizmetlerine kadar geniş bir yelpazede kullanılırlar. Bir Linux sunucusunu etkin bir şekilde yönetmek, sorun gidermek veya üzerinde geliştirme yapmak için dosya sistemi yapısını anlamak ve bu yapı içinde rahatça gezinebilmek hayati önem taşır. Bu rehberde, Linux dosya sistemini keşfetmek ve manipüle etmek için en temel ve en sık kullanılan üç komutu detaylı bir şekilde inceleyeceğiz: cd (change directory), pwd (print working directory) ve ls (list directory contents). Bu komutlar, her Linux kullanıcısının bilmesi gereken temel araçlardır ve bunların ustaca kullanımı, sunucu yönetimindeki verimliliğinizi önemli ölçüde artıracaktır.
Linux Dosya Sistemi Hiyerarşisi ve Temel Kavramlar
Linux, her şeyin bir dosya olduğu hiyerarşik bir dosya sistemi yapısına sahiptir. Bu yapı, tek bir kök dizin (/) ile başlar ve tüm diğer dizinler ve dosyalar bu kökün altında dallanır. Bu hiyerarşiyi anlamak, dosya sistemi içinde kaybolmamanın ilk adımıdır.
Kök Dizin (/)
Linux dosya sistemindeki her şeyin başlangıç noktasıdır. Tüm diğer dizinler ve dosyalar bu dizinin altındadır.
Temel Dizinler ve Amaçları
* /bin: Temel kullanıcı komutlarını (binary) içerir. Örneğin, ls, cp, mv gibi komutlar burada bulunur.
* /sbin: Sistem yönetimi için gerekli olan komutları (system binary) içerir. Genellikle root yetkisi gerektiren komutlardır, örneğin fdisk, reboot.
* /etc: Sistem genelindeki yapılandırma dosyalarını (configuration files) içerir. Ağ ayarları, kullanıcı hesapları, servis yapılandırmaları gibi kritik bilgiler buradadır.
* /home: Kullanıcıların kişisel dizinlerini barındırır. Her kullanıcı için ayrı bir dizin bulunur (örn: /home/kullaniciadi).
* /var: Değişken verileri (variable data) içerir. Log dosyaları (/var/log), web sunucusu dosyaları (/var/www), e-posta kuyrukları (/var/mail) gibi sürekli değişen veya büyüyen veriler buradadır.
* /tmp: Geçici dosyalar (temporary files) için kullanılır. Sistem yeniden başlatıldığında genellikle bu dizin temizlenir.
* /usr: Kullanıcı programları ve uygulamaları (UNIX System Resources) içerir. Çoğu sistem uygulamasının ikili dosyaları, kütüphaneleri ve belgeleri buradadır.
* /opt: İsteğe bağlı (optional) yazılım paketleri için kullanılır. Genellikle üçüncü taraf yazılımlar buraya kurulur.
* /dev: Cihaz dosyalarını (device files) içerir. Donanım aygıtları (sabit diskler, USB sürücüler, klavye vb.) dosyalar olarak temsil edilir.
* /proc: İşlem bilgileri (process information) için sanal bir dosya sistemidir. Çalışan süreçler ve sistem hakkında gerçek zamanlı bilgiler sağlar.
* /mnt, /media: Harici depolama aygıtlarının (USB bellekler, CD/DVD’ler) geçici olarak bağlandığı (mount edildiği) dizinlerdir.
Mutlak ve Göreceli Yollar
Dosya sistemi içinde gezinirken iki tür yol kullanırız:
* Mutlak Yol (Absolute Path): Kök dizinden (/) başlayarak bir dosya veya dizine giden tam yoldur. Nereden başlarsanız başlayın, mutlak yol her zaman aynı konumu gösterir. Örnek: /var/log/syslog.
* Göreceli Yol (Relative Path): Mevcut çalışma dizininize (Current Working Directory – CWD) göre bir dosya veya dizine giden yoldur. Örnek: Eğer /home/kullaniciadi dizinindeyseniz, documents/rapor.pdf yolu /home/kullaniciadi/documents/rapor.pdf dosyasını ifade eder.
Mevcut Çalışma Dizini (Current Working Directory – CWD)
Terminalde komut çalıştırdığınızda, o anda bulunduğunuz dizine “mevcut çalışma dizini” denir. Bu kavram, göreceli yolları kullanırken hayati önem taşır.
pwd: Mevcut Çalışma Dizinini Anlama
pwd komutu, “print working directory” kelimelerinin kısaltmasıdır ve adından da anlaşılacağı gibi, o an terminalde bulunduğunuz dizinin tam (mutlak) yolunu ekrana yazdırır.
Giriş
Bir Linux sunucusunda çalışırken, özellikle karmaşık dizin yapılarında veya farklı betikler ve komutlar çalıştırırken hangi dizinde olduğunuzu bilmek çok önemlidir. Yanlış dizinde bir komut çalıştırmak, istenmeyen sonuçlara veya hatta veri kaybına yol açabilir. pwd komutu, bu belirsizliği ortadan kaldıran basit ama güçlü bir araçtır.
Kullanım
pwd komutunun kullanımı son derece basittir:
pwd
Bu komutu çalıştırdığınızda, mevcut dizininizin mutlak yolu doğrudan terminale yazdırılacaktır.
Örnekler
Diyelim ki terminali açtınız. Genellikle başlangıçta ana dizininizde olursunuz:
pwd
Çıktı:
/home/kullaniciadi
Şimdi bir alt dizine geçelim ve tekrar pwd kullanalım:
cd documents
pwd
Çıktı:
/home/kullaniciadi/documents
Teknik Detaylar: Sembolik Bağlantılar ve pwd Seçenekleri
pwd komutunun iki ana seçeneği vardır: -P ve -L.
pwd -L (Logical): Bu varsayılan davranıştır. Eğer mevcut dizininiz bir sembolik bağlantı (symlink) ise, pwd -L sembolik bağlantının mantıksal* yolunu, yani sizin o anda gördüğünüz yolu gösterir.
pwd -P (Physical): Bu seçenek, sembolik bağlantıları çözerek dizinin gerçek* (fiziksel) yolunu gösterir.
Sembolik Bağlantı Nedir?
Sembolik bağlantı, Windows’taki “kısayol”a benzer bir yapıdır. Bir dosya veya dizine işaret eden özel bir dosya türüdür. Örneğin, /var/www/html dizininin gerçekte /srv/web/projeler/site1 dizinine işaret ettiğini varsayalım.
Örnek:
# Gerçek dizini oluşturalım
mkdir -p /srv/web/projeler/site1
cd /srv/web/projeler/site1
pwd
Çıktı: /srv/web/projeler/site1
Şimdi bir sembolik bağlantı oluşturalım
ln -s /srv/web/projeler/site1 /var/www/html
Sembolik bağlantı dizinine geçelim
cd /var/www/html
Varsayılan (mantıksal) yolu görelim
pwd
Çıktı: /var/www/html
Gerçek (fiziksel) yolu görelim
pwd -P
Çıktı: /srv/web/projeler/site1
Bu örnek, pwd -L ve pwd -P arasındaki farkı net bir şekilde göstermektedir. Sistem yöneticileri için, sembolik bağlantıların arkasındaki gerçek yolu bilmek, özellikle yedekleme, izin yönetimi veya disk alanı kullanımı gibi durumlarda kritik olabilir.
cd: Dizinler Arasında Gezinme Sanatı
cd komutu, “change directory” kelimelerinin kısaltmasıdır ve Linux dosya sistemi içinde dizinler arasında geçiş yapmanızı sağlayan en temel ve en sık kullanılan komuttur.
Giriş
cd komutu olmadan, bir Linux sunucusunda etkili bir şekilde çalışmak imkansızdır. Dosyalara erişmek, programları çalıştırmak veya yapılandırmaları değiştirmek için doğru dizine gitmeniz gerekir. cd komutu, bu navigasyon işlemini kolay ve sezgisel hale getirir.
Temel Kullanım
cd komutunun çeşitli kullanım şekilleri vardır:
* Belirli bir dizine gitmek: cd [dizin_yolu]
cd /var/log
pwd # Çıktı: /var/log
* Ana dizine (Home Directory) gitmek:
* Sadece cd yazmak sizi ana dizininize götürür.
cd
pwd # Çıktı: /home/kullaniciadi
* ~ (tilde) karakteri de ana dizini temsil eder.
cd ~
pwd # Çıktı: /home/kullaniciadi
* Belirli bir kullanıcının ana dizinine gitmek için:
cd ~baskakullanici
pwd # Çıktı: /home/baskakullanici
* Bir üst dizine gitmek: cd ..
cd /var/log/apache2
pwd # Çıktı: /var/log/apache2
cd ..
pwd # Çıktı: /var/log
* Mevcut dizinde kalmak: cd . (pek kullanılmaz ama bilinmelidir)
cd .
pwd # Çıktı: /var/log (değişmedi)
* Önceki dizine dönmek: cd -
cd /etc
pwd # Çıktı: /etc
cd /var/log
pwd # Çıktı: /var/log
cd -
pwd # Çıktı: /etc (önceki dizine döndü)
cd -
pwd # Çıktı: /var/log (tekrar döndü)
Mutlak ve Göreceli Yollarla Gezinme
cd komutu ile mutlak ve göreceli yolları etkin bir şekilde kullanmak, hızlı ve verimli navigasyon için çok önemlidir.
* Mutlak Yollarla Gezinme:
Kök dizinden başlayarak tam yolu belirtirsiniz. Nerede olursanız olun, bu yol sizi her zaman aynı hedefe götürür.
cd /usr/local/bin
cd /etc/nginx/sites-available
* Göreceli Yollarla Gezinme:
Mevcut dizininize göre bir yol belirtirsiniz. Bu, özellikle sık sık alt dizinlere girip çıkarken veya yakın konumdaki dizinlere geçerken çok kullanışlıdır.
# Diyelim ki /home/kullaniciadi/documents dizinindesiniz
pwd # Çıktı: /home/kullaniciadi/documents
# "reports" adında bir alt dizine gitmek
cd reports
pwd # Çıktı: /home/kullaniciadi/documents/reports
# İki dizin yukarı çıkmak
cd ../..
pwd # Çıktı: /home/kullaniciadi
# Başka bir alt dizine gitmek
cd public_html/images
pwd # Çıktı: /home/kullaniciadi/public_html/images
Kısayollar ve İpuçları
* Tab Tamamlama (Tab Completion): Bu, cd komutunu kullanırken en büyük verimlilik artırıcıdır. Bir dizin adının ilk birkaç harfini yazdıktan sonra Tab tuşuna basarsanız, kabuk (shell) adı otomatik olarak tamamlar veya birden fazla eşleşme varsa seçenekleri gösterir. Bu, yazım hatalarını azaltır ve hızı artırır.
cd /v # /var veya /venv gibi seçenekleri gösterebilir
cd /var/l # /var/log'u tamamlar
* Boşluk İçeren Dizin Adları: Dizin adlarında boşluk varsa, dizin adını tırnak içine almanız veya boşluktan önce ters eğik çizgi (\) kullanmanız gerekir.
mkdir "My Documents"
cd "My Documents"
# veya
cd My\ Documents
* Sembolik Bağlantılarla Çalışma: cd komutu sembolik bağlantıları otomatik olarak çözer. Eğer bir sembolik bağlantı dizinine cd ile giderseniz, pwd genellikle mantıksal yolu gösterir (sembolik bağlantı yolunu). Ancak pwd -P kullanarak gerçek fiziksel yolu görebilirsiniz.
Sık Karşılaşılan Hatalar ve Çözümleri
* bash: cd: no such file or directory: Bu hata, belirtilen dizinin mevcut olmadığını veya yolu yanlış yazdığınızı gösterir.
* Çözüm: Yolu dikkatlice kontrol edin, ls ile dizinin varlığını doğrulayın ve tab tamamlamayı kullanın.
* bash: cd: Permission denied: Bu hata, belirtilen dizine erişim izninizin olmadığını gösterir.
* Çözüm: Dizinin izinlerini kontrol edin (ls -l). Gerekirse sudo veya su kullanarak root yetkisiyle erişim sağlamanız gerekebilir. Ancak dikkatli olun, root yetkisiyle yanlış işlemler yapmak ciddi sorunlara yol açabilir.
ls: Dizin İçeriklerini Listeleme
ls komutu, “list directory contents” kelimelerinin kısaltmasıdır ve bir dizinin içeriğini (dosyalar ve alt dizinler) listelemek için kullanılır. Bu, dosya sistemini keşfederken en çok kullanılan komutlardan biridir.
Giriş
ls komutu, bir dizinde ne olduğunu görmenin en hızlı yoludur. Hangi dosyaların mevcut olduğunu, hangi alt dizinlerin bulunduğunu, bunların izinlerini, sahiplerini ve boyutlarını görmek için ls ve çeşitli seçeneklerini kullanırız.
Temel Kullanım
* Mevcut dizinin içeriğini listelemek:
ls
Bu komut, mevcut dizindeki dosya ve dizinleri alfabetik sıraya göre listeler. Varsayılan olarak, gizli dosyalar (nokta ile başlayanlar) gösterilmez.
* Belirli bir dizinin içeriğini listelemek:
ls /var/log
Bu komut, /var/log dizininin içeriğini listeler, mevcut dizininiz ne olursa olsun.
Sık Kullanılan Seçenekler ve Anlamları
ls komutu, çıktısını özelleştirmek için çok sayıda seçeneğe sahiptir. İşte en sık kullanılanlar:
* -l (long format): Uzun liste formatında çıktı verir. Bu, her dosya veya dizin hakkında detaylı bilgi sağlar:
* Dosya tipi ve izinler
* Bağlantı sayısı (hard links)
* Sahip kullanıcı adı (owner)
* Sahip grup adı (group)
* Dosya boyutu (bayt cinsinden)
* Son değiştirilme tarihi ve saati
* Dosya veya dizin adı
ls -l
Örnek çıktı:
-rw-r--r-- 1 kullanici grup 1024 May 15 10:30 dosya.txt
drwxr-xr-x 2 kullanici grup 4096 Apr 20 09:00 dizin/
lrwxrwxrwx 1 kullanici grup 10 Mar 10 14:15 link -> hedef.txt
* -a (all): Gizli dosyalar (. ile başlayanlar) dahil olmak üzere tüm dosyaları listeler. Her dizinde bulunan . (mevcut dizin) ve .. (üst dizin) girdilerini de gösterir.
ls -a
* -h (human-readable): Dosya boyutlarını insan tarafından okunabilir formatta (KB, MB, GB gibi) gösterir. Genellikle -l ile birlikte kullanılır.
ls -lh
* -t (time): Dosyaları en son değiştirilme zamanına göre sıralar, en yeni olanlar en başta görünür.
ls -lt
* -r (reverse): Sıralamayı tersine çevirir. -t ile kullanıldığında en eski dosyalar en başta görünür.
ls -ltr
* -R (recursive): Dizinlerin içeriğini ve alt dizinlerin içeriğini de özyinelemeli olarak listeler. Büyük dizin yapıları için dikkatli kullanılmalıdır, çıktı çok uzun olabilir.
ls -R /var/www
* -d (directory): Normalde ls bir dizinin içeriğini listeler. -d seçeneği, dizinin kendisi hakkında bilgi listelemesini sağlar, içeriğini değil. Genellikle -l ile birlikte kullanılır.
ls -ld /var/log
Bu, /var/log dizininin izinlerini ve diğer özelliklerini gösterir, içindeki dosyaları listelemez.
* -F (classify): Listelenen girişlerin türünü belirtmek için sonlarına bir karakter ekler:
* / dizinler için
çalıştırılabilir dosyalar için
* @ sembolik bağlantılar için
* | FIFO (named pipe) dosyaları için
* = soket dosyaları için
ls -F
* -i (inode): Her dosya veya dizinin inode numarasını gösterir. Inode, Linux’ta bir dosya veya dizinin meta verilerini depolayan benzersiz bir tanımlayıcıdır.
ls -i
Çıktıyı Anlama (ls -l ile)
ls -l çıktısı, Linux dosya sistemi hakkında derinlemesine bilgi sağlar. Her sütunun ne anlama geldiğini anlamak önemlidir:
-rw-r--r-- 1 kullanici grup 1024 May 15 10:30 dosya.txt
1. -rw-r--r-- (İzinler ve Dosya Tipi):
* İlk karakter (-): Dosya tipini belirtir.
* -: Normal dosya
* d: Dizin
* l: Sembolik bağlantı
* c: Karakter aygıt dosyası
* b: Blok aygıt dosyası
* p: Adlandırılmış boru (pipe)
* s: Soket
* Sonraki dokuz karakter (üçerli gruplar halinde): Dosya izinlerini belirtir.
* İlk üç: Dosya sahibi (owner) için izinler (rwx = okuma, yazma, çalıştırma)
* İkinci üç: Dosya grubu (group) için izinler
* Üçüncü üç: Diğerleri (others) için izinler
2. 1 (Bağlantı Sayısı): Dosyaya kaç tane “hard link” olduğunu gösterir. Dizinler için, içerdikleri alt dizin ve dosya sayısını (nokta ve çift nokta dahil) gösterir.
3. kullanici (Sahip): Dosyanın sahibi olan kullanıcının adını gösterir.
4. grup (Grup): Dosyanın ait olduğu grubun adını gösterir.
5. 1024 (Boyut): Dosyanın boyutunu bayt cinsinden gösterir. (-h ile insan okunur formata çevrilir).
6. May 15 10:30 (Son Değişiklik Tarihi): Dosyanın en son değiştirildiği tarih ve saati gösterir.
7. dosya.txt (Dosya/Dizin Adı): Dosya veya dizinin adıdır.
Örnekler ve Kombinasyonlar
* En yeni 5 dosyayı insan okunur formatta listele:
ls -lth | head -n 6 # İlk satır toplam bilgisi olduğu için 6.
* Mevcut dizindeki tüm dosyaları (gizli olanlar dahil) uzun formatta göster:
ls -la
* Belirli bir dizindeki .conf uzantılı tüm dosyaları listele:
ls /etc/nginx/*.conf
Burada * bir “wildcard” (joker karakterdir) ve sıfır veya daha fazla karakteri temsil eder.
* Bir dizin içindeki tüm alt dizinleri ve dosyaları özyinelemeli olarak listele, ancak sadece dizinleri belirt:
ls -RF | grep "/$"
Bu komut, ls -RF çıktısını (/ ile biten dizinler dahil) grep komutuna yönlendirerek sadece dizinleri filtreler.
Gelişmiş Kullanım İpuçları
* Aliaslar (Aliases): Sık kullandığınız ls komutu kombinasyonları için takma adlar oluşturabilirsiniz. Örneğin, ll komutunu ls -lah olarak ayarlamak yaygın bir uygulamadır.
alias ll='ls -lah'
Bu komutu .bashrc veya .zshrc dosyanıza eklerseniz, her kabuk oturumunda kullanılabilir olur.
* Boru Hatları (Piping) ve Yönlendirmeler (Redirection): ls çıktısını başka komutlara yönlendirmek (|) veya bir dosyaya kaydetmek (>) çok güçlüdür.
* ls -l /var/log | grep "access.log": /var/log dizinindeki access.log içeren satırları filtreler.
* ls -R /home/kullaniciadi > ~/home_files.txt: /home/kullaniciadi altındaki tüm dosyaları ve dizinleri home_files.txt dosyasına kaydeder.
Gerçek Dünya Senaryoları ve Pratik Uygulamalar
Bu üç komutun birleşimi, çeşitli gerçek dünya senaryolarında size yardımcı olacaktır:
* Web Sunucusu Yapılandırmasını İnceleme:
cd /etc/nginx/sites-available # Nginx site yapılandırma dizinine git
ls -l # Mevcut yapılandırma dosyalarını listele
cd ../sites-enabled # Etkin sitelerin olduğu dizine git
ls -l # Etkin siteleri listele (genellikle sembolik bağlantılardır)
* Log Dosyalarını Kontrol Etme:
cd /var/log # Log dizinine git
ls -lt # En yeni log dosyalarını listele
cd apache2 # Apache loglarına git
ls -lh access.log # access.log dosyasının boyutunu ve bilgilerini göster
* Kullanıcı Dosyalarına Erişim:
cd ~ # Kendi ana dizininize git
ls -a # Gizli dosyalar dahil tüm dosyaları gör (örneğin .bashrc)
cd public_html # Web sitesi dosyalarınıza git (eğer varsa)
ls -R # Tüm web dosyalarını ve alt dizinlerini listele
* Sistem Kaynaklarını Kontrol Etme:
cd /proc # İşlem bilgileri sanal dosya sistemine git
ls # Çalışan her işlem için bir dizin olduğunu gör
cd 1 # PID 1 (init/systemd) dizinine git
ls # İşlemle ilgili bilgilere bak
Sonuç
cd, pwd ve ls komutları, bir Linux sunucusuyla etkileşim kurmak için sahip olmanız gereken temel araçlardır. pwd ile nerede olduğunuzu anlar, cd ile istediğiniz yere gidersiniz ve ls ile gittiğiniz yerde ne olduğunu görürsünüz. Bu üç komutun kombinasyonu, dosya sistemini keşfetmenize, dosyaları bulmanıza, dizin yapılarını anlamanıza ve sunucunuzu etkin bir şekilde yönetmenize olanak tanır.
Bu komutlarda ustalaşmak, Linux sistem yönetimi ve geliştirme yolculuğunuzun ilk ve en önemli adımıdır. Unutmayın, pratik yapmak en iyi öğrenme yöntemidir. Bir Linux sanal makinesi veya deneme sunucusu kurarak bu komutları ve çeşitli seçeneklerini deneyerek bilginizi pekiştirebilirsiniz. Zamanla, bu komutları kullanmak ikinci doğanız haline gelecek ve Linux dosya sistemi içinde akıcı bir şekilde gezinebileceksiniz.