아 예, 만약 당신이 오랫동안 유닉스를 다루었다면 이것은 매우 혼란스러운 부분입니다. 대부분의 유닉스는 " 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로 이동합니다.