lsof - çıktıyı yalnızca fiziksel dosyalarla sınırla - nasıl?


30

Yalnızca fiziksel dosyaları listelemem gerektiğini (soketleri değil, TCP / IP bağlantılarını değil, yalnızca fiziksel dosyaları) nasıl söyleyebilirim?


İlk önce neye ihtiyacınız olduğunu belirlemeniz gerekir. "Fiziksel dosyalar" demek çok genel. lsof size bir dosya tanıtıcı ile açılan dosyaları verecektir. size bellekle eşlenmiş dosyalar olarak açılmış olan ve iş parçacıklarına göre dosyaları verecektir. işlemlerin açtığı kütüphane dosyalarını size verecek. bunların hepsi fiziksel dosyalardır, ancak kullanılma şekilleri farklıdır.
Michael Martinez,

Yanıtlar:


37

Sadece bazı man sayfalarına baktım, görünüşe göre bu komutu kullanıyorsunuz:

sudo lsof /

Bu, Linux dosya sistemindeki her şey olan / dizinindeki tüm açık dosyaları listeler. Sadece test edilmiş ve sadece REG ve DIR gösterir.

Daha fazla örnek:

lsof -a -d 0-999 -c <command name> /
lsof -a -d 0-999 -p <pid> /

0-999 dosya tanıtıcı numarasına sahip dosyaları sınırlar.


2
FIFO'ları da içerecektir.
Kyle Brandt

1
Güzel ve basit. Sadece son sütuna ihtiyacınız varsa, ekleyebilirsiniz | awk {'print $ 9'} İlginç. Çıktımda da yüzde iki elde edemiyorum. Fedora 12 ve CentOS 5.3
egorgry

CentOS 5.2 ve Ubuntu 9.04, fifo'yu benim için iade etti, bir değişiklik olabilirdi, ama beşinci olduğundan emin misiniz? İlk önce onu izlerdim ve orada olduğundan emin olurdum, denemek yerine/
Kyle Brandt

Ayrıca, ben sadece nitpicking oldu, sadece ses istemiyormuş gibi geliyor ve muhtemelen çok fazla beşik olmayacak.
Kyle Brandt

4
lsof / sadece kök dosya sistemindeki dosyaları içerir. Birden fazla dosya sisteminiz monte edilmişse, çıktıda görünmezler. En iyi yolunu bulmak sadece grep kullanmak.
James

9

Bir anahtar olabilir, ancak grep aracılığıyla filtrelemeyi sakıncası yoksa sudo lsof | egrep 'REG|DIR', "fiziksel dosyalar" ile normal dosyaları ve dizinleri kastediyorsunuz.

man lsofBu sütunda olabilecek tüm türler için man sayfasının ÇIKIŞI :: TİP bölümüne bakın .


24
Bir geçiş olabilir, ancak manpage birinin doktora tezi gibi okuyor ... :)
Cawflands

1
Evet ... bir erkeğin okuması çok zor ...; p)
Vladislav Rastrusny

Bu yorumu + 1'leyin. :)
egorgry

Yeterince müşterilerle bir vpn sunucu üzerinde, lsof benim için bir seçenek değildir bu yüzden greping, döndürmez
Ohad Cohen

@OhadCohen lsof, aradığı şeyi kısıtlarsanız geri dönecektir. Manpage'de "FD" konusuna bakın (mem, cwd, pd, etc.)
Michael Martinez

2

Yaptığım şey bu benim için mükemmeldi:

lsof -F n -p 12501 | grep ^n/ | cut -c2- | sort -u

-F nSeçeneği lsofsadece çıktısını neden olacaktır isimleri açık dosyaların. Açık bir dosyanın adı olan her çıkış hattı tek bir karakterle başlayacak n ve hemen ardından isim . Normal dosyalar her zaman dosyanın tam ve tam nitelikli adı olur. Bu grep ^n/sadece /( ile başlayan, mutlak, tam nitelikli bir dosya adı anlamına gelir); Böylece açık portlar, soketler, borular (FIFO'lar gibi), vb. gibi şeyleri cut -c2-elimine eder. İlk karakter olan nsadece dosya ismini kaldıracaktır . Sonra nihayet, sort -uyinelenen girişleri ortadan kaldıracaktır.

Bir uyarı, bu adlarıyla başlandığı sürece normal olmayan dosyaları içerecektir /. Örneğin, aşağıdakilerden başlayan tüm dosyalar dahil edilir:

  • / dev
  • / proc
  • / sys

İşletim sisteminize bağlı olarak başkaları da olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.