Woher weiß Ubuntu, welche Programme existieren und installiert werden können?


9

Ich habe Folgendes in ein Terminal eingegeben

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

Ubuntu weiß also, dass "musique" ein Programm ist, obwohl es derzeit nicht auf dem Computer installiert ist. Wenn ich jedoch tippe

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

es weiß, dass es kein solches Programm namens "musiquez" gibt.

Meine Frage ist, woher weiß Ubuntu das? Wo werden diese Informationen darüber gespeichert, welche Anwendungen unter Ubuntu installiert werden können?

Antworten:


9

Diese Funktion wird vom Befehl nicht gefunden (seine Funktion besteht darin, Alternativen und Korrekturen bei Tippfehlern usw. vorzuschlagen) bereitgestellt. Ubuntu installiert es standardmäßig.

wie funktioniert es?

Die Art und Weise, wie es funktioniert, ist durch die command_not_found_handle()Funktion in Bash. bash stellt einen Hook bereit, der im Grunde eine Funktion ist, die aufgerufen wird, wenn ein Befehl nicht gefunden wird.


Wenn Sie neugieriger sind, öffnen Sie die /usr/lib/command-not-foundDatei und sehen Sie sich das Skript an. Es funktioniert mit dem Python-Modul CommandNotFound.

Geben Sie hier die Bildbeschreibung ein


4

Mit zwei Paketen command-not-foundund command-not-found-datafunktioniert diese Funktion.

command-not-foundist einfach ein Handler für die command_not_found_handle()Bash-Funktion; Es durchsucht die Daten über die Zuordnung zwischen Befehlen und Paketen, die von bereitgestellt werden command-not-found-data.


Ich würde davon ausgehen, dass command-not-founddann der lokale Cache der Repositorys überprüft wird, der jedes Mal erstellt wird, wenn ein Benutzer ausgeführt wird sudo apt-get update.
Nerdwaller
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.