it-swarm.it

Alternative per il comando "lsof"?

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

21
LanceBaynes

Conosco fuser , vedi se è disponibile sul tuo sistema.

21
enzotib

nix Rosetta Stone è 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 utilizzare fuser su qualsiasi sistema conforme a POSIX.

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

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

per esempio:

pfiles /proc/*

8
jlliagre

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.

2
Bryce Schober

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