2010-08-24 75 views
2

如何列出鏈接到libssl的我的Red Hat Linux系統上的所有可執行文件?我可以親近:確定哪些可執行文件鏈接到Linux上的特定共享庫

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

LDD顯示我的庫與可執行鏈接,但包含庫名行不還顯示文件名,所以雖然我得到了很多的比賽使用grep,我不知道如何退出匹配發生的可執行文件的名稱。任何幫助將不勝感激。

回答

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

也許會加上'-xdev',然後這可能是最強大的解決方案,我想。 – DarkDust 2010-08-24 17:47:58

+0

謝謝,這工作完美! – Steven 2010-08-24 18:34:00

0

我不知道,但也許sudo lsof |grep libssl.so

+0

不幸的是,我沒有root權限,所以我不能測試這個解決方案 – Steven 2010-08-24 18:35:37

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

而不是使用-exec,管while循環,並檢查匹配時重複的文件名前。或者,您可以使用()或真正的if/then/fi塊將「ldd $ i」添加到匹配檢查中。

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

-xdev使得找到留在同一個文件系統(即它不會潛入的/ proc或/ SYS)。注意:如果在Mac OS X上構建這個,你的-perm不能在這裏工作,所以我不知道它是否正確。而不是ldd我用otool -L但結果應該是相同的。

相關問題