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 很长时间了,那么这将是一个非常令人困惑的部分。大多数 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 包含不打算由用户或 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/usr/lib<qual>相同(一个是另一个的符号链接),这些文件和每个应用程序的子目录将存在。

太长了;

一般来说:

如果 /bin 或 /sbin 目录中存在可执行文件所需的库,则这些库应位于 /lib* 目录中。

如果有用于使用程序和软件包的库,它们位于 /usr/lib/* 中。如果特定库需要某些可执行文件,但这些可执行文件不应该由用户直接或由 root 调用,则它们会进入 /usr/libexec。

相关内容