Ubuntu 如何知道哪些程序存在且可以安装?

Ubuntu 如何知道哪些程序存在且可以安装?

我在终端中输入了以下内容

$ musique
The program 'musique' is currently not installed. You can install it by typing:
sudo apt-get install musique

因此,Ubuntu 知道“musique”是一个程序,尽管它目前尚未安装在机器上。但是,如果我输入

$ musiquez
No command 'musiquez' found, did you mean:
 Command 'musique' from package 'musique' (universe)

它知道没有叫做“musiquez”的程序。

我的问题是,Ubuntu 如何知道这一点?有关哪些应用程序可以在 Ubuntu 上安装的信息存储在哪里?

答案1

此功能由找不到命令(其功能是在输入错误等情况下建议替代方案和更正)包。Ubuntu 默认安装它。

它是如何工作的?

它的工作方式是通过command_not_found_handle()bash 中的函数。bash 提供了一个钩子,它基本上是一个在找不到命令时调用的函数。


如果你更好奇,请打开文件/usr/lib/command-not-found并查看脚本。它使用 python 模块 CommandNotFound 工作。

在此处输入图片描述

答案2

正是由一对包command-not-foundcommand-not-found-data才使得该功能得以实现。

command-not-found只是一个command_not_found_handle()bash 函数的处理程序;它搜索有关 提供的命令和包之间的映射的数据command-not-found-data

相关内容