Active Directory Ortamında Dosya ve Dizin Yönetimi: ls Komutu

Dosya sistemi yönetimi, bir sistem yöneticisinin günlük rutininin en temel parçalarından biridir. Linux dünyasında ls komutu, bu rutinin tam kalbinde yer alır. Basit görünümüne aldanmayın; ls komutu onlarca parametresiyle birlikte gerçek bir güç aracına dönüşebilir. Active Directory ortamlarında bile, özellikle Linux tabanlı kimlik doğrulama sistemlerini veya Samba ile entegre dosya sunucularını yönetirken, ls komutunu derinlemesine bilmek hayat kurtarır.

ls Komutunun Temelleri

ls komutu, bir dizinin içeriğini listelemek için kullanılır. Syntax’ı son derece basittir:

ls [SEÇENEKLER] [DOSYA/DİZİN]

Hiçbir argüman vermeden çalıştırdığınızda, bulunduğunuz dizinin içeriğini gösterir. Ancak varsayılan çıktı oldukça kısıtlıdır; gizli dosyaları görmez, boyut bilgisi vermez, izin bilgisi vermez. İşte burada parametreler devreye girer.

Bir sysadmin olarak şunu söyleyeyim: ls -la yazmadan terminal açmak, kahvesiz güne başlamak gibidir. Neredeyse her oturumda bu kombinasyonu kullanırsınız.

Temel Parametreler

Uzun Format ile Listeleme

ls -l /var/log

Bu komut size şu bilgileri verir: dosya izinleri, link sayısı, sahip kullanıcı, sahip grup, dosya boyutu, son değiştirilme tarihi ve dosya adı. Active Directory ile entegre bir Linux sistemde, özellikle Samba paylaşımlarındaki dosyalara baktığınızda sahip ve grup bilgileri kritik öneme sahiptir.

Gizli Dosyaları Gösterme

ls -la /home/aduser

Nokta ile başlayan dosyalar Linux’ta gizli kabul edilir. Active Directory’den gelen bir kullanıcının home dizinine baktığınızda, .bashrc, .bash_history, .krb5 gibi dosyaları görmek istiyorsanız -a parametresi şarttır.

Parametrelerin Anlamları

-l: Uzun format, tüm detayları gösterir -a: Gizli dosyaları dahil eder (nokta ile başlayanlar) -h: Dosya boyutlarını insan okunabilir formatta gösterir (KB, MB, GB) -r: Ters sırada listeler -t: Son değiştirilme tarihine göre sıralar -S: Dosya boyutuna göre büyükten küçüğe sıralar -R: Alt dizinleri de recursive olarak listeler -i: Inode numaralarını gösterir -n: Kullanıcı ve grup adı yerine sayısal UID/GID gösterir -d: Dizinin içeriği yerine dizinin kendisini listeler -F: Dosya türünü gösteren karakter ekler (/ dizin için, * çalıştırılabilir için) -1: Her dosyayı tek satırda gösterir –color: Renkli çıktı üretir (genellikle varsayılan açıktır)

Active Directory Ortamında Gerçek Dünya Senaryoları

Senaryo 1: Kullanıcı Home Dizinlerini Denetlemek

Bir kurumsal ortamda Active Directory kullanıcılarının Linux sistemlerine SSSD veya Winbind üzerinden bağlandığı bir yapı düşünün. Kullanıcı home dizinlerinde yetkisiz dosya birikmesini kontrol etmeniz gerekiyor.

ls -lhS /home/ | head -20

Bu komut, home dizinindeki tüm kullanıcı klasörlerini boyutlarına göre sıralar ve en büyük 20 tanesini gösterir. Disk doluluk sorunlarını hızlıca teşhis etmek için mükemmeldir. Boyutun aniden büyüdüğünü gördüğünüz bir kullanıcıyı hemen fark edersiniz.

ls -la /home/aduser/.ssh/

Active Directory kullanıcısının SSH anahtar yapılandırmasını incelemek için bu komutu kullanabilirsiniz. authorized_keys dosyasının varlığını ve izinlerini kontrol etmek güvenlik denetiminin parçasıdır.

Senaryo 2: Samba Paylaşımlarında İzin Sorunlarını Teşhis Etmek

ls -ln /srv/samba/share/

-n parametresi burada çok işe yarar. Kullanıcı adı yerine sayısal UID/GID görmek, özellikle UID eşleşmesi sorunlarını teşhis ederken zaman kazandırır. Dosya sahibinin UID’si Active Directory’deki kullanıcının UID’siyle eşleşmiyorsa, izin sorunları kaçınılmazdır.

Senaryo 3: Log Dosyalarını Zaman Damgasına Göre İncelemek

Sistem sorunlarını araştırırken en son oluşan log dosyalarını bulmak kritiktir:

ls -lt /var/log/ | head -10

