Bagaimana Ubuntu tahu program apa yang ada dan dapat diinstal?

9

Saya mengetik berikut ini di terminal

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

Jadi Ubuntu tahu bahwa "musique" adalah sebuah program, meskipun saat ini tidak diinstal pada mesin. Namun, jika saya mengetik

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

ia tahu bahwa tidak ada program yang disebut "musiquez".

Pertanyaan saya adalah, bagaimana Ubuntu mengetahui hal ini? Di mana informasi ini disimpan tentang aplikasi apa yang dapat diinstal di Ubuntu?

Kode biru
sumber

Jawaban:

9

Fitur ini disediakan oleh paket command-not-found (Fungsinya untuk menyarankan alternatif dan koreksi jika terjadi kesalahan ketik dll). Ubuntu menginstalnya secara default.

bagaimana cara kerjanya?

Cara kerjanya adalah melalui command_not_found_handle()fungsi di bash. bash menyediakan sebuah hook yang pada dasarnya adalah sebuah fungsi yang dipanggil ketika sebuah perintah tidak ditemukan.


Jika Anda lebih ingin tahu, buka /usr/lib/command-not-foundfile dan lihat skripnya. Ia bekerja menggunakan modul python CommandNotFound.

masukkan deskripsi gambar di sini

stderr
sumber
4

Sepasang paket, command-not-founddan command-not-found-data, adalah yang membuat fitur ini berfungsi.

command-not-foundhanyalah sebuah handler untuk command_not_found_handle()fungsi bash; itu mencari melalui data tentang pemetaan antara perintah dan paket yang disediakan oleh command-not-found-data.

nc4pk
sumber
Saya akan berasumsi bahwa command-not-foundkemudian memeriksa melalui cache lokal dari repositori yang dibuat setiap kali pengguna berjalan sudo apt-get update.
nerdwaller