查找与命令关联的未安装的 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 正则表达式的介绍。