lib, lib32, lib64, libx32 및 libexec의 차이점


41

내 64 비트 Ubuntu 13.04 시스템에는 다음 디렉토리가 있습니다 /.

lib
lib32
lib64
libx32
libexec

에서 /usr디렉토리가있다 :

lib
lib32
libx32
libexec

이것은 검색으로 쉽게 대답 할 수있는 것처럼 보였지만이 디렉토리가 공유 라이브러리를 저장한다는 것 외에는 온라인에서 아무것도 발견하지 못했습니다 (libexec 제외). 그러나 어떤 공유 라이브러리가 어떤 폴더에 들어갑니다 (lib32의 32 비트 및 lib64의 64 비트 제외)? 누군가이 모든 디렉토리의 차이점을 설명 할 수 있습니까?


그리고 BSD, Fedora, AIX 및 Solaris는 디렉토리 구조와 관련이 있습니다.

답변:


39

아 예, 만약 당신이 오랫동안 유닉스를 다루었다면 이것은 매우 혼란스러운 부분입니다. 대부분의 유닉스는 " HSS-Filesystem Hierarchy Standard "라고하는 표준을 따르고 있습니다.

Red Hat 기반 배포판을 주로 사용한다는 점을 감안할 때 Fedora, CentOS 및 RHEL Linux 배포판 용 FHS 를 가장 잘 알고 있습니다 . 그러나 데비안 및 BSD 기반 배포판도 사용했으며 파일 시스템 측면에서 모든 것이 유지되는 측면에서 다르지 않습니다.

이제 당신의 질문에. 이 디렉토리 구조를 느슨하게 관리하는 FHS 문서를 살펴 보겠습니다 . 일반적으로 :

디렉토리- /lib

필수 공유 라이브러리 및 커널 모듈이 포함되어 있습니다.

목적 : / lib 디렉토리에는 시스템을 부팅하고 루트 파일 시스템에서 명령을 실행하는 데 필요한 공유 라이브러리 이미지가 포함되어 있습니다. / bin 및 / sbin의 바이너리로.

참고 1 : / usr의 바이너리 (예 : X Window 바이너리)에만 필요한 공유 라이브러리는 / lib에 없어야합니다. / bin 및 / sbin에서 바이너리를 실행하는 데 필요한 공유 라이브러리 만있을 수 있습니다.

참고 2 : / lib의 기본 목적은 / bin & / sbin 디렉토리에 배포 된 도구 용 라이브러리를 포함하는 것이므로 / lib의 라이브러리는 32 비트 또는 64 비트 일 수 있습니다.

예를 들어 (Fedora 14 64 비트 시스템)

$ uname -a
Linux grinchy 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux

내 / lib에서 파일을 샘플링 한 것입니다.

./libpam.so.0.82.2:             ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libplc4.so:                   ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./libidn.so.11.6.1:             ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./upstart/telinit:              ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/runlevel:             ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/shutdown:             ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./upstart/reboot:               ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped
./libdb-4.8.so:                 ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
./firmware/mixart/miXart8.elf:  ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), statically linked, not stripped
./libtinfo.so.5.7:              ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

디렉토리- /lib<qual>

대체 형식 필수 공유 라이브러리 (선택 사항). 디렉토리는 / lib32, / lib64 등입니다.

목적 : 시스템에 별도의 라이브러리가 필요한 둘 이상의 이진 형식을 지원하는 / lib 디렉토리의 변형이 하나 이상있을 수 있습니다. 여러 바이너리 형식을 지원하지만 동일한 이름의 라이브러리가 필요한 시스템에서 64 비트 또는 32 비트 지원에 일반적으로 사용됩니다.

참고 : 이 경우 / lib32 및 / lib64는 라이브러리 디렉토리 일 수 있으며 / lib는 그 중 하나에 대한 심볼릭 링크입니다.

디렉토리- /usr/lib

프로그래밍 및 패키지 용 라이브러리

목적 : / usr / lib에는 사용자 나 쉘 스크립트가 직접 실행하지 않는 객체 파일, 라이브러리 및 내부 바이너리가 포함되어 있습니다.

참고 1 : 기타 아키텍처 독립적 인 응용 프로그램 특정 정적 파일 및 서브 디렉토리는 / usr / share에 있어야합니다.

응용 프로그램은 / usr / lib 아래에 단일 하위 디렉토리를 사용할 수 있습니다. 응용 프로그램이 서브 디렉토리를 사용하는 경우, 응용 프로그램이 독점적으로 사용하는 모든 아키텍처 종속 데이터는 해당 서브 디렉토리 내에 있어야합니다.

참고 2 : 예를 들어 Perl 5 모듈 및 라이브러리의 perl5 서브 디렉토리.

디렉토리- /usr/lib<qual>

대체 형식 라이브러리 (선택 사항).

목적 : /usr/lib<qual> 수행 기호 링크 것을 제외하고 다른 바이너리 형식은 / usr / lib 디렉토리와 같은 역할 /usr/lib<qual>/sendmail/usr/lib<qual>/X11필요하지 않습니다.

주 : / usr / lib이고 /usr/lib<qual>동일한 파일 (하나는 다른 하나에 대한 심볼릭 링크) 인 경우와 응용 프로그램 별 서브 디렉토리가 존재합니다.

TLDR;

일반적으로 :

/ bin 또는 / sbin 디렉토리에 실행 파일에 필요한 라이브러리가있는 경우 해당 라이브러리는 / lib * 디렉토리에 있어야합니다.

프로그램과 패키지를 사용하기위한 라이브러리가 있으면 / usr / lib / *로 이동하십시오. 특정 라이브러리에 필요한 실행 파일이 있지만 이러한 실행 파일이 사용자가 직접 또는 루트에 의해 호출한다고 가정하지 않으면 / usr / libexec로 이동합니다.


감사. 32 비트 또는 64 비트 인 라이브러리가 해당 lib <qual> 폴더와 반대로 lib에 배치 될 때 명확하게 설명 할 수 있습니까? 나는 당신의 설명을 얻지 못했습니다.
gsingh2011

/ lib의 기본 목적은 / bin 및 / sbin에있는 도구 용 라이브러리를 포함하는 것입니다. / lib는 32 비트 및 64 비트 라이브러리를 혼합하여 포함 할 수 있습니다. 이 의견을 답변에 추가하겠습니다!
slm

TLDR 섹션을 맨 위에 놓을까요?
kevinarpe

1
lib32와 libx32의 차이점은 무엇입니까?
Mikko Rantalainen

2
libx32는 x32 용 입니다. file이 디렉토리의 라이브러리와 함께 유틸리티를 사용 하여 차이점을 확인할 수 있습니다.
elmicha
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.