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。

相關內容