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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top