find
공유 라이브러리 종속성이 있을 수 있는 파일만 명령으로 찾 도록 하는 방법을 찾으려고 합니다 (로 호출할 때 출력을 생성함을 의미 ldd
).
파일 세트(바이너리, 텍스트, 오피스 등)의 모든 종속성을 찾기 위해 해당 파일을 반복 하고 모두 find . -type f
호출한 다음 출력을 구문 분석합니다.ldd
find
테스트 옵션이 있다는 것을 알고 있지만 -executable
그것이 모든 기반을 포괄하는지 확신할 수 없습니다.
"프로그램이 동적으로 연결되지 않았습니다."와 같은 출력이 제공된다는 것을 알고 있지만 ldd
공유 라이브러리를 가질 수 없는 파일에 대해 내 명령을 저장하고 싶습니다.
답변1
ldd
Elf 파일 종속성을 덤프합니다. 모든 Elf 파일은 bytes 로 시작하는데 \x7F 'E' 'L' 'F'
, 이는 아마도 파일을 테스트하는 가장 빠른 방법일 것입니다. 그러나 find
파일 내용을 읽는 옵션은 없습니다 . find
주로 파일 이름, 모드 비트 등과 같은 디렉터리 목록의 메타데이터를 봅니다.
그러나 Elf 파일을 실행하려면 실행 비트를 설정해야 합니다. 실행 비트가 없는 Elf 파일이 있다면 실행이 불가능하므로 크게 신경쓰지 않으셔도 됩니다. 따라서 검색 속도를 높이는 빠른 방법을 찾고 있다면 실행 비트를 확인하는 것이 안전할 것입니다.
-perm /555
대신 을 추천합니다 -executeable
. 첫 번째는 실행 비트를 확인하고 두 번째는 현재 사용자가 이를 실행할 수 있는지 확인하기 때문입니다.
그러나 jofel이 언급한 Python과 같은 동적 언어 외에도 많은 C 프로그램은 PAM 라이브러리( /lib/security/pam_*.so
) 및 libc "nss" 라이브러리( /lib/libnss*.so
)에 동적으로 연결됩니다. chroot 등을 구축하는 경우 이것이 필요합니다.