
공유 라이브러리의 파일 이름 목록을 가져오기 위한 GNU Linux가 내장되어 있습니까? 의 출력을 구문 분석하는 것을 고려했습니다 ldconfig -p
. 그러나 시스템 간 출력의 일관성이 확실하지 않습니다.
사용할 수 있다는 것을 이미 알고 있지만 find
링커/로더에 라이브러리 및 위치 캐시가 있다는 점을 고려하면 어떤 방식으로든 이를 사용하는 것이 더 효율적인 것 같습니다. 또한 링커/로더가 검색하는 경로는 내가 관심을 갖는 유일한 경로입니다. 즉, ldconfig
.
답변1
모두 잡으려면 전체 파일 시스템 탐색을 수행하는 것 외에는 다른 선택이 없습니다. ldconfig
는 표준 경로의 라이브러리와 검색하도록 구성된 추가 경로(일반적으로 에 정의됨 /etc/ld.so.conf*
)에 대해서만 알고 있습니다. 다른 라이브러리를 찾을 수 있는 일반적인 의심되는 장소는 $HOME
및 입니다 /opt
. 그러나 제한은 없지만 특히 사람들이 직접 애플리케이션을 구축하는 경우에는 더욱 그렇습니다.
의 출력을 신뢰하지 않는 경우 ldconfig -p
해당 캐시를 직접 구문 분석할 수 있습니다. 바이너리이지만 사용하면 strings
모든 쓰레기가 제거됩니다(5이므로 /lib/가 일치함).
strings -n5 /etc/ld.so.cache
내 시스템에서는 둘 다 동일한 결과를 제공하며 이를 신속하게 확인했습니다.
a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u);
echo -e "$a\n$b\n$b" | sort | uniq -u
목록 의 라이브러리가 ldconfig -p
캐시에 언급되지 않았는지 확인했습니다. 아무것도 반환되지 않았습니다.