it-swarm-id.com

Alternatif untuk perintah "lsof"?

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"?

21
LanceBaynes

Saya tahu fuser , lihat apakah tersedia di sistem Anda.

21
enzotib

The nix Rosetta Stone adalah sumber yang bagus untuk pertanyaan semacam ini. Itu 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 menggunakan fuser pada sistem yang mendukung POSIX.

Pada sistem operasi dengan /proc direktori, Anda dapat meminta file dibuka dengan proses (kebalikan dari mode operasi paling umum lsof) melalui informasi dalam /proc. Beberapa sistem operasi memiliki perintah untuk itu:

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

misalnya:

pfiles /proc/*

8
jlliagre

Versi saya, dengan hanya sedikit menjalankan utilitas:

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.

2
Bryce Schober

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
0
Parthian Shot