공유 라이브러리의 파일 이름 목록을 가져오기 위한 내장 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
목록의 라이브러리 중 캐시에 언급되지 않은 라이브러리가 있는지 확인합니다 . 아무것도 반환되지 않습니다.