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.

LanceBaynes
quelle
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
Verwandte Frage: wie man offene Datei ohne lsof überprüfen
Stéphane Gourichon

Antworten:

19

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

Enzotib
quelle
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:

Gilles 'SO - hör auf böse zu sein'
quelle
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/*

jlliagre
quelle
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.

Bryce Schober
quelle
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
Parthischer Schuss
quelle
-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
Clement
quelle
Das OP sagte, dass lsof nicht installiert wurde und fragte nach Alternativen ...
Jeff Schaller