Alternatives pour la commande «lsof»?


20

Dans de nombreux cas, "lsof" n'est pas installé sur les machines avec lesquelles je dois travailler, mais la "fonction" de lsof serait très nécessaire (ex. Sous AIX). : \

Existe-t-il des applications similaires à "lsof" dans le monde non Windows?

MISE À JOUR: par exemple: j'ai besoin de savoir quels processus utilisent le répertoire "/ home / username"?


1
Pourriez-vous être plus précis, s'il vous plaît? À quels systèmes, à part AIX (qui est définitivement pris en charge par lsof), pensez-vous? Ou n'y a-t-il qu'un seul type d'utilisation spécifique de lsof que vous envisagez? Généralement: pourquoi pas lsof?
rozcietrzewiacz

J'utilise Linux 2.6.18-92.el5 GNU, et je n'ai pas lsof, ni la possibilité d'utiliser lsof :(
SSH Ce

Réponses:


20

Je sais fuser, voir si est disponible sur votre système.


que dois-je donner à l'unité de fusion comme paramètre pour répertorier tous les fichiers ouverts sur un système? : O ty!
LanceBaynes

2
La commande sudo fuser -vm / 2>&1 | awk '$3 ~ /f|F/' | lesspeut afficher tous les processus ayant des fichiers ouverts sur le système de fichiers monté /. Voir la page de manuel pour une aide spécifique.
enzotib

TY! il donne une sortie comme celle-ci: pastebin.com/raw.php?i=2z19g6Rk - je l'ai recherché sur Google, mais je ne trouve aucun moyen de sortir ex.: "gnome-screensaver", pas "gnome-screensav" - donc comment puis-je le sortir avec des noms de commande larges? : O
LanceBaynes

il donne la même sortie pour: pastebin.com/raw.php?i=Fe3EJvUv
LanceBaynes

Quelque chose comme ça: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 pierre Unix Rosetta est une bonne ressource pour ce genre de questions. Il mentionne quelques alternatives pour lsof (voir ci-dessous). Notez cependant que lsof est l'application standard de facto pour ce qu'il fait.

Si tout ce que vous voulez est de trouver les ID de processus qui ont un fichier particulier ouvert, vous pouvez les utiliser fusersur n'importe quel système compatible POSIX.

Sur les systèmes d'exploitation dotés d'un /procrépertoire, vous pouvez interroger les fichiers ouverts par un processus (à l'inverse du lsofmode de fonctionnement le plus courant de) via les informations de /proc. Certains systèmes d'exploitation ont des commandes pour cela:


8

S'il vous arrive d'exécuter Solaris, une alternative à lsof, qui n'est pas installée par défaut et pourrait s'étouffer sur ZFS, est pfiles.

par exemple:

pfiles /proc/*


2

Ma version, avec seulement un peu moins d'utilitaires:

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

Certes, il ne peut pas gérer tous les cas d'angle, mais fonctionne dans mon cas d'utilisation.


0

Cela devrait faire l'affaire. Il donnera tous les mappages de descripteurs de fichiers, sauf ceux qui:

  • vous n'êtes pas autorisé à afficher, ou
  • sont pour les fichiers qui contiennent la chaîne "Autorisation refusée"
( 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

Si vous savez déjà que vous ne vous souciez que des mappages de certains programmes, vous pouvez utiliser à la place quelque chose de plus comme:

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

Parfois lsofest installé dans/usr/sbin

Si cela /usr/sbinne fait pas partie de votre $PATH, vous pourriez manquer la commande même installée.

Vérifiez avec

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

Le PO a déclaré que lsof n'était pas installé et a demandé des alternatives ...
Jeff Schaller
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.