為什麼自訂程式總是安裝在 /opt、/srv、/usr/local 等目錄中,而不是安裝在 ~/ (home) 資料夾中?

為什麼自訂程式總是安裝在 /opt、/srv、/usr/local 等目錄中,而不是安裝在 ~/ (home) 資料夾中?

LTS 儲存庫非常好,但出於某種原因,我更喜歡某些程式的「從原始碼建置」方法。原因之一是我得到了首選版本(LTS 上的 PHP 是 5.3,而我可以從原始碼編譯 5.4)。nginxnode.js等情況也類似。

現在我想知道,為什麼所有教學都堅持將程式安裝到「root 擁有的」資料夾中,例如/opt/srv、 或/usr/local。我發現將其安裝在我的主資料夾中要容易得多,例如: /home/prahlad/programs/PHP-5.4

優點之一是我不需要使用sudo來安裝這些程式。第二個相關的優點是安全憂慮。如果(假設)這些來源中的任何一個碰巧包含惡意軟體(儘管在 Linux 上可能性較小)怎麼辦?拒絕他們的 root 權限不是一件好事嗎?

我想知道一個例子,其中程式需要安裝在 root 擁有的資料夾中?

答案1

指南告訴您安裝在/usr/local//opt等位置,以便其他人可以使用它們。

如果您安裝在主目錄中,那麼只有您才能存取它們。如果您只是為自己編譯,那麼這很好。

答案2

這不是一個硬性規定,但預設的內容/opt通常是獨立的,並且可能需要您將可執行檔案複製或符號連結到可執行路徑,或將內部資料夾新增至$PATH.這很簡單,足以確定您是否願意將其放在其他地方並使用$HOME/bin.

然而,預設為 的來源建置內容/usr/local也可能正在安裝共用程式庫和手冊頁。如果你想把它放在其他地方,通常你先導出PREFIX變數(或在命令列上使用 提供它make);./configure --help可以證實並解釋這一點。

在這種情況下,您需要在要使用的路徑中具有一些目錄層次結構。它應該看起來像:

bin/
lib/
include/
share/
    man/
        man1/

儘管安裝程序,您還可以創建更多manX目錄(查看/usr/share/man模型)可能如果它們不存在,則創建它們。然後,您將需要以下內容,例如~/.profile

export PATH=~/bin:$PATH
export LD_LIBRARY_PATH=~/lib:$LD_LIBRARY_PATH
export MANPATH=~/share/man:$MANPATH

如果套件確實使用共用程式庫,則這LD_LIBRARY_PATH一點至關重要,否則可執行檔案將無法連結到它們。 MANPATH可能不適用於所有系統,也不是絕對必要的——如果man foobar失敗,您可能會知道在哪裡尋找它。

相關內容