
내 64비트 Ubuntu 13.04 시스템에는 다음 디렉터리가 있습니다 /
.
lib
lib32
lib64
libx32
libexec
디렉토리에는 다음 /usr
이 포함됩니다.
lib
lib32
libx32
libexec
이것은 검색을 통해 쉽게 대답할 수 있는 것처럼 보이지만 이러한 디렉토리가 공유 라이브러리(libexec 제외)를 저장한다는 것 외에는 온라인에서 아무것도 찾지 못했습니다. 그러나 어떤 공유 라이브러리가 어떤 폴더에 있습니까(lib32의 32비트 및 lib64의 64비트 제외)? 누군가 이 모든 디렉토리의 차이점을 설명할 수 있습니까?
답변1
아, 네, 오랫동안 Unix를 사용해 왔다면 이것은 매우 혼란스러운 부분이 될 수 있습니다. 대부분의 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와 동일한 역할을 수행하지만 심볼릭 링크 /usr/lib<qual>/sendmail
및 ./usr/lib<qual>/X11
노트:/usr/lib와 /usr/lib /usr/lib<qual>
가 동일한 경우(하나는 다른 하나에 대한 심볼릭 링크) 이러한 파일과 각 응용 프로그램의 하위 디렉터리가 존재하게 됩니다.
너무 오래;
일반적으로 말하면:
실행 파일에 필요한 라이브러리가 /bin 또는 /sbin 디렉터리에 있는 경우 이러한 라이브러리는 /lib* 디렉터리에 있어야 합니다.
프로그램과 패키지를 사용하기 위한 라이브러리가 있다면 /usr/lib/*에 위치합니다. 특정 라이브러리에 특정 실행 파일이 필요하지만 이러한 실행 파일을 사용자나 루트가 직접 호출해서는 안 되는 경우 해당 실행 파일은 /usr/libexec로 이동합니다.