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"?
Je connais fuser
, voyez s'il est disponible sur votre système.
nix Rosetta Stone 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 utiliser fuser
sur n'importe quel système compatible POSIX.
Sur les systèmes d'exploitation avec un /proc
, vous pouvez interroger les fichiers ouverts par un processus (l'inverse du mode de fonctionnement le plus courant de lsof
) via les informations de /proc
. Certains systèmes d'exploitation ont des commandes pour cela:
procfiles
est fourni avec le système (depuis AIX 5.2). Voir aussi mise à jour des outils de performance AIX 5.2 et tilisation et exemples de commandes lsof, pfiles, procfiles .pfiles
(existant depuis 2.5 ).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/*
Ma version, avec seulement un peu moins de fonctionnement des 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.
Cela devrait faire l'affaire. Il donnera tous les mappages de descripteurs de fichiers, sauf ceux qui:
( 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 pour 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