Como o Ubuntu sabe quais programas existem e podem ser instalados?

9

Digitei o seguinte em um terminal

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

Portanto, o Ubuntu sabe que "musique" é um programa, embora atualmente não esteja instalado na máquina. No entanto, se eu digitar

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

sabe que não existe um programa chamado "musiquez".

Minha pergunta é: como o Ubuntu sabe disso? Onde estão armazenadas essas informações sobre quais aplicativos podem ser instalados no Ubuntu?

Código Azul
fonte

Respostas:

9

Esse recurso é fornecido pelo pacote command-not-found (Sua função é sugerir alternativas e correções em caso de digitação incorreta etc.). O Ubuntu instala-o por padrão.

como funciona?

O modo como funciona é através da command_not_found_handle()função bash. O bash fornece um gancho que é basicamente uma função que é chamada quando um comando não é encontrado.


Se você estiver mais curioso, abra o /usr/lib/command-not-foundarquivo e dê uma olhada no script. Funciona usando o módulo python CommandNotFound.

insira a descrição da imagem aqui

stderr
fonte
4

Um par de pacotes command-not-founde command-not-found-dataé o que faz esse recurso funcionar.

command-not-foundé simplesmente um manipulador para a command_not_found_handle()função bash; ele pesquisa os dados sobre o mapeamento entre comandos e pacotes fornecidos por command-not-found-data.

nc4pk
fonte
Eu assumiria que, em command-not-foundseguida, verifica o cache local dos repositórios que é feito toda vez que um usuário executa sudo apt-get update.
Nerdwaller 11/07/2013