11
10月
2023
解决问题”找不到Command-not-found database“
16:44

解决问题”找不到Command-not-found database“

11 10月 2023 16:44

当用户在终端中意外输入不存在的命令名称(例如“foobar”)时,就会触发“command not found”存根程序。在某些情况下,“command not found”程序无法运行。我该如何解决这个问题?

==

简介

众所周知,程序包含在由 apt 命令管理的软件包中,这些软件包基于 /etc/apt/sources.list 文件和 sources.list.d 子文件夹中的 *.list 文件的内容。当软件库的组成发生变化时,位于 /var/lib/command-not-found/ 路径下的 “command not-found” 程序数据库应该会自动更新。我遇到的问题症状如下:

1) 执行错误命令时,出现一条消息:
...
找不到 command-not-found 数据库。运行“sudo apt update”来填充它。
... : 命令未找到

2) 没有该命令的数据库,事实如下:

ls -l /var/lib/command-not-found/

0 个文件

原因

成功调用“apt-get update”实用程序后,必须执行一个 Bash 脚本:/etc/apt/apt.conf.d/50command-not-found。Linux LXLE 没有这样的文件,但 Linux Mint 有。LXLE 开发人员是否忘记包含“50command-not-found”文件?

解决方案:方法 1

将“/etc/apt/apt.conf.d/50command-not-found”文件从 Linux Mint 复制到 LXLE,或手动创建该文件。
script

源代码为“50command-not-found”:
50command-not-found.zip

接下来,通过调用 apt update 更新缓存。“command-not-found”程序的 SQLite 数据库文件也将在 /var/lib/command-not-found/ 目录中创建。文件“commands.db”和“commands.db.metadata”由 Python 脚本 /usr/lib/cnf-update-db 创建。 (操作系统必须安装 Python 2.7 或更高版本——Linux LXLE 满足此要求。)

解决方案:方法 2

使用 apt update 更新软件包后,您必须在终端中以 sudo 权限手动运行以下两个命令:

sudo rm -f /var/lib/command-not-found/.
sudo /usr/lib/cnf-update-db

无效的解决方案(来自互联网)

——可能适用于其他发行版。

重新安装该实用程序:

sudo apt purge command-not-found
sudo apt install command-not-found
sudo apt update

检查

验证“commands.db”和“commands.db.metadata”文件是否存在:

ls -l /var/lib/command-not-found/

Total 3156

  • -rw-r--r-- 1 root root 3223552 Oct 11 15:53 ​​commands.db
  • -rw-r--r-- 1 root root 3260 Oct 11 15:53 ​​commands.db.metadata
    使用 r@host:~$

例如,运行“错误”的命令“Appt”:

appt

未找到 appt 命令。您可能指的是:
deb bsdgames (2.17-29) 中的“ppt”命令
deb apt (2.4.10) 中的“apt”命令
deb aapt (1:10.0.0+r36-3) 中的“aapt”命令
尝试:sudo apt install

“使用命令未找到数据库。运行‘sudo apt update’填充数据库”消息不再显示。此问题已修复。