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목록의 라이브러리 중 캐시에 언급되지 않은 라이브러리가 있는지 확인합니다 . 아무것도 반환되지 않습니다.

관련 정보