Как 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

Эта функция предоставляется пакетом command-not-found (его функция - предлагать альтернативы и исправления в случае опечатки и т. Д.). 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.