Bu komut, log dizinindeki dosyaları en yeni birinci gelecek şekilde sıralar ve ilk 10’unu gösterir. Bir incident sonrasında hangi log dosyasına bakacağınızı anında belirleyebilirsiniz.

ls -lth /var/log/samba/

Samba loglarını incelerken hem tarih sıralaması hem de insan okunabilir boyut bilgisi istiyorsanız bu kombinasyon çok işe yarar.

İleri Seviye Kullanım

Recursive Listeleme

ls -lR /etc/sssd/

SSSD yapılandırma dizinini ve tüm alt dizinlerini recursive olarak listeler. SSSD, Linux sistemlerini Active Directory’ye bağlamak için en yaygın kullanılan araçtır ve yapılandırma dosyalarının doğru izinlere sahip olması zorunludur. sssd.conf dosyasının izni 600 olmalıdır, aksi halde SSSD başlamayı reddeder.

Inode Bilgisiyle Listeleme

ls -li /var/log/

Inode numaraları, hard link’leri tespit etmek veya aynı fiziksel dosyaya birden fazla isimle erişilip erişilmediğini anlamak için kullanılır. Güvenlik denetimlerinde bu bilgi önem kazanabilir.

Belirli Uzantıdaki Dosyaları Listeleme

ls -lh /etc/krb5* 

Kerberos yapılandırma dosyalarını listelemek için kullanışlıdır. Active Directory entegrasyonunda Kerberos merkezi bir rol oynar ve bu dosyaların varlığını düzenli olarak kontrol etmek iyi bir alışkanlıktır.

Dizinin Kendisini Listeleme

ls -ld /srv/samba/share/

-d parametresi, dizinin içeriği yerine dizinin kendisinin meta verilerini gösterir. Bir Samba paylaşımının kök dizininin izinlerini kontrol etmek için bu parametreyi sık kullanırsınız.

ls Çıktısını Yorumlamak

ls -l çıktısının ilk sütununu doğru okumak, izin yönetiminin temelidir:

ls -la /etc/sssd/sssd.conf

Tipik bir çıktı şöyle görünür:

-rw------- 1 root root 512 Ara 15 14:23 /etc/sssd/sssd.conf

Bu çıktıyı okumak için:

  • İlk karakter dosya tipidir: - normal dosya, d dizin, l sembolik link, b blok aygıt, c karakter aygıt
  • Sonraki 9 karakter izinleri gösterir: rwxrwxrwx formatında sahip/grup/diğer
  • Sayı hard link sayısını gösterir
  • İlk isim dosya sahibini gösterir
  • İkinci isim grubunu gösterir
  • Sayısal değer bayt cinsinden boyutu gösterir
  • Tarih son değiştirilme zamanını gösterir

Script’lerde ls Kullanımı

Birçok tecrübeli sysadmin, script’lerde ls yerine find veya stat komutlarını tercih eder çünkü ls çıktısını parse etmek güvenilir değildir. Dosya adında özel karakter veya boşluk varsa script’iniz bozulabilir. Ancak monitoring veya raporlama amaçlı basit script’lerde ls hala yaygın kullanılır.

#!/bin/bash
# Active Directory kullanıcı home dizinlerini raporla

echo "=== Home Dizin Boyut Raporu ==="
echo "Tarih: $(date)"
echo ""

ls -lh /home/ | grep "^d" | awk '{print $5, $9}' | sort -rh

Bu basit script, home dizinindeki tüm kullanıcı klasörlerinin boyutlarını büyükten küçüğe sıralar. Aylık kapasite planlaması için hızlı bir rapor çıkarmak istediğinizde işe yarar.

#!/bin/bash
# Belirli bir süreden eski log dosyalarını listele

echo "30 günden eski Samba log dosyaları:"
ls -lt /var/log/samba/ | tail -n +2 | while read line; do
    filename=$(echo $line | awk '{print $9}')
    if [ -n "$filename" ]; then
        age=$(( ($(date +%s) - $(stat -c %Y /var/log/samba/$filename)) / 86400 ))
        if [ $age -gt 30 ]; then
            echo "$filename - $age gün önce değiştirildi"
        fi
    fi
done

Active Directory Grup Politikası Dosyalarını Kontrol Etmek

ls -lR /var/lib/samba/sysvol/ | grep -E ".pol$|.inf$"

Samba’nın SYSVOL dizinindeki Group Policy dosyalarını recursive olarak listeler ve sadece .pol ve .inf uzantılı dosyaları filtreler. Active Directory replikasyon sorunlarını araştırırken bu dosyaların varlığını kontrol etmek önemlidir.

Alias Kullanımı ile Verimliliği Artırmak

Sysadmin’lerin büyük çoğunluğu, sık kullandıkları ls kombinasyonları için alias tanımlar:

