我花了很长时间才发现“gnome-console”包的二进制文件被称为“kgx”。
因此,我的问题是:
假设我知道从 pacman 安装的包的名称,是否有一种通用的方法来找到可用于启动应用程序的二进制文件的名称?
上下文:
我知道我的默认 Arch GNOME 安装在 GUI 中提供了一个终端仿真器。在 GUI 中,它被命名为“控制台”。所以我通过 查询了 pacman pacman -Qs console
。它返回:
local/gnome-console 47.1-1 (gnome)
A simple user-friendly terminal emulator for the GNOME desktop
但是,gnome-console
它不在我的终端的已知命名空间内。因此,我知道实际的二进制文件一定有不同的名称。此时,我的知识已经耗尽,我不得不在互联网上搜索(不知何故搜索了太长时间),直到我偶然发现 Reddit 上的一条旧评论,其中提到该二进制文件实际上被称为“kgx”。
我认为有一个更好的方法可以做到这一点,而不是希望“互联网上”的某个人知道您正在寻找的二进制文件的名称。
可以,但这并不像你想象的那么简单。一个软件包不能保证只提供一个可执行文件。事实上,许多软件包提供了多个可执行程序。举一个明显的例子,考虑哪个
coreutils
软件包提供了基本的 GNU 实用程序cat
,如chmod
、、等等。因此,在谈论软件包时,没有“它的二进制文件”。相反,你可以获得软件包可能提供的各种二进制文件的列表。ln
split
讲得再详细点,让我们看看如何实际操作。我只需要查找安装在各个
bin
目录中的软件包中包含的文件。例如:该命令
pacman -Ql PACKAGE_NAME
打印出包将接触的文件和目录列表,其中包位于第一个字段,文件/目录位于第二个字段:因此,我们将其传递给一个
awk
命令,如果第二个字段匹配,则打印第二个字段bin/
,后面至少有一个字符。这是为了避免打印出/usr/bin
它本身。请注意,这假设任何路径中都没有空格,这实际上应该是一个安全的假设,但为了完整性,这里有一个也可以处理空格的命令(不在包名称中,因为这是不允许的):并且,仅说明第一段中的观点:
或者,由于某些可执行文件可能未安装在
bin
目录中,因此您可以遍历文件列表并查找用户可以执行的常规文件:对于
coreutils
,它还包含一个文件: