歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux下使用Stow工具管理軟件包的技巧

Linux下使用Stow工具管理軟件包的技巧

日期:2017/3/3 16:41:03   编辑:關於Linux

本文是關於 Stow 的,它是用於 Linux 的軟件安裝管理實用程序,它許多地方都優於“久經考驗”的 Red Hat 和 Debian 軟件包管理系統。通過使用 Stow,可以將應用程序打包成標准的 tar 文件,並按照邏輯安排應用程序二進制文件,以易於訪問。

Stow 是用 Perl 編寫的,易於安裝和使用,它雖然簡單,但對於在 Linux 機器上組織和管理各種軟件安裝卻很有效。Stow 可以方便地將不同軟件包安排在組織良好的目錄樹結構中。這不僅有助於將屬於特殊軟件包的文件與其它文件分開,而且還給予用戶在任何期望的位置存儲或安裝軟件包的自由,同時使軟件看上去被安裝在軟件包或 OS 要求的位置上。

注:如果具有 Linux 的中級知識並安裝過 Linux 應用程序,則有助於理解本文。在本文中,我們使用 Stow V1.3.3 和 Perl V5.005。

Linux 的軟件安裝管理

在我們開始了解 Stow 之前,先讓我們研究一下軟件安裝管理,它也稱作軟件包管理。軟件安裝管理在總體上描述了在系統上安裝、卸載、更新和組織軟件應用程序(或稱為軟件包)的活動。在這些活動中,組織應用程序是尤其重要的活動。如果應用程序組織得井井有條,那麼在 Linux 機器上安裝、升級和卸載應用程序會變得更加容易且更方便。

在 Linux 系統上,大多數應用程序必須安裝在某一特定目錄(通常是 /usr/local/)中才能正確運行和起作用;這種需求來自 Linux 或應用程序本身。如果只在 Linux 系統上安裝了很少的應用程序並且它們各自的文件都可以很容易地彼此區分,那麼這不會造成任何嚴重問題。

然而,在實際方案中,可能有大量應用程序安裝在同一目錄中,該目錄不久就會變得很雜亂。設想一下,在安裝一個應用程序時,它意外地覆蓋了屬於另一個應用程序的文件,那麼您不得不替換該文件。或者設想一下,在卸載和刪除應用程序之前,設法確定哪些文件屬於該應用程序。或者,您可能希望找到並刪除應用程序不需要的文件。所有這些情形都會花費許多精力和時間,並且要求牢記文件名。

為了克服這樣的問題,所以將軟件安裝管理實用程序用於 Linux 系統。它們不僅有助於組織和安排多個軟件安裝,而且還可以根據需要,任意次數地更改這樣的安排,而且不費吹灰之力。Stow 就是這樣一種用於 Linux 的實用程序。

介紹 Stow

雖然一些 Linux 分發版(如 Red Hat 和 Debian)提供了它們自己的軟件包管理實用程序(分別是 rpm 和 apt-get),這些實用程序與 Stow 一樣有效,但它們僅用於特定的打包格式(分別是 .rpm 和 .deb)。當管理只打包成 .tar 文件的應用程序時,Stow 是最佳選擇。

另外,如果人們除了使用 Red Hat 和 Debian 之外,還要使用其它 Linux 分發版,或者希望為現有的軟件包管理實用程序找到便宜或免費的備用方案,再或者只想自己控制每件事情,那麼 Stow 是一個好的選擇。Stow 是遵循 GNU GPL(通用公共許可證,General Public License)的免費軟件,它靈活並且可以用充足的用戶支持和可用資源進行定制。

Stow 通過將應用程序的安裝文件存儲並組織到其自己的單獨目錄(稱為軟件包目錄),從而使它們彼此分開,來管理不同應用程序。這些軟件包目錄駐留在一個 stow 目錄中,該目錄包含所有已裝載的應用程序的軟件包目錄,是這些目錄的父目錄。

Stow 允許用戶自由地將應用程序及其相關文件安裝和存儲在任何期望位置的軟件包目錄中(通過將該位置指定為裝載目錄),而不是本地安裝的應用程序的公共位置(/usr/local/ 目錄)或由應用程序本身指定的缺省位置。該方法有助於使 /usr/local/ 目錄保持整潔,而應用程序被安排在井然有序的目錄樹結構中,易於查找。

注:缺省 stow 目錄是 Stow 自己的目錄,位於 /usr/local/bin 中;在安裝 Stow 時可以更改它(請參閱安裝 Stow)。

Stow 不僅可以將應用程序組織在 stow 目錄樹中,而且還可以在缺省位置(應用程序最初被要求安裝的位置)創建相應的符號鏈接(symlink)。在 Stow 術語中,該缺省位置稱為目標目錄。缺省情況下,目標目錄是 stow 目錄的父目錄。盡管對於所有用 stow 處理的應用程序而言,用 /usr/local/stow 作為 stow 目錄並且用 /usr/local 作為目標目錄是習慣作法,但用戶可以自由地為 Stow 和目標目錄指定其它位置(請參閱 stow 命令)。stow 目錄中的應用程序目錄樹應該與目標目錄中所期望的樹一樣。

應用程序相應的符號鏈接(位於應用程序目標目錄中)指向 stow 目錄中應用程序的實際位置(其軟件包目錄)。符號鏈接有點類似於 Windows 快捷方式或 MacOS 別名,它可以表示駐留在另一個位置(或許是不同的驅動器或目錄)的應用程序的映象。然後,使用這些符號鏈接來調用或運行該應用程序。這讓人覺得應用程序本身被安裝在目標目錄中並且是從該目錄中運行的。當其它應用程序需要調用正在討論的應用程序或要與之進行交互,並期望它駐留在其缺省位置時,該方法很有用。

