对于已安装的软件包

对于已安装的软件包

查找与命令关联的未安装的 aptitude 包的最佳方法是什么?我知道,apt-file但它的输出通常很难解析。

例如,apt-file search ifconfig输出 45 个结果。我可能可以使用一些正则表达式来进一步减少这个数字,但这远非理想。

我希望能够做一些类似的事情findpkg ifconfig,并且能看到net-tools没有混乱的东西。

答案1

对于已安装的软件包

这是 的工作dpkg-query

dpkg-query -S /path/to/file

为您提供安装匹配文件的软件包的名称。您需要使用准确的路径来获得没有混乱的输出,幸运的是,/sbin/ifconfig就像您的情况一样,可以使用以下命令轻松检索which

$ dpkg-query -S $(which ifconfig)
net-tools: /sbin/ifconfig

反过来,dpkg-query -L PACKAGENAME打印给定包安装的文件列表,例如:

$ dpkg-query -L net-tools | grep ^/sbin/
/sbin/nameif
/sbin/ipmaddr
/sbin/plipconfig
/sbin/ifconfig
/sbin/route
/sbin/mii-tool
/sbin/iptunnel
/sbin/rarp
/sbin/slattach

man dpkg-query了解更多信息。

对于尚未安装的软件包

apt-file提供了一些我们可以用来摆脱混乱输出的选项:

-l, --package-only
    Only display package name; do not display file names.

-x, --regexp
    Treat pattern as a (perl) regular expression. See perlreref(1) for details.
    Without this option, pattern is treated as a literal string to search for.

因此,要搜索命令的包,可以使用以下行:

apt-file -lx search "/COMMAND$"

为了简单起见,我们定义一个函数:

$ findpkg() { apt-file -lx search "/$1$";}
$ findpkg ifconfig
net-tools

man apt-file有关此命令的更多信息perldoc.perl.org有关 perl 正则表达式的介绍。

相关内容