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

Cod*_*lue 9 package-management ubuntu apt-get

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

$ musique
The program 'musique' is currently not installed. You can install it by typing:
sudo apt-get install musique
Run Code Online (Sandbox Code Playgroud)

所以Ubuntu知道“musique”是一个程序,尽管它目前没有安装在机器上。但是,如果我输入

$ musiquez
No command 'musiquez' found, did you mean:
 Command 'musique' from package 'musique' (universe)
Run Code Online (Sandbox Code Playgroud)

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

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

std*_*err 9

此功能由command-not-found(其功能是在输入错误等情况下建议替代方案和更正)包提供。Ubuntu 默认安装它。

它是如何工作的?

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


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

在此处输入图片说明