2010-08-24 4 views
2

Comment puis-je lister tous les exécutables sur mon système Red Hat Linux qui sont liés à libssl? Je peux me rapprocher avec:Déterminer quels exécutables sont liés à une bibliothèque partagée spécifique sous Linux

find/-type f -perm /a+x -exec ldd {} \; | grep libssl 

ldd me montre quelles bibliothèques les liens exécutables avec, mais la ligne qui contient le nom de la bibliothèque ne montre pas aussi le nom du fichier, donc bien que je reçois beaucoup de matches avec grep, je ne peut pas comprendre comment annuler le nom de l'exécutable à partir de laquelle le match s'est produit. Toute aide serait grandement appréciée.

Répondre

3
find/-type f -perm /a+x -print0 | 
    while read -d $'\0' FILE; do 
     ldd "$FILE" | grep -q libssl && echo "$FILE" 
    done 
+0

Peut-être ajouter '-xdev' et c'est probablement la solution la plus robuste, je pense. – DarkDust

+0

Merci cela a fonctionné parfaitement! – Steven

0

Je ne sais pas, mais peut-être sudo lsof |grep libssl.so

+0

Malheureusement je n'ai pas de privilèges root donc je ne peux pas tester cette solution – Steven

0
find /usr/bin/ -type f -perm /a+x | while read i; do match=`ldd $i | grep libssl`; [[ $match ]] && echo $i; done 

Au lieu d'utiliser exec, tuyau à une boucle while et vérifier un match avant écho le nom du fichier. En option, vous pouvez ajouter "ldd $ i" à la vérification de correspondance en utilisant soit() soit un vrai bloc if/then/fi.

0
find/-type f -perm /a+x -xdev | while read filename ; do 
    if ldd "$filename" | grep -q "libssl" ; then 
    echo "$filename" 
    fi 
done 

Le -xdev fait trouver rester sur le même système de fichiers (par exemple, il ne sera pas plonger dans/proc ou/sys). Note: si construit sur Mac OS X, le -perm de votre ne fonctionne pas ici donc je ne sais pas si c'est correct. Et au lieu de ldd j'ai utilisé otool -L mais le résultat devrait être le même.

Questions connexes