Alternatywy dla polecenia „lsof”?


20

W wielu przypadkach „lsof” nie jest instalowany na komputerach, z którymi muszę pracować, ale „funkcja” lsof byłaby bardzo potrzebna (np. W systemie AIX). : \

Czy są jakieś aplikacje typu „lsof” w świecie innym niż Windows?

AKTUALIZACJA: np .: muszę wiedzieć, że jakie procesy wykorzystują katalog „/ home / username”?


1
Czy mógłbyś być bardziej szczegółowy? Jakie systemy oprócz AIX (który jest zdecydowanie obsługiwany przez lsof) masz na myśli? Czy jest tylko jeden konkretny sposób korzystania z lsof? Ogólnie: dlaczego nie lsof?
rozcietrzewiacz

Używam GNU Linuksa 2.6.18-92.el5 i nie mam lsof, ani nie mam możliwości korzystania z lsof :(
SSH To

Odpowiedzi:


20

Wiem o tym fuser, czy jest dostępny w twoim systemie.


co muszę podać utrwalaczowi jako parametr, aby wyświetlić listę wszystkich otwartych plików w systemie? : O ty!
LanceBaynes,

2
Polecenie sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lessmoże wyświetlać wszystkie procesy z otwartymi plikami w zamontowanym systemie plików /. Aby uzyskać konkretną pomoc, zobacz stronę podręcznika man.
enzotib,

TY! daje wyjście w ten sposób: pastebin.com/raw.php?i=2z19g6Rk - poszukałem go, ale nie mogę znaleźć żadnego sposobu na wyświetlenie np .: „wygaszacz ekranu gnome”, a nie „wygaszacz ekranu gnome” - więc jak mogę go wypisać z szerokimi nazwami poleceń? : O
LanceBaynes

daje to samo wyjście dla: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

Coś w tym stylu: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 Stone jest dobrym źródłem dla tego rodzaju pytania. Wymienia kilka alternatyw dla lsof (patrz poniżej). Zauważ jednak, że lsof jest de facto standardową aplikacją do tego, co robi.

Jeśli wszystko, czego potrzebujesz, to znaleźć identyfikatory procesów, które mają otwarty konkretny plik, możesz użyć go fuserw dowolnym systemie zgodnym z POSIX.

W systemach operacyjnych z /prockatalogiem można wyszukiwać pliki otwierane przez proces (odwrotność od lsofnajpopularniejszego trybu działania) poprzez informacje w /proc. Niektóre systemy operacyjne mają do tego polecenia:


8

Jeśli zdarzy ci się uruchomić Solaris, alternatywą dla lsof, która nie jest instalowana domyślnie i może się zadławić w ZFS, jest pfiles.

na przykład:

pfiles /proc/*


2

Moja wersja z tylko trochę mniej narzędziami:

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

Trzeba przyznać, że może nie obsługiwać wszystkich skrzynek narożnych, ale działa w moim przypadku użycia.


0

To powinno załatwić sprawę. Daje wszystkie mapowania deskryptorów plików oprócz tych, które:

  • nie masz uprawnień do przeglądania, lub
  • dotyczą plików zawierających ciąg „Odmowa zezwolenia”
( 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

Jeśli już wiesz, że zależy Ci tylko na mapowaniu niektórych programów, możesz zamiast tego użyć czegoś więcej w następujący sposób:

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

Czasami lsofjest instalowany w/usr/sbin

Jeśli /usr/sbinnie jest częścią twojego $PATH, możesz przegapić nawet zainstalowane polecenie.

Sprawdź to za pomocą

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

OP powiedział, że lsof nie został zainstalowany i poprosił o alternatywy ...
Jeff Schaller
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.