如何修复 Ubuntu 中的“无法获取 dpkg 前端锁”错误?

使用 apt、apt-get、aptitude 或 dpkg 更新或安装软件包时,您可能会收到一条错误消息,提示“无法获取 dpkg 前端锁‘ 或与锁相关的类似错误。 错误消息如下所示:

无法获得锁

您可能还会收到以下错误消息:

  • E: Could not get lock /var/lib/apt/lists/lock – open (11: Resource temporarily unavailable)
    E: Unable to lock directory /var/lib/apt/lists/
  • E: Could not get lock /var/lib/dpkg/lock – open (11: Resource temporarily unavailable)
    E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?

使用软件中心/App Store 时也可能如下所示:

无法获得锁定 – 软件中心

在本文中,我们将介绍如何解决此错误,以便您可以在 Ubuntu/Debian 机器上继续您的重要工作。

为什么会出现“无法获取 dpkg 前端锁”错误?

每当像 apt 这样的程序尝试更新或安装软件包时,它首先会锁定特定文件。 任何其他尝试更新或安装软件包的程序 必须检查 此文件的锁是否可用。 在给定时间只有 1 个程序可以拥有锁.

可能会发生另一个程序正在更新/安装软件包,然后您尝试 sudo apt install 当另一个程序仍然拥有锁时。 自从 apt 现在不能拥有锁,它会给出一个错误,说“无法获取 dpkg 前端锁‘或类似的东西。

这 ‘锁定机制‘ 存在是因为包更新不能并行运行,它们可能会相互干扰。 现在我们明白了为什么会抛出这个错误,我们可以继续修复它。

如何修复“无法获取 dpkg 前端锁”

现在我们了解了错误背后的原因,让我们尝试修复它。

计划 0

这个计划被命名为计划 0,因为它对于初学者来说非常简单且容易忽视。 使用 apt 命令安装软件包时,您 必须有超级用户权限.

如果你忘记在前面加上你的 apt installsudo, apt 会冲你大喊大叫,说它无法打开锁定文件。 这并不完全是“无法获得 dpkg 前端锁”错误,而是一个会让刚开始 Linux 之旅的人感到沮丧的错误。

步骤1你是root吗?

方案一

该计划涉及找出已经在运行更新的进程,然后等待它或优雅地终止它。 您可以使用 ps 命令查找正在运行的进程。

ps aux | grep -i apt 
ps输出ps输出

如您所见,更新正在进行中。 如果进程是最后一列的输出 ps 命令是 apt.systemd.daily,您可能应该等待几分钟,因为这是 apt-daily.service 每次系统启动时运行的服务。 等待时间取决于系统。

如果最后一列 ps 命令与上面屏幕截图中显示的命令类似,您可以使用 kill 命令。 PID(进程 ID)可以从 ps 命令输出的第二列中获得。

sudo kill <process_id> 

当 apt 被杀死时,它也会释放它持有的锁。

方案二

如果计划 1 对您不起作用,则可能是由于文件锁定而发生的。 如果拥有锁的程序突然终止,它可能没有释放锁。 使用 lsof 命令查看哪个进程拥有这些文件的锁:

sudo lsof /var/lib/dpkg/lock sudo lsof /var/lib/apt/lists/lock sudo lsof /var/cache/apt/archives/lock 

上面的一些命令可能不会给出输出,但对我来说 lsof /var/lib/dpkg/lock 给出了以下输出。

找出罪魁祸首lsof 输出

然后使用 PID 杀死命令的命令。

sudo kill -9 <process_id> 

-9 发送一个 SIGKILL 作为kill命令的参数传递给程序的信号。

然后您可以使用手动删除锁定文件 rm 命令。

sudo rm /var/lib/apt/lists/lock sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock 

笔记: 不建议手动删除锁定文件。 因此,计划 2 应作为最后的手段

删除锁后重新配置 dpkg。

sudo dpkg --configure -a 

它对你有用吗?

看完这篇文章,您是否解决了无法获取dpkg前端锁的错误? 如果是,哪个计划适合您? 让我们在评论中知道。