注:

Stow 創建相對符號鏈接;即符號鏈接指明了至軟件包目錄的相對路徑(相對於符號鏈接自己的位置)。

Stow 設法為每個應用程序創建最小數目的符號鏈接 — 如果可能,僅為軟件包目錄中的整個子目錄樹創建一個符號鏈接。創建這種單一符號鏈接的過程稱為樹折疊。

Stow 還可用於執行同一應用程序的多次安裝。不同的安裝可以駐留在不同的位置上,並且 Stow 可用於創建和更新一組應用程序符號鏈接,使之指向任何期望的位置。

Stow 不僅可以組織軟件安裝,而且還可以根據需要任意次數地更改任何以前的軟件安裝布局。Stow 將決不會刪除 stow 目錄中的任何文件或目錄,即使在卸載期間也是如此。它只更新或除去目標樹中指向應用程序安裝的符號鏈接,所以要再次安裝已卸載的應用程序,只要重新裝載它就行了。

安裝和運行 Stow

需求

安裝 Stow 確實非常簡單。安裝和運行 Stow 的唯一需求是 Stow 本身和 Perl V5.005 或更高版本。

可以從 GNU FTP 站點(請參閱參考資料以獲取鏈接)下載 Stow 的最新版本。本文使用 V1.3.3,在編寫本文時,該版本是最新的。

Perl 是所有主要 Linux 分發版標准安裝的一部分。要查看您所擁有的版本,使用命令 perl -v。可以從 perl.com(請參閱參考資料以獲取鏈接)獲得有關 Perl 及其最新版本的更多信息。

安裝 Stow

要安裝 Stow,在 Linux 系統上必須以 root 用戶身份登錄。下載 Stow 源文件(stow-1.3.3.tar.gz)之後,下列命令將解包(untar)並安裝 Stow。

清單 1. 安裝 Stow

# tar -zxvf stow-1.3.3.tar.gz

# cd stow-1.3.3

#./configure

# make

# make install prefix=/usr/local/stow

Stow 安裝的缺省位置是 /user/local/bin 目錄。通過將所期望的位置(作為一個絕對目錄路徑)指定為上面清單中 make install 命令的 prefix 選項的值,就可以更改這個位置。

Stow 現在被安裝在位於 /usr/local/stow 下自己的目錄樹中。也就是說,Stow 可執行文件現在駐留在 /usr/local/stow/bin 目錄中,Stow man 文件駐留在 /usr/local/stow/man 目錄中,而 info 文件駐留在 /usr/local/stow/info 目錄中。現在,Stow 已經准備好裝載應用程序。

注:

在解包 Stow 源文件之後,產生的 stow-1.3.3 文件夾包含一個名為 INSTALL 的文件,該文件包含有用的安裝指示信息。

在安裝 Stow 之後,將至 stow 目錄的絕對路徑添加到 $PATH 變量中。

stow 命令

Stow 提供了一個特殊命令 stow,該命令可以與各種選項一起執行,以調用 Stow 進行軟件安裝管理。Stow 命令的常規語法如下:

$ stow [options] application-name

下面描述了各種 stow 選項:

-v 或 --verbose[=n]:顯示描述 Stow 正在做什麼的詳細輸出。n 表示詳細級別,可以是 0、1、2 或 3;缺省值是 0。使用 -v 或 --verbose 將詳細級別增加 1;使用 --verbose=n 將它設置為 n。

-d directory 或 --dir=directory:將 stow 目錄設置成 directory(到期望目錄的絕對路徑)而不是當前目錄。這也可以使目錄的父目錄成為缺省目標目錄。

-t directory 或 --target=directory:將目標目錄設置成 directory(至期望目錄的絕對路徑)而不是當前 stow 目錄的父目錄。

-D 或 --delete:從目標目錄刪除應用程序的符號鏈接,也就是卸空(unstow)應用程序。

-R 或 --restow:重新裝載應用程序(先卸空,然後再裝載)。通過更改符號鏈接的軟件包目錄,在更新應用程序之後,該選項對更新符號鏈接並從目標樹除去舊的符號鏈接很有用。

-c 或 --conflicts:搜索可能由實際 stow 操作引起的所有沖突。該選項與另一個選項 -n(請見下面的選項)一起使用。但可能會報告假沖突(請參閱參考資料,以獲取 Stow 手冊中有關沖突一節的鏈接)。

-n 或 --no:不執行任何 stow 操作,只顯示將發生什麼。由於不執行實際操作,所以 stow -n 會報告不存在的沖突(請參閱參考資料,以獲取 Stow 手冊中有關沖突一節的鏈接)和必定會發生的實際沖突。

-V 或 --version:顯示 Stow 版本號。

-h 或 --help:顯示 Stow 命令語法。

使用 Stow 的示例

為了學習如何使用 Stow,讓我們裝載一個虛構的應用程序 app-1.4。讓我們假設應用程序源文件是 app-1.4.tar.gz,它必需安裝在 /usr/local/bin 中。要安裝該應用程序,我們必需以 root 用戶身份登錄。

首先,我們需要將用 tar 壓縮過的源文件解壓到(比方說)名為 source 的目錄中:

[root@linuxbox source]# tar -zxvf app-1.4.tar.gz

這將在目錄 source 中創建包含 app-1.4 源文件的目錄 app-1.4。現在,我們更改到 app-1.4 目錄:

[root@linuxbox source]# cd app-1.4

Copyright © Linux教程網 All Rights Reserved