查找提供给定命令的包

查找提供给定命令的包

如果安装了该软件包command-not-found并且用户尝试运行系统上不存在的命令,则会打印一条建议,其中包含提供可执行文件的软件包的名称。是否有具有相同功能但以可执行文件的名称作为参数的命令?

编辑:我已读过如何找出文件属于哪个(未安装的)Debian 软件包?但这些建议都没有提供一个可以给出明确结果的命令,例如command-not-found.

答案1

您可以使用command-not-found自身:

command-not-found --ignore-installed ls

会告诉你哪个包包含该ls命令。 (--ignore-installed避免考虑已安装的软件包,特别是确保该命令在已安装的情况下不会立即运行。)

或者,您可以使用apt-file

apt-file search bin/ls

将列出包含路径包含“bin/ls”的文件的所有包。您可以过滤它以仅匹配ls

apt-file search bin/ls | grep bin/ls$

答案2

是的,命令是command-not-found

$ command-not-found firefox
The program 'firefox' is currently not installed.  To run 'firefox' please ask your administrator to
install the package 'firefox-esr'
firefox: command not found

这有确切地相同的功能,因为它是 shell 捕获运行以自动生成输出的内容。

您还可以使用它apt-file search firefox来查找任何匹配的文件在一个包中。

答案3

apt-file 及其 perl 正则表达式几乎能够执行该任务...只要该文件被验证安装在 $PATH 中的某个位置...

apt-file find --regexp "/$COMMAND$" | grep -E "($(tr : '|' <<< "$PATH"))/$COMMAND$""

相关内容