Alternative per il comando "lsof"?


20

In molti casi "lsof" non è installato sulle macchine che con me devono funzionare, ma la "funzione" di lsof sarebbe molto necessaria (es. Su AIX). : \

Esistono applicazioni simili a "lsof" nel mondo non Windows?

AGGIORNAMENTO: ad es .: ho bisogno di sapere che quali processi utilizzano la directory "/ home / username"?


1
Potresti essere più specifico, per favore? Quali sistemi a parte AIX (che è sicuramente supportato da lsof) hai in mente? O c'è solo un tipo specifico di utilizzo di lsof che hai in mente? In generale: perché non lsof?
rozcietrzewiacz,

Sto usando GNU Linux 2.6.18-92.el5 e non ho lsof, né ho la capacità di usare lsof :(
SSH Questo

Risposte:


20

Lo so fuser, vedi se è disponibile sul tuo sistema.


cosa devo fornire a fuser come parametro per elencare tutti i file aperti su un sistema? : O ty!
LanceBaynes,

2
Il comando sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lesspuò mostrare tutti i processi che hanno file aperti sul filesystem montato /. Vedi la pagina man per un aiuto specifico.
enzotib,

TY! dà un output come questo: pastebin.com/raw.php?i=2z19g6Rk - ho cercato su Google per questo, ma non riesco a trovare alcun modo per produrre ad esempio: "gnome-screensaver", non "gnome-screensav" - così come posso emetterlo con nomi di comandi ampi? : O
LanceBaynes,

fornisce lo stesso output per: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes,

Qualcosa del genere: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

La Rosetta Stone Unix è una buona risorsa per questo tipo di domande. Menziona alcune alternative per lsof (vedi sotto). Si noti tuttavia che lsof è l'applicazione standard di fatto per quello che fa.

Se tutto ciò che desideri è trovare gli ID di processo con un determinato file aperto, puoi utilizzarli fusersu qualsiasi sistema conforme a POSIX.

Sui sistemi operativi con una /procdirectory, è possibile eseguire una query sui file aperti da un processo (il contrario dalla lsofmodalità operativa più comune) tramite le informazioni in /proc. Alcuni sistemi operativi hanno comandi per questo:


8

Se ti capita di eseguire Solaris, è un'alternativa a lsof, che non è installata di default e potrebbe soffocare su ZFS pfiles.

per esempio:

pfiles /proc/*


2

La mia versione, con solo un po 'meno di programmi di utilità:

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

Certo, potrebbe non gestire tutti i casi angolari, ma funziona nel mio caso d'uso.


0

Questo dovrebbe fare il trucco. Fornirà tutte le mappature dei descrittori di file tranne quelle che:

  • non sei autorizzato a visualizzare, oppure
  • sono per file che contengono la stringa "Autorizzazione negata"
( 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

Se sai già che ti interessano solo i mapping per determinati programmi, puoi invece utilizzare qualcosa di più sulla falsariga di:

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

A volte lsofè installato in/usr/sbin

Se /usr/sbinnon fa parte del tuo $PATH, potresti perdere il comando anche installato.

Controllalo con

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

L'OP ha affermato che lsof non è stato installato e ha chiesto alternative ...
Jeff Schaller
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.