Symlink

/usr/lib vs /etc/ld.so.conf.d

  • February 17, 2022

TL;DR為什麼將符號連結放置到共享庫更好,/etc/lib(64)/或者為什麼在其中創建 *.conf 文件更好/etc/ld.so.conf.d/


.conf 文件

假設我有我的自定義二進製文件/opt/foo/,附帶它自己的共享庫。常見的方法(我知道)是將文件放置在/etc/ld.so.conf.d/foo.conf如下位置:

# Link foo libraries. This file is included in /etc/ld.so.conf
/opt/foo/lib
/opt/foo/otherlibs

然後執行ldconfig

符號連結

但我發現我也可以/usr/lib像這樣將我的庫連結到(或 lib64):

for f in /etc/foo/{lib,otherlibs}/*; do
 ln -s $f /usr/lib64/$(basename $f)
done

然後我就不用跑ldconfig了。

這兩種方式的優缺點是什麼?

我可以想像在升級應用程序或庫版本時,“符號連結”方式不是很好處理。一般來說,“.conf”方式對我來說似乎更模組化和更 Linux-ish。

我偶爾會遇到這種情況,因為我們必須加密(並且僅在執行時解密)特定庫。ldconfig加密時無法辨識庫(仍為 ELF 格式),因此對我來說唯一合適的方法是將指向特定 *.so 文件的連結放在/usr/lib64

作為一般規則,/usr除了/usr/local“屬於”您的分配之外的所有內容。您應該避免在那裡添加文件(甚至是符號連結)。

添加新的配置文件/etc/ld.so.conf.d更易於維護:您的更改不會被包管理器撤消,但任何系統管理員都可以輕鬆管理它們。

以乾淨的方式解決您的加密要求將更加複雜;一種方法可能是在由 in 中的文件指定的目錄中擁有一個存根庫,/etc/ld.so.conf.d並讓它在執行時負責解密。

引用自:https://unix.stackexchange.com/questions/690920