Як Ubuntu знає, які програми існують і які можна встановити?


9

Я набрав наступне в терміналі

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

Тож Ubuntu знає, що "musique" - це програма, хоча наразі вона не встановлена ​​на машині. Однак якщо я набираю

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

він знає, що не існує такої програми під назвою "musiquez".

Моє питання: як Ubuntu це знає? Де зберігається ця інформація про те, які програми можна встановити на Ubuntu?

Відповіді:


9

Ця функція надається пакетом не знайдених команд (її функція полягає у запропонуванні альтернатив та виправлень у разі помилки тощо). Ubuntu встановлює його за замовчуванням.

як це працює?

Це працює через command_not_found_handle()функцію в bash. bash забезпечує гачок, який в основному є функцією, яка викликається, коли команду не знайдено.


Якщо вам цікавіше, відкрийте /usr/lib/command-not-foundфайл і подивіться на сценарій. Він працює за допомогою модуля python CommandNotFound.

введіть тут опис зображення


4

Пара пакунків, command-not-foundі те command-not-found-data, що змушує цю функцію працювати.

command-not-foundпросто обробник command_not_found_handle()функції bash; він здійснює пошук даних про відображення між командами та пакетами, наданими command-not-found-data.


Я б припустив, що command-not-foundпотім перевіряється через локальний кеш сховищ, який робиться щоразу, коли користувач працює sudo apt-get update.
nerdwaller
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.