¿Cómo sabe Ubuntu qué programas existen y se pueden instalar?

9

Escribí lo siguiente en una terminal

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

Entonces Ubuntu sabe que "musique" es un programa, aunque actualmente no está instalado en la máquina. Sin embargo, si escribo

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

sabe que no existe un programa llamado "musiquez".

Mi pregunta es, ¿cómo sabe Ubuntu esto? ¿Dónde se almacena esta información sobre qué aplicaciones se pueden instalar en Ubuntu?

Código Azul
fuente

Respuestas:

9

Esta característica es proporcionada por el paquete de comando no encontrado (su función es sugerir alternativas y correcciones en caso de error de escritura, etc.). Ubuntu lo instala por defecto.

¿como funciona?

La forma en que funciona es a través de la command_not_found_handle()función en bash. bash proporciona un enlace que es básicamente una función que se invoca cuando no se encuentra un comando.


Si tiene más curiosidad, abra el /usr/lib/command-not-foundarchivo y eche un vistazo al script. Funciona usando el módulo de Python CommandNotFound.

ingrese la descripción de la imagen aquí

stderr
fuente
4

Un par de paquetes command-not-foundy command-not-found-datason lo que hace que esta característica funcione.

command-not-foundes simplemente un controlador para la command_not_found_handle()función bash; busca a través de los datos sobre el mapeo entre comandos y paquetes proporcionados por command-not-found-data.

nc4pk
fuente
Supongo que command-not-foundluego verifica a través de la memoria caché local de los repositorios que se realiza cada vez que un usuario ejecuta sudo apt-get update.
nerdwaller