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,ddizin,lsembolik link,bblok aygıt,ckarakter 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.