Linux에서 공유 라이브러리 파일 이름 목록을 얻으려면 어떻게 해야 합니까?

Linux에서 공유 라이브러리 파일 이름 목록을 얻으려면 어떻게 해야 합니까?

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

관련 정보