Linux'ta lsof Komutu ile Açık Dosyaları ve Ağ Bağlantılarını Yönetme

Linux sistemlerinde açık dosyaları, ağ bağlantılarını ve süreç kaynaklarını lsof komutu ile nasıl izleyeceğinizi öğrenin. Disk alanı sorunlarını ve port çakışmalarını çözün.

L
Linuxize
21 görüntülenme
Linux'ta lsof Komutu ile Açık Dosyaları ve Ağ Bağlantılarını Yönetme

Giriş

Linux sistemlerinde 'lsof' (list open files), sistemdeki açık dosyaları ve ağ bağlantılarını listelemek için kullanılan en güçlü teşhis araçlarından biridir. Linux'ta hemen hemen her şey bir dosya olarak temsil edildiğinden (soketler, dizinler, borular), lsof sistemin o anki durumuna dair derinlemesine bir bakış sağlar.

Sorun 1: Hangi Süreç Bir Portu Kullanıyor?

Bir servis başlatılamadığında veya 'Address already in use' hatası aldığınızda, portu hangi sürecin işgal ettiğini bulmanız gerekir.

  1. Terminali açın.
  2. Aşağıdaki komutu kullanarak 80 numaralı portu dinleyen süreci listeleyin:
  3. sudo lsof -nP -iTCP:80 -sTCP:LISTEN
  4. Çıktıda PID (Process ID) sütununu bulun ve gerekirse kill [PID] komutu ile süreci sonlandırın.
İpucu: -nP bayrakları, adreslerin ve portların sayısal olarak görüntülenmesini sağlar, bu da DNS çözümlemesini atlayarak komutun daha hızlı çalışmasına yardımcı olur.

Sorun 2: Silinen Dosyalar Disk Alanını Neden Boşaltmıyor?

Bazen büyük bir log dosyasını silseniz bile disk alanının boşalmadığını görürsünüz. Bunun nedeni, bir sürecin o dosyayı hala açık tutmasıdır.

  1. Silinmiş ancak hala açık olan dosyaları listelemek için:
  2. sudo lsof +L1
  3. Çıktıda (deleted) ibaresini gördüğünüz dosyayı kullanan süreci belirleyin.
  4. Söz konusu süreci yeniden başlatarak dosya tanımlayıcısının (file descriptor) serbest kalmasını sağlayın.

Sorun 3: Belirli Bir Dosyayı Hangi Süreç Açtı?

Bir dosyanın kilitli olması veya erişim hatası vermesi durumunda, dosyayı hangi sürecin kullandığını görmek için:

lsof /var/log/syslog

Önemli Filtreleme Seçenekleri

  • -p [PID]: Belirli bir PID'ye ait tüm açık dosyaları gösterir.
  • -u [kullanıcı]: Belirli bir kullanıcının açtığı tüm dosyaları listeler.
  • -c [komut]: Belirli bir komut ismine sahip süreçleri filtreler.
  • -a: 'AND' mantığı ile birden fazla filtreyi birleştirir.
Uyarı: lsof komutunu kök yetkileriyle (sudo) çalıştırmanız önerilir. Aksi takdirde, yalnızca kendi kullanıcı hesabınızın erişebildiği süreçleri görebilirsiniz.

Sonuç

lsof, sistem yöneticileri için vazgeçilmez bir araçtır. Port çakışmalarından dosya sistemi kilitlerine kadar birçok karmaşık sorunu, sistemin o anki 'açık dosya' haritasını çıkararak hızla çözmenize olanak tanır. Daha karmaşık ağ istatistikleri için ss komutu ile birlikte kullanılması önerilir.

Kaynak

Linuxize