我的64位Ubuntu 13.04系统在以下位置具有以下目录/
:
lib
lib32
lib64
libx32
libexec
在/usr
目录中有:
lib
lib32
libx32
libexec
似乎可以通过搜索轻松地找到答案,但是我没有在网上发现任何东西,除了这些目录存储共享库(libexec除外)。但是哪些共享库位于哪个文件夹中(lib32中的32位和lib64中的64位除外)?有人可以解释所有这些目录之间的区别吗?
我的64位Ubuntu 13.04系统在以下位置具有以下目录/
:
lib
lib32
lib64
libx32
libexec
在/usr
目录中有:
lib
lib32
libx32
libexec
似乎可以通过搜索轻松地找到答案,但是我没有在网上发现任何东西,除了这些目录存储共享库(libexec除外)。但是哪些共享库位于哪个文件夹中(lib32中的32位和lib64中的64位除外)?有人可以解释所有这些目录之间的区别吗?
Answers:
嗯,如果您已经处理了Unix一段时间,这是一个非常令人困惑的部分。大多数Unixes都遵循一种称为FHS的标准-Filesystem Hierarchy Standard。
鉴于我主要使用基于Red Hat的发行版,所以我最熟悉它们在 Fedora,CentOS和RHEL Linux发行版上采用FHS的情况。但是我也使用了基于Debian和BSD的发行版,它们在文件保存位置和存储位置方面并没有什么不同。
现在就您的问题了。我将看一下FHS文档,该文档松散地管理着这些目录结构。一般来说:
/lib
包含基本的共享库和内核模块。
目的: / lib目录包含启动系统并在根文件系统(即,根目录)中运行命令所需的那些共享库映像。通过/ bin和/ sbin中的二进制文件。
注意1: / usr中的二进制文件(例如任何X Window二进制文件)仅需要的共享库不能在/ lib中。只有在/ bin和/ sbin中运行二进制文件所需的共享库可能在这里。
注2:鉴于/ lib的主要目的是包含用于部署到目录/ bin和/ sbin的工具的库,因此/ lib中的库可以是32位或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包括目标文件,库和内部二进制文件,这些文件不打算由用户或shell脚本直接执行。
注意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>
相同的情况下(一个是另一个的符号链接),这些文件和按应用程序的子目录将存在。
一般来说:
如果/ bin或/ sbin目录中有可执行文件所需的库,则这些库应位于/ lib *目录中。
如果有使用程序和程序包的库,则它们位于/ usr / lib / *中。如果特定库需要某些可执行文件,但是这些可执行文件不是由用户直接调用或由root调用的,则它们位于/ usr / libexec中。
file
实用程序与这些目录中的库一起使用,以查看区别。