如何在 Linux 中使用 GNU Stow 删除从源安装的程序

有时,您必须通过从源代码手动编译来安装一些程序。 因为,它们可能在官方或第三方存储库中不可用,因此您无法使用常规包管理器安装它们。 您可能已经知道,当您从源代码安装程序时,包文件将被复制到多个位置,例如 /usr/local/bin, /usr/local/etc/, 在文件系统上。 如果从源安装的程序没有内置的卸载程序,那么当您不再需要它时删除这些软件包将是一项繁琐的任务。 您可能需要花费几分钟(或几分钟)来找到这些包文件并手动删除它们。 这就是我一直在做的事情,直到我偶然发现了一个名为 “GNU 斯托”. 值得庆幸的是,Stow 有一种简单的方法可以轻松管理从源代码安装的程序。

引用官方网站,

GNU Stow 是一个符号链接农场管理器,它采用位于文件系统上不同目录中的不同软件包和/或数据,并使它们看起来安装在同一个地方。

简而言之,Stow 可以帮助您以易于管理的方式组织包文件。 在这种方法中,文件不会被复制到多个位置。 相反,所有文件都保存在特定文件夹中,通常在程序名称下,Stow 会创建指向所有程序文件到适当位置的符号链接。 例如, /usr/local/bin 可能包含指向其中文件的符号链接 /usr/local/stow/vim/bin, /usr/local/stow/python/bin 等等,同样递归地用于任何其他子目录,例如 .../share, .../man, 等等。 在本教程中,我将通过一个实际示例向您展示如何使用 Stow 轻松管理从源代码安装的程序。 继续阅读。

在 Linux 中安装 GNU Stow

GNU Stow 在流行的 Linux 操作系统的默认存储库中可用。

Arch Linux 及其变体,运行以下命令来安装 Stow。

$ sudo pacman -S stow

Debian, Ubuntu, Linux 薄荷糖, 流行操作系统

$ sudo apt install stow

Fedora

$ sudo dnf install stow

RHEL/CentOS, AlmaLinux, 和 洛基 Linux

$ sudo dnf install epel-release
$ sudo dnf install stow

在 Linux 中使用 Stow 从源代码中删除安装的程序

正如我之前提到的,一个包的所有程序文件都将保存在位于 /usr/local/stow/. 在此根目录或父目录下,每个包都将保存在其自己的私有子目录中。 例如,如果我们安装 维姆 从源代码编辑器,所有与 Vim 相关的程序文件和目录都将保存在 /usr/local/stow/vim 文件夹。 如果你安装 Python 从源代码中,所有与 python 相关的文件都将保存在 /usr/local/stow/python 等等。

让我安装一个程序,例如 你好,从源头。

首先下载“hello”程序的压缩包。

$ wget https://ftp.gnu.org/gnu/hello/hello-2.10.tar.gz

使用命令提取下载的压缩包:

$ tar -zxvf hello-2.10.tar.gz

上述命令将在当前工作目录中创建一个名为 ‘hello-2.10’ 的目录,并提取其中的所有内容。

切换到解压目录:

$ cd hello-2.10/

使用 –prefix 选项运行以下命令。

$ ./configure --prefix=/usr/local/stow/hello

上述命令会将构建文件保存在指定位置,即 /usr/local/stow/hello 在我们的例子中。

最后,使用以下命令构建并安装 hello 程序:

$ make
$ sudo make install

而已。 hello 程序已安装在 /usr/local/stow/hello/ 地点。 您可以使用 ‘ls’ 命令验证它,如下所示。

$ ls /usr/local/stow/hello/ bin share

最后,前往 /usr/local/stow/ 目录并运行以下命令以生成必要的符号链接。

$ cd /usr/local/stow/
$ sudo stow hello

全做完了!

刚刚发生的事情是 hello 包中包含的所有文件和目录都已符号链接到该目录 /usr/local/. 换句话说, /usr/local/stow/hello/bin 已被符号链接到 /usr/local/bin/usr/local/stow/hello/share 已被符号链接到 /usr/local/share/usr/local/stow/hello/share/man 已被符号链接到 /usr/local/share/man 等等。

您可以使用验证它们 'ls' 命令:

$ ls /usr/local/bin/ hello

让我们使用命令检查 hello 程序是否正常工作:

$ hello Hello, world!

是的,它正在工作!

同样,您可以在其自己的子目录下安装如上所述的程序。

这是 Stow 根目录的内容:

$ tree /usr/local/stow/
列出 Stow 根目录的内容

看? hello程序安装在 "/usr/local/stow/hello/" 地点。 同样,所有包都将保存在它们自己的目录下。

这里是主要部分。 让我们删除 hello 程序。 为此,请访问 /usr/local/stow/ 目录:

$ cd /usr/local/stow/

..并运行以下命令:

$ sudo stow --delete hello
使用 Stow 删除程序

hello 程序刚刚被删除。 您可以使用命令验证它是否真的被删除:

$ hello -bash: /usr/local/bin/hello: No such file or directory
你好世界运行你好世界程序

看? 你好程序被删除!

请注意,Stow 仅删除了符号链接。 所有与 hello 程序相关的程序文件和目录在 /usr/local/stow/hello 文件夹。 因此,您可以再次安装 hello 程序,而无需下载实际的源文件。

如果您不再需要 hello 程序,只需删除其文件夹即可。

$ sudo rm -fr /usr/local/stow/hello/

要了解有关 Stow 的更多详细信息,请参阅手册页。

$ man stow

结论

GNU Stow 帮助您像安装程序一样轻松地卸载程序。 如果您想知道如何有效地管理从源代码安装的大量程序,GNU Stow 就是这样一个程序,可以使这项任务变得更容易。 试一试,你不会失望的。

资源:

  • GNU Stow 主页
  • 存放手册

建议阅读:

  • 如何在 Linux 中查找和删除未使用的软件包

CLI命令行GNU StowLinuxLinux 基础Linux 命令删除程序Stow