目的
使用 GNU Stow 輕鬆管理從原始碼安裝的程式和點檔案(LCTT 譯註:點檔案,即以 .
開頭的檔案,在 *nix 下預設為隱藏檔案,常用於儲存程式的配置資訊。)
要求
- root 許可權
難度
簡單
約定
#
- 給定的命令要求直接以 root 使用者身份或使用sudo
命令以 root 許可權執行$
- 給定的命令將作為普通的非特權使用者來執行
介紹
有時候我們必須從原始碼安裝程式,因為它們也許不能透過標準渠道獲得,或者我們可能需要特定版本的軟體。 GNU Stow 是一個非常不錯的符號連結工廠程式,它可以幫助我們保持檔案的整潔,易於維護。
獲得 stow
你的 Linux 發行版本很可能包含 stow
,例如在 Fedora,你安裝它只需要:
# dnf install stow
在 Ubuntu/Debian 中,安裝 stow
需要執行:
# apt install stow
在某些 Linux 發行版中,stow
在標準庫中是不可用的,但是可以透過一些額外的軟體源(例如 RHEL 和 CentOS7 中的EPEL )輕鬆獲得,或者,作為最後的手段,你可以從原始碼編譯它。只需要很少的依賴關係。
從原始碼編譯
最新的可用 stow 版本是 2.2.2
。原始碼包可以在這裡下載:https://ftp.gnu.org/gnu/stow/
。
一旦你下載了原始碼包,你就必須解壓它。切換到你下載軟體包的目錄,然後執行:
$ tar -xvpzf stow-2.2.2.tar.gz
解壓原始檔後,切換到 stow-2.2.2
目錄中,然後編譯該程式,只需執行:
$ ./configure
$ make
最後,安裝軟體包:
# make install
預設情況下,軟體包將安裝在 /usr/local/
目錄中,但是我們可以改變它,透過配置指令碼的 --prefix
選項指定目錄,或者在執行 make install
時新增 prefix="/your/dir"
。
此時,如果所有工作都按預期工作,我們應該已經在系統上安裝了 stow
。
stow 是如何工作的?
stow
背後主要的概念在程式手冊中有很好的解釋:
Stow 使用的方法是將每個軟體包安裝到自己的目錄樹中,然後使用符號連結使它看起來像檔案一樣安裝在公共的目錄樹中
為了更好地理解這個軟體的運作,我們來分析一下它的關鍵概念:
stow 檔案目錄
stow 目錄是包含所有 stow 軟體包的根目錄,每個包都有自己的子目錄。典型的 stow 目錄是 /usr/local/stow
:在其中,每個子目錄代表一個軟體包。
stow 軟體包
如上所述,stow 目錄包含多個“軟體包”,每個軟體包都位於自己單獨的子目錄中,通常以程式本身命名。包就是與特定軟體相關的檔案和目錄列表,作為一個實體進行管理。
stow 目標目錄
stow 目標目錄解釋起來是一個非常簡單的概念。它是包檔案應該安裝到的目錄。預設情況下,stow 目標目錄被視作是呼叫 stow 的目錄。這種行為可以透過使用 -t
選項( --target
的簡寫)輕鬆改變,這使我們可以指定一個替代目錄。
一個實際的例子
我相信一個好的例子勝過 1000 句話,所以讓我來展示 stow
如何工作。假設我們想編譯並安裝 libx264
,首先我們克隆包含其原始碼的倉庫:
$ git clone git://git.videolan.org/x264.git
執行該命令幾秒鐘後,將建立 x264
目錄,它將包含準備編譯的原始碼。我們切換到 x264
目錄中並執行 configure
指令碼,將 --prefix
指定為 /usr/local/stow/libx264
目錄。
$ cd x264 && ./configure --prefix=/usr/local/stow/libx264
然後我們構建該程式並安裝它:
$ make
# make install
x264
目錄應該建立在 stow
目錄內:它包含了所有通常直接安裝在系統中的東西。 現在,我們所要做的就是呼叫 stow
。 我們必須從 stow
目錄內執行這個命令,透過使用 -d
選項來手動指定 stow
目錄的路徑(預設為當前目錄),或者透過如前所述用 -t
指定目標。我們還應該提供要作為引數儲存的軟體包的名稱。 在這裡,我們從 stow
目錄執行程式,所以我們需要輸入的內容是:
# stow libx264
libx264 軟體包中包含的所有檔案和目錄現在已經在呼叫 stow 的父目錄 (/usr/local) 中進行了符號連結,因此,例如在 /usr/local/ stow/x264/bin
中包含的 libx264 二進位制檔案現在符號連結在 /usr/local/bin
之中,/usr/local/stow/x264/etc
中的檔案現在符號連結在 /usr/local/etc
之中等等。透過這種方式,系統將顯示檔案已正常安裝,並且我們可以容易地跟蹤我們編譯和安裝的每個程式。要反轉該操作,我們只需使用 -D
選項:
# stow -d libx264
完成了!符號連結不再存在:我們只是“解除安裝”了一個 stow 包,使我們的系統保持在一個乾淨且一致的狀態。 在這一點上,我們應該清楚為什麼 stow 還可以用於管理點檔案。 通常的做法是在 git 倉庫中包含使用者特定的所有配置檔案,以便輕鬆管理它們並使它們在任何地方都可用,然後使用 stow 將它們放在適當位置,如放在使用者主目錄中。
stow 還會阻止你錯誤地覆蓋檔案:如果目標檔案已經存在,並且沒有指向 stow 目錄中的包時,它將拒絕建立符號連結。 這種情況在 stow 術語中稱為衝突。
就是這樣!有關選項的完整列表,請參閱 stow 幫助頁,並且不要忘記在評論中告訴我們你對此的看法。
via: https://linuxconfig.org/how-to-use-gnu-stow-to-manage-programs-installed-from-source-and-dotfiles
作者:Egidio Docile 譯者:MjSeven 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出