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

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

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

lib
lib32
lib64
libx32
libexec

디렉토리 에는 /usr다음이 있습니다:

lib
lib32
libx32
libexec

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

답변1

아, 그렇습니다. 오랫동안 Unix를 다루었다면 이것은 매우 혼란스러운 부분입니다. 대부분의 유닉스가 따르려고 "시도"하는 표준이 있습니다.FHS - 파일 시스템 계층 표준.

저는 주로 가장 친숙한 Red Hat 기반 배포판을 사용합니다.FHS에 대한 그들의 견해Fedora, CentOS 및 RHEL Linux 배포판용. 하지만 저는 Debian 및 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<qual>/sendmail및가 /usr/lib<qual>/X11필요하지 않다는 점을 제외하면 대체 바이너리 형식에 대해 /usr/lib와 동일한 역할을 수행합니다.

메모:/usr/lib<qual>/usr/lib와 동일한 경우 (하나는 다른 하나에 대한 심볼릭 링크) 이러한 파일과 응용 프로그램별 하위 디렉터리가 존재합니다.

TLDR;

일반적으로:

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

프로그램과 패키지를 사용하기 위한 라이브러리가 있으면 /usr/lib/*에 들어갑니다. 특정 라이브러리에 필요한 실행 파일이 있지만 이러한 실행 파일을 사용자가 직접 또는 루트에서 호출할 수 없는 경우 해당 실행 파일은 /usr/libexec에 들어갑니다.

관련 정보