Alternativen für "lsof" -Befehl?


19

In vielen Fällen ist "lsof" nicht auf den Rechnern installiert, auf denen ich arbeiten muss, aber die "Funktion" von lsof wird sehr benötigt (z. B. unter AIX). : \

Gibt es irgendwelche "lsof" ähnlichen Anwendungen in der Nicht-Windows-Welt?

UPDATE: Zum Beispiel: Ich muss wissen, dass bei welchen Prozessen das Verzeichnis "/ home / username" verwendet wird.


1
Könnten Sie bitte genauer sein? Welche Systeme außer AIX (das definitiv von lsof unterstützt wird) haben Sie im Sinn? Oder gibt es nur eine bestimmte Art der Verwendung, an die Sie denken? Generell: Warum nicht ?
Rozcietrzewiacz

Ich benutze Linux 2.6.18-92.el5 GNU und ich habe weder lsof noch die Fähigkeit, lsof zu benutzen :(
SSH This

Antworten:


19

Ich weiß fuser, ob auf Ihrem System verfügbar ist.


Was muss ich als Parameter fuser geben, um alle offenen Dateien auf einem System aufzulisten? : O ty!
LanceBaynes

2
Der Befehl sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lesskann alle Prozesse anzeigen, auf denen offene Dateien im Dateisystem gemountet sind /. Weitere Informationen finden Sie in der Manpage.
Enzotib

TY! Es gibt eine Ausgabe wie folgt : pastebin.com/raw.php?i=2z19g6Rk - Ich habe dafür gegoogelt, aber ich kann keine Möglichkeit finden, zum Beispiel "gnome-screensaver" auszugeben, nicht "gnome-screensav" - also Wie kann ich es mit breiten Befehlsnamen ausgeben? : O
LanceBaynes

es gibt die gleiche Leistung für: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

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
Etwa

15

Der Unix Rosetta Stone ist eine gute Ressource für diese Art von Fragen. Es werden einige Alternativen für lsof genannt (siehe unten). Beachten Sie jedoch, dass lsof de facto die Standardanwendung für das ist, was es tut.

Wenn Sie nur die Prozess-IDs suchen möchten, für die eine bestimmte Datei geöffnet ist, können Sie sie fuserauf jedem POSIX-kompatiblen System verwenden.

Auf Betriebssystemen mit einem /procVerzeichnis können Sie die von einem Prozess geöffneten Dateien (in umgekehrter Reihenfolge zur lsofhäufigsten Betriebsart) über information in abfragen /proc. Einige Betriebssysteme haben Befehle dafür:


8

Wenn Sie zufällig Solaris ausführen, ist eine Alternative zu Solaris, lsofdie nicht standardmäßig installiert ist und unter ZFS möglicherweise nicht funktioniert, die folgende pfiles.

z.B:

pfiles /proc/*


2

Meine Version, in der nur ein bisschen weniger Dienstprogramme ausgeführt werden:

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

Zugegeben, es werden möglicherweise nicht alle Eckfälle behandelt, aber es funktioniert in meinem Anwendungsfall.


0

Dies sollte den Trick machen. Es werden alle Dateideskriptor-Zuordnungen mit Ausnahme derjenigen angegeben, die:

  • Sie haben keine Berechtigung zum Anzeigen, oder
  • sind für Dateien, die den String "Permission denied" enthalten
( 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

Wenn Sie bereits wissen, dass Ihnen nur die Zuordnungen für bestimmte Programme wichtig sind, können Sie stattdessen Folgendes verwenden:

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

Manchmal lsofist in installiert/usr/sbin

Wenn dies /usr/sbinnicht zu Ihren Aufgaben gehört $PATH, kann es sein, dass Sie den installierten Befehl verpassen.

Überprüfen Sie es mit

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

Das OP sagte, dass lsof nicht installiert wurde und fragte nach Alternativen ...
Jeff Schaller
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.