Determinare quale eseguibili collegamento a una specifica libreria condivisa su Linux
-
01-10-2019 - |
Domanda
Come posso elencare tutti i file eseguibili sul mio sistema Red Hat Linux che si collegano a libssl? Posso avvicinarmi con:
find / -type f -perm /a+x -exec ldd {} \; | grep libssl
LDD mi mostra quali librerie i collegamenti eseguibili con, ma la riga che contiene il nome della libreria non mostra anche il nome del file, quindi anche se ho un sacco di partite con grep, non riesco a capire come eseguire il nome dell'eseguibile da cui la partita si è verificato. Qualsiasi aiuto sarebbe molto apprezzato.
Soluzione
find / -type f -perm /a+x -print0 |
while read -d $'\0' FILE; do
ldd "$FILE" | grep -q libssl && echo "$FILE"
done
Altri suggerimenti
Non sono sicuro, ma forse sudo lsof |grep libssl.so
find /usr/bin/ -type f -perm /a+x | while read i; do match=`ldd $i | grep libssl`; [[ $match ]] && echo $i; done
Invece di usare exec, tubo per un ciclo while e controllare un match prima di echo il nome del file. Opzionalmente, è possibile aggiungere "LDD $ i" per il controllo sulla partita utilizzando () o un vero e proprio if / then / fi blocco.
find / -type f -perm /a+x -xdev | while read filename ; do
if ldd "$filename" | grep -q "libssl" ; then
echo "$filename"
fi
done
Le marche -xdev
trovare soggiorno sullo stesso file system (vale a dire che non sarà tuffo nel / proc o / sys). Nota: se costruito questo su Mac OS X, il -perm tuo non funziona qui quindi non so se è corretto. E invece di ldd
ho usato otool -L
ma il risultato dovrebbe essere lo stesso.