在Linux中移除從源代碼安裝的程序的一種簡(jiǎn)單的方法
不是所有的程序都可以在官方或者第三方庫(kù)中找到,因此你不能使用常規(guī)的包管理來(lái)安裝它們。有時(shí)你不得不從源代碼中手動(dòng)構(gòu)建這些程序。就如你已經(jīng)知道的一樣,當(dāng)你從源代碼中安裝一個(gè)程序的時(shí)候,這個(gè)軟件包所包含的文件將會(huì)復(fù)制到本地的多個(gè)位置,例如 /usr/local/bin
、/usr/local/etc/
。如果從源代碼中安裝的程序沒(méi)有內(nèi)置的卸載程序,當(dāng)你不再需要這個(gè)程序的時(shí)候,卸載它就會(huì)很麻煩。你可能會(huì)花費(fèi)雙倍(甚至更多)的時(shí)間找出這些文件然后手動(dòng)刪除它們。我以前一直是這樣做的,直到我發(fā)現(xiàn)了 GNU Stow。謝天謝地,Stow 有一個(gè)很棒的方法可以輕松管理從源代碼安裝的程序。
引用官方網(wǎng)站里的一段介紹,
GNU Stow 是一個(gè)符號(hào)鏈接歸集管理器,它可以收集文件系統(tǒng)上不同目錄中的不同軟件和/或數(shù)據(jù)包,使它們看起來(lái)像是一個(gè)整體。
簡(jiǎn)單來(lái)說(shuō),Stow 幫助你把這些程序文件以一種容易管理的方式組織在了一起。在這個(gè)方法中,文件將不會(huì)被復(fù)制到多個(gè)位置。所有的這些文件都會(huì)被保存在一個(gè)特定的文件夾中,通常是以程序名命名的,然后 Stow 會(huì)在一個(gè)合適的位置為所有的程序文件創(chuàng)建符號(hào)連接。比如 /usr/local/bin
中會(huì)包含 /usr/local/stow/vim/bin
、/usr/local/stow/python/bin
中文件的符號(hào)鏈接。并且同樣遞歸地用于其他的任何的子目錄,例如 .../share
、.../man
,等等。在這篇教程中,我將會(huì)舉例教你如何輕松地使用 Stow 管理從源中安裝的程序。
安裝 GNU Stow
GNU Stow 在流行 Linux 操作系統(tǒng)的默認(rèn)庫(kù)中都可用。
在 Arch Linux 及它的衍生版本中,運(yùn)行下面的命令安裝 Stow。
$ sudo pacman -S stow
在 Debian、Ubuntu、Linux Mint 上:
$ sudo apt install stow
在 Fedora 上:
$ sudo dnf install stow
在 RHEL/CentOS 上:
$ sudo yum install epel-release
$ sudo yum install stow
在 Linux 上輕松移除從源代碼安裝的程序
就像我之前提到的,所有包的程序文件都將被保存在位于 /usr/local/stow/
的一個(gè)根文件夾。在這個(gè)根文件夾或者父目錄之下,每個(gè)包都將保存在對(duì)應(yīng)的子目錄中。例如,如果我們從源代碼中安裝了 Vim 編輯器,所有關(guān)聯(lián)到 Vim 的程序文件和目錄都將保存在 /usr/local/stow/vim
文件夾之下。如果你從源代碼中安裝了 Python,所有關(guān)聯(lián)到 python 的文件都會(huì)保存在 /usr/local/stow/python
之下。
我現(xiàn)在從源代碼中來(lái)安裝一個(gè)叫做 hello 的程序。
首先下載 hello 程序的壓縮包。
$ wget http://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz
使用下面的命令解壓壓縮包:
$ tar -zxvf hello-2.10.tar.gz
上面的命令將會(huì)在當(dāng)前工作目錄下創(chuàng)建一個(gè)叫做 hello-2.10
的目錄,并且提取壓縮包中的所有內(nèi)容到其中去。
切換到這個(gè)目錄當(dāng)中:
$ cd hello-2.10/
運(yùn)行下面的命令,并且添加 -prefix
選項(xiàng)。
$ ./configure --prefix=/usr/local/stow/hello
上面的命令將會(huì)保存構(gòu)建文件到一個(gè)指定位置,在這個(gè)例子中是 /usr/local/stow/hello
。
最后,使用下面的命令構(gòu)建并安裝 hello 這個(gè)程序:
$ make
$ sudo make install
就這樣。hello 這個(gè)程序就已經(jīng)安裝在 /usr/local/stow/hello/
這個(gè)位置了。你可以使用下面的 ls
命令確認(rèn)一下。
$ ls /usr/local/stow/hello/
bin share
最后,進(jìn)入 /usr/local/stow/
目錄,運(yùn)行下面的命令來(lái)生成必要的符號(hào)鏈接。
$ cd /usr/local/stow/
$ sudo stow hello
大功告成!
剛才那一步是將包含在 hello 這個(gè)程序中的所有文件或者目錄創(chuàng)建了鏈接到 /usr/local/
目錄中。換一種說(shuō)法, /usr/local/stow/hello/bin
鏈接到 /usr/local/share
,以及 /usr/local/stow/hello/share/man
鏈接到 /usr/local/share
,還有 /usr/local/stow/hello/share/man
鏈接到 /usr/local/share/man
。
你可以使用 ls
命令來(lái)確認(rèn)一下:
$ ls /usr/local/bin/
hello
可以使用下面的命令來(lái)確認(rèn) hello 這個(gè)程序是否可以正常工作了:
$ hello
Hello, world!
很好,它已經(jīng)開(kāi)始工作了!!
類似地,你可以像上面描述的那樣安裝程序到它對(duì)應(yīng)的子目錄下。
下面是 Stow 根目錄包含的內(nèi)容:
$ tree /usr/local/stow/
看,hello 這個(gè)程序已經(jīng)安裝在 /usr/local/stow/hello/
下。同樣地,所有的包都將保存在它們對(duì)應(yīng)的目錄之下。
下面進(jìn)入主要環(huán)節(jié),移除 hello 這個(gè)程序。首先進(jìn)入 /usr/local/stow/
目錄:
$ cd /usr/local/stow/
然后運(yùn)行下面的命令:
$ sudo stow --delete hello
hello 這個(gè)程序就會(huì)被移除了。你可以使用下面的命令確認(rèn)它是否真的被移除了:
$ hello
-bash: /usr/local/bin/hello: No such file or directory
看, Hello 已經(jīng)被移除了!
請(qǐng)注意 Stow 僅僅只移除了符號(hào)鏈接。所有與 hello 這個(gè)程序相關(guān)的文件或者目錄還保存在 /usr/local/stow/hello
目錄下。所以你無(wú)需再次下載源文件就可以再次安裝 hello 這個(gè)程序。如果你不再需要它了,直接刪除這個(gè)文件夾即可。
$ sudo rm -fr /usr/local/stow/hello/
想了解更多 Stow 的細(xì)節(jié),請(qǐng)參閱 man 手冊(cè)。
$ man stow
Stow 可以像安裝程序一樣輕松地幫你移除它。如果你想知道如何高效的管理很多從源代碼中安裝的程序,GNU Stow 就是一個(gè)使得這個(gè)任務(wù)更加輕松的一個(gè)選擇,嘗試一下,你一定不會(huì)失望的。
這就是所有的內(nèi)容了,希望對(duì)你有所幫助。還有更多干活即將到來(lái),可以期待一下的!
祝近祺!