有时,您必须通过从源代码手动编译来安装一些程序。 因为,它们可能在官方或第三方存储库中不可用,因此您无法使用常规包管理器安装它们。 您可能已经知道,当您从源代码安装程序时,包文件将被复制到多个位置,例如 /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/
看? hello程序安装在 "/usr/local/stow/hello/"
地点。 同样,所有包都将保存在它们自己的目录下。
这里是主要部分。 让我们删除 hello 程序。 为此,请访问 /usr/local/stow/
目录:
$ cd /usr/local/stow/
..并运行以下命令:
$ sudo stow --delete hello
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