# ~/.bashrc veya ~/.bash_aliases dosyasına ekleyin

alias ll='ls -lh'
alias la='ls -lha'
alias lt='ls -lht'
alias lS='ls -lhS'
alias ltr='ls -lhtr'

ll: Uzun format, insan okunabilir boyut la: Gizli dosyalar dahil, uzun format, insan okunabilir lt: Tarihe göre sıralı, en yeni önce lS: Boyuta göre sıralı, en büyük önce ltr: Tarihe göre ters sıralı, en eski önce (eski dosyaları bulmak için)

Bu alias’ları ekledikten sonra source ~/.bashrc komutunu çalıştırmayı unutmayın.

Renkli Çıktı Yönetimi

Modern Linux dağıtımlarında ls --color=auto genellikle varsayılan olarak aktiftir. Renkler dosya tiplerini görsel olarak ayırt etmeyi kolaylaştırır. Ancak log analizi veya script çıktısı için renklendirmeyi kapatmak isteyebilirsiniz:

ls --color=never /var/log/ > /tmp/log_listesi.txt

Çıktıyı bir dosyaya yönlendirirken renk kodlarının dosyaya yazılmasını engellemek için bu kullanım önerilir. Aksi halde dosyanızda okunaksız ANSI escape kodları görürsünüz.

ls ve find Kombinasyonu

ls tek başına bazen yeterli olmaz. find komutuyla birlikte kullanıldığında çok daha güçlü hale gelir:

find /home -name "*.tmp" -exec ls -lh {} ;

Tüm home dizinlerinde .tmp uzantılı dosyaları bulur ve her birinin detaylı bilgisini gösterir. Disk temizleme operasyonlarından önce neyi sileceğinizi görmek için kullanışlıdır.

find /var/log/samba -mtime -1 -exec ls -lh {} ;

Son 24 saat içinde değiştirilen Samba log dosyalarını listeler. Aktif bir sorun araştırmasında hangi logların güncel olduğunu hızlıca belirleyebilirsiniz.

Pratik Güvenlik Denetimi Senaryosu

Active Directory ortamında çalışan bir Linux sunucusunda güvenlik denetimi yapıyorsunuz. İşte adım adım kullandığınız ls komutları:

# SUID/SGID bit kontrolu icin - ls ciktisindan okuyabilirsiniz
ls -la /usr/bin/ | grep "^-..s"

# World-writable dizinleri isaretlemek
ls -la /tmp/
ls -la /var/tmp/

# SSH authorized_keys dosyalarini kontrol et
for user in $(ls /home/); do
    echo "=== $user ==="
    ls -la /home/$user/.ssh/ 2>/dev/null || echo "SSH dizini yok"
done

Bu script benzeri kullanım, her kullanıcının SSH yapılandırmasını sistematik olarak kontrol etmenizi sağlar. Yetkisiz authorized_keys girişlerini tespit etmek, özellikle Active Directory kullanıcılarının hesaplarında kritik öneme sahiptir.

Sık Yapılan Hatalar

Yeni başlayan sysadmin’lerin ls kullanımında yaptığı en yaygın hata, çıktıyı script’te parse etmeye çalışmaktır. Özellikle boşluk içeren dosya adları ciddi sorunlara yol açar. Bir başka yaygın hata, ls -l yerine sadece ls kullanmak ve kritik bilgileri kaçırmaktır.

Ayrıca -R parametresini büyük dizinlerde dikkatsizce kullanmak, terminali uzun süre kilitleyebilir. / gibi kök dizinde ls -R çalıştırmak ciddi bir hatadır. Her zaman hedef dizini açıkça belirtin.

Son olarak, ls komutunun çıktısı locale ayarlarından etkilenir. Farklı sistemlerde tarih formatları veya karakter sıralamaları değişebilir. Script yazarken bunu göz önünde bulundurmak için LC_ALL=C ls -l kullanımını tercih edin.

Sonuç

ls komutu, görünürde basit ama pratikte son derece güçlü bir araçtır. Active Directory ile entegre Linux ortamlarında dosya sahipliği, izinler ve zaman damgaları hakkında hızlı bilgi edinmek için vazgeçilmezdir. Temel parametreleri ezberlemek yetmez; hangi senaryoda hangi kombinasyonu kullanacağınızı bilmek sizi gerçek bir sysadmin yapar.

Günlük rutininize alias tanımlamalarını ekleyin, ls -lh yerine ne zaman find kullanmanız gerektiğini öğrenin ve güvenlik denetimlerinde ls çıktısını nasıl yorumlayacağınızı kavrayın. Bu temel aracı iyi kullanmak, daha karmaşık sistem yönetimi görevleri için sağlam bir zemin oluşturur. Unutmayın, iyi bir sysadmin temel araçlarını mükemmel kullanandır.

Yorum yapın