/opt 和 /usr/local 有什麼區別?
根據Filesystem Hierarchy Standard,
/opt
用於“安裝附加應用程序軟體包”。/usr/local
是“供系統管理員在本地安裝軟體時使用”。這些案例看起來非常相似。未包含在發行版中的軟體通常預設配置為安裝在任何一種/usr/local
或/opt
沒有特定押韻或理由的情況下安裝。我是否遺漏了一些差異,或者兩者都做同樣的事情,但由於歷史原因而存在?
雖然兩者都旨在包含不屬於作業系統的文件,
/opt
並且/usr/local
不打算包含相同的文件集。
/usr/local
是安裝管理員建構的文件的地方,通常使用make
命令(例如,./configure; make; make install
)。這個想法是避免與作為作業系統一部分的文件發生衝突,否則這些文件將被覆蓋或覆蓋本地文件(例如,/usr/bin/foo
是作業系統的一部分,/usr/local/bin/foo
而是本地替代方案)。下的所有文件
/usr
都可以在作業系統實例之間共享,儘管 Linux 很少這樣做。這是FHS有點自相矛盾的部分,/usr
定義為只讀,但/usr/local/bin
需要讀寫本地安裝軟體才能成功。SVR4 文件系統標準是 FHS 的主要靈感來源,建議避免/usr/local
使用該標準/opt/local
來克服這個問題。
/usr/local
是原始 BSD 的遺產。當時/usr/bin
作業系統命令的原始碼在/usr/src/bin
and/usr/src/usr.bin
中,而本地開發的命令的原始碼在/usr/local/src
,它們的二進製文件在/usr/local/bin
. 沒有包裝的概念(在 tarball 之外)。另一方面,
/opt
是一個用於安裝非捆綁包的目錄(即不屬於作業系統發行版的包,但由獨立的源提供),每個包都在其自己的子目錄中。它們已經建構了由獨立第三方軟體分銷商提供的完整軟體包。與其他/usr/local
東西不同,這些包遵循目錄約定(或者至少它們應該)。例如,someapp
將安裝在 中/opt/someapp
,其命令之一是/opt/someapp/bin/foo
,其配置文件將在 中/etc/opt/someapp/foo.conf
,其日誌文件在/var/opt/someapp/logs/foo.access
.