“Lsof” komutu için alternatifler var mı?


20

Çoğu durumda, çalışmak zorunda olduğum makinelere "lsof" kurulu değildir, ancak lsof'un "işlevi" çok gerekli olacaktır (ör. AIX'te). : \

Windows olmayan dünyada "lsof" benzeri uygulamalar var mı?

GÜNCELLEME: ex .: Hangi işlemlerin "/ home / username" dizinini kullandığını bilmem gerekir?


1
Daha spesifik olabilir misiniz lütfen? Aklınızda hangi AIX (kesinlikle lsof tarafından desteklenen) sistemleri var? Yoksa aklınızda sadece bir tür özel kullanım var mı? Genellikle: neden olmasın ?
rozcietrzewiacz

Linux 2.6.18-92.el5 GNU kullanıyorum ve lsof'um yok, ne de lsof kullanma yeteneğim yok :(
SSH Bu

Yanıtlar:


20

Biliyorum, fusersisteminizde mevcut olup olmadığına bakın.


sistemdeki tüm açık dosyaları listelemek için fuser'ı parametre olarak ne vermeliyim? : Ey ty!
LanceBaynes

2
Komut sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | less, bağlı dosya sisteminde açık dosyaları olan tüm işlemleri gösterebilir /. Özel yardım için kılavuz sayfasına bakınız.
enzotib

TY! Bu gibi çıktı verir: pastebin.com/raw.php?i=2z19g6Rk - bunun için googled, ancak ex çıktı için herhangi bir yol bulamıyorum .: "gnome-screensaver", "gnome-screensav" değil - yani Geniş komut adlarıyla nasıl çıktı alabilirim? : O
LanceBaynes

aynı çıktıyı verir: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

Böyle bir şey:sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | while read user pid flags rest; do printf '%10s %10s %10s %s\n' $user $pid $flags "$(</proc/$pid/cmdline)"; done | less
enzotib

15

Unix Rosetta Taşı soruları bu tür için iyi bir kaynaktır. Lsof için birkaç alternatiften bahseder (aşağıya bakınız). Ancak, lsof'un yaptığı şey için fiili standart uygulama olduğunu unutmayın.

İstediğiniz belirli bir dosya açık olan işlem kimliklerini fuserbulmaksa, POSIX uyumlu herhangi bir sistemde kullanabilirsiniz.

Bir /procdizini olan işletim sistemlerinde, bir işlem tarafından açılan dosyaları (içindeki lsofen yaygın çalışma modunun tersi ) içindeki bilgileri kullanarak sorgulayabilirsiniz /proc. Bazı işletim sistemleri bunun için komutlara sahiptir:


8

Solaris'i çalıştırırsanız, lsofvarsayılan olarak yüklenmeyen ve ZFS'yi boğabilecek bir alternatiftir pfiles.

Örneğin:

pfiles /proc/*


2

Benim sürümüm, sadece biraz daha az yardımcı programları ile:

for proc_pid in $(find /proc -maxdepth 1 -name "[0-9]*"); do \
    ls -l ${proc_pid}/fd 2>/dev/null \
    | grep -q "$search_term" \
    && echo "${proc_pid#/proc/}"; \
done

Kuşkusuz, tüm köşe vakalarını ele almayabilir, ancak kullanım durumumda çalışıyor.


0

Bu hile yapmalı. Aşağıdakiler dışındaki tüm dosya tanımlayıcı eşlemelerini verecektir:

  • görüntüleme izniniz yok veya
  • "İzin reddedildi" dizesini içeren dosyalar içindir
( find /proc -mindepth 1 -maxdepth 1 \
  | grep -E [0-9]+ | xargs -n 1 -I% find %/fd \
  | xargs ls -l \
  | grep -v "Permission denied" ) 2>/dev/null \
| cut -d' ' -f12- | less

Yalnızca belirli programların eşlemelerini önemsediğinizi zaten biliyorsanız, bunun yerine aşağıdaki satırlarda daha fazla bir şey kullanabilirsiniz:

exec=sshd
pgrep "$exec" | xargs -n 1 ps -p
pgrep "$exec" | xargs -n 1 -I% find /proc/%/fd | xargs ls -l | cut -d' ' -f12- | less

-2

Bazen lsofyüklenir/usr/sbin

/usr/sbinSizin bir parçası değilse , $PATHyüklü komutu bile özleyebilirsiniz.

İle kontrol et

whereis lsof
lsof: /usr/sbin/lsof /usr/share/man/man8/lsof.8.gz

OP lsof yüklü olmadığını söyledi ve alternatifleri istedi ...
Jeff Schaller
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.