Alternatif untuk perintah "lsof"?


20

Dalam banyak kasus "lsof" tidak diinstal pada mesin yang dengan saya harus bekerja, tetapi "fungsi" lsof akan sangat dibutuhkan (mis. Pada AIX). : \

Apakah ada "lsof" seperti aplikasi di dunia non-windows?

UPDATE: for ex .: Saya perlu tahu bahwa proses apa yang menggunakan direktori "/ home / nama pengguna"?


1
Bisakah Anda lebih spesifik? Sistem apa yang terpisah dari AIX (yang tentunya didukung oleh lsof) yang ada dalam pikiran Anda? Atau hanya ada satu jenis penggunaan khusus yang ada dalam pikiran Anda? Umumnya: mengapa tidak lsof?
rozcietrzewiacz

Saya menggunakan Linux 2.6.18-92.el5 GNU, dan saya tidak memiliki lsof, saya juga tidak memiliki kemampuan untuk menggunakan lsof :(
SSH This

Jawaban:


20

Saya tahu fuser, lihat apakah tersedia di sistem Anda.


apa yang harus saya berikan fuser sebagai parameter untuk mendaftar semua file yang terbuka pada suatu sistem? : O ty!
LanceBaynes

2
Perintah sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lessdapat menunjukkan semua proses memiliki file terbuka di sistem file yang terpasang /. Lihat halaman manual untuk bantuan spesifik.
enzotib

TY! itu memberikan output seperti ini: pastebin.com/raw.php?i=2z19g6Rk - saya googled untuk itu, tetapi saya tidak dapat menemukan cara untuk output ex .: "gnome-screensaver", bukan "gnome-screensav" - jadi bagaimana saya bisa mengeluarkannya dengan nama perintah lebar? : O
LanceBaynes

itu memberikan hasil yang sama untuk: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

Sesuatu seperti ini: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

The Unix Rosetta Stone adalah sumber yang baik untuk jenis pertanyaan. Ini menyebutkan beberapa alternatif untuk lsof (lihat di bawah). Namun perlu dicatat bahwa lsof adalah aplikasi standar de facto untuk apa yang dilakukannya.

Jika yang Anda inginkan adalah menemukan ID proses yang memiliki file tertentu terbuka, maka Anda dapat menggunakannya fuserpada sistem yang mendukung POSIX.

Pada sistem operasi dengan /procdirektori, Anda dapat meminta file dibuka dengan proses (kebalikan dari lsofmode operasi yang paling umum) melalui informasi di /proc. Beberapa sistem operasi memiliki perintah untuk itu:


8

Jika Anda menjalankan Solaris, alternatif untuk lsof, yang tidak diinstal secara default dan mungkin tercekik pada ZFS, adalah pfiles.

misalnya:

pfiles /proc/*


2

Versi saya, dengan hanya sedikit utilitas yang kurang berjalan:

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

Memang, ini mungkin tidak menangani semua kasus sudut, tetapi bekerja dalam kasus penggunaan saya.


0

Ini harus melakukan trik. Ini akan memberikan semua pemetaan file descriptor kecuali yang:

  • Anda tidak memiliki izin untuk melihat, atau
  • untuk file yang berisi string "Izin ditolak"
( 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

Jika Anda sudah tahu bahwa Anda hanya peduli dengan pemetaan untuk program tertentu, Anda bisa menggunakan sesuatu yang lebih sesuai:

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

Terkadang lsofdipasang di/usr/sbin

Jika /usr/sbinbukan bagian dari Anda $PATH, Anda bisa melewatkan perintah bahkan diinstal.

Periksa dengan

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

OP mengatakan bahwa lsof tidak diinstal dan meminta alternatif ...
Jeff Schaller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.