Skąd Ubuntu wie, jakie programy istnieją i które można zainstalować?

9

W terminalu wpisałem następujące

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

Ubuntu wie więc, że „musique” to program, chociaż nie jest on obecnie zainstalowany na komputerze. Jeśli jednak piszę

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

wie, że nie ma takiego programu o nazwie „musiquez”.

Moje pytanie brzmi: skąd Ubuntu to wie? Gdzie przechowywane są te informacje o tym, jakie aplikacje można zainstalować na Ubuntu?

CodeBlue
źródło

Odpowiedzi:

9

Ta funkcja jest dostępna w pakiecie „ nie znaleziono komendy” (jej funkcją jest sugerowanie alternatyw i poprawek w przypadku błędnego wpisania itp.). Ubuntu instaluje go domyślnie.

jak to działa?

Działa poprzez command_not_found_handle()funkcję w bash. bash zapewnia hak, który jest w zasadzie funkcją wywoływaną, gdy polecenie nie zostanie znalezione.


Jeśli jesteś bardziej ciekawy, otwórz /usr/lib/command-not-foundplik i spójrz na skrypt. Działa przy użyciu modułu Python CommandNotFound.

wprowadź opis zdjęcia tutaj

stderr
źródło
4

Para pakietów command-not-foundi command-not-found-data, co sprawia, że ​​ta funkcja działa.

command-not-foundjest po prostu command_not_found_handle()funkcją obsługi funkcji bash; przeszukuje dane o mapowaniu między poleceniami a pakietami dostarczonymi przez command-not-found-data.

nc4pk
źródło
Zakładam, że command-not-foundnastępnie sprawdza lokalną pamięć podręczną repozytoriów, która jest tworzona przy każdym uruchomieniu użytkownika sudo apt-get update.
nerdwaller