Моя недавно установленная система Ubuntu в настоящее время испытывает проблемы с хуком command-not-found:
josh@sirius:~$ invalid-command
Unable to open binary database /usr/share/command-not-found/programs.d/i386-main.db: File read error
Unable to open binary database /usr/share/command-not-found/programs.d/i386-multiverse.db: File read error
Unable to open binary database /usr/share/command-not-found/programs.d/i386-restricted.db: File read error
Unable to open binary database /usr/share/command-not-found/programs.d/i386-universe.db: File read error
invalid-command: command not found
Я попытался переустановить и dpkg-reconfigure
оба command-not-found{,-data}
, но, похоже, они не исправили это. Безопасно ли удалять эти файлы или мне нужно запустить какую-нибудь программу для их воссоздания? Я должен добавить, что изначально это была 32-разрядная установка, которую я переустановил с 64-разрядной версией без форматирования диска.
Файлы базы данных для 64-битной версии называются amd64-*.db
, а файлы 32-битной версии - i386-*.db
. Очевидно, у вас установлен 32-битный пакет, когда у вас должен был быть 64-битный пакет.
Что это значит?
apt-cache policy command-not-found{,-data}
В 20.04.4
LTS мне помогло следующее:
$ sudo apt install --reinstall command-not-found
Пакета -data
больше нет.
Я получил что-то вроде:
$ kbounce
Sorry, command-not-found has crashed! Please file a bug report at:
https://bugs.launchpad.net/command-not-found/+filebug
Please include the following information with the report:
command-not-found version: 0.3
Python version: 3.8.5 final 0
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
Exception information:
unable to open database file
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/CommandNotFound/util.py", line 23, in crash_guard
callback()
File "/usr/lib/command-not-found", line 90, in main
cnf = CommandNotFound.CommandNotFound(options.data_dir)
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 79, in __init__
self.db = SqliteDatabase(dbpath)
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 12, in __init__
self.con = sqlite3.connect(filename)
sqlite3.OperationalError: unable to open database file
Прямо сейчас я получаю:
$ kbounce
Command 'kbounce' not found, but can be installed with:
sudo apt install kbounce
Редактировать 2020-12-16
Проблема вернулась после перезагрузки. Я отлаживал /usr/lib/python3/dist-packages/CommandNotFound/db/db.py
и обнаружил следующее:
$ ls /var/lib/command-not-found/ -l
total 3076
-rw-r----- 1 root root 3141632 gru 16 08:17 commands.db
-rw-r----- 1 root root 3253 gru 16 08:17 commands.db.metadata
Итак, БД есть, но права доступа неправильные.
Поэтому я выполнил:
$ sudo chmod -R o+r /var/lib/command-not-found/
Теперь все снова работает.