Comment Ubuntu sait-il quels programmes existent et peuvent être installés?

9

J'ai tapé ce qui suit dans un terminal

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

Ubuntu sait donc que "musique" est un programme, bien qu'il ne soit actuellement pas installé sur la machine. Cependant, si je tape

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

il sait qu'il n'existe aucun programme de ce type appelé "musiquez".

Ma question est, comment Ubuntu le sait-il? Où sont stockées ces informations sur les applications pouvant être installées sur Ubuntu?

Code bleu
la source

Réponses:

9

Cette fonctionnalité est fournie par la commande non trouvée (sa fonction est de suggérer des alternatives et des corrections en cas de faute de frappe, etc.). Ubuntu l'installe par défaut.

Comment ça marche?

La façon dont cela fonctionne est à travers la command_not_found_handle()fonction dans bash. bash fournit un hook qui est essentiellement une fonction qui est invoquée lorsqu'une commande n'est pas trouvée.


Si vous êtes plus curieux, ouvrez le /usr/lib/command-not-foundfichier et jetez un œil au script. Il fonctionne en utilisant le module python CommandNotFound.

entrez la description de l'image ici

stderr
la source
4

Une paire de packages, command-not-foundet command-not-found-data, sont ce qui fait que cette fonctionnalité fonctionne.

command-not-foundest simplement un gestionnaire pour la command_not_found_handle()fonction bash; il recherche dans les données sur le mappage entre les commandes et les packages fournis par command-not-found-data.

nc4pk
la source
Je suppose que command-not-foundvérifie ensuite le cache local des référentiels à chaque exécution d'un utilisateur sudo apt-get update.
nerdwaller