修复 Ubuntu 上的“E: Could not get lock /var/lib/dpkg/lock”错误
本简短指南可帮助您在 Ubuntu 上修复“E: Could not get lock /var/lib/dpkg/lock”错误。当另一个 apt 操作已在后台运行时,通常会发生这种情况。
我有一个 Ubuntu 18.04 LTS 虚拟机,用于测试目的。每当我启动此 VM 并尝试使用 APT 包管理器更新或安装任何应用程序时,都会收到以下错误:
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?或者,类似的错误如下:
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?E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/它每次都会发生。我不得不等待几分钟才能执行适当的操作。
我知道在后台安装或删除软件或更新系统时,某些进程已锁定 apt 数据库。我运行了“top”命令来调查正在运行的进程列表。查看 top 命令的输出后,我发现 有一个名为 unattended-update 的进程,它运行 apt update > 每次我打开 Ubuntu 虚拟机时。当 apt 更新运行时,apt 数据库被锁定,我无法执行任何 apt 操作。
修复 Ubuntu 上的“E: Could not get lock /var/lib/dpkg/lock”错误
解决“E: Could not get lock /var/lib/dpkg/lock”错误的正确方法是允许当前安装或更新或卸载任务正常完成。 此过程将需要一些时间(5 到 10 分钟或更长时间)才能完成,具体取决于更新的大小。该任务完成后,锁定将自动释放。
但是,如果进程由于某种原因卡住并且锁定了 apt 数据库几分钟,那么您别无选择,只能删除锁定。在这种情况下,请按照以下步骤进行修复。
首先让我们找出哪个进程拥有锁定文件,即/var/lib/dpkg/lock。
sudo lsof /var/lib/dpkg/lock如果锁定文件不同,例如 /var/lib/dpkg/lock-frontend,您可以使用以下命令找到拥有该锁定文件的进程的 PID:
sudo lsof /var/lib/dpkg/lock-frontend如果锁定文件是“/var/lib/apt/lists/lock”,请运行:
sudo lsof /var/lib/apt/lists/lock示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unattende 1548 root 6uW REG 8,2 0 1181062 /var/lib/dpkg/lockE:无法获取锁 /var/lib/dpkg/lock-frontend - 打开(11:资源暂时不可用)
正如您在上面的输出中看到的,持有锁定文件的进程的 PID 是1548。
只需使用命令杀死它即可释放锁定:
sudo kill -9 1548您现在可以使用命令安全地删除锁:
sudo rm /var/lib/dpkg/lock
或者,
sudo rm /var/lib/dpkg/lock-frontend或者,
sudo rm /var/lib/apt/lists/lock此外,您可能需要删除缓存目录中的锁定文件:
sudo rm /var/cache/apt/archives/lock解除锁定后,运行:
sudo dpkg --configure -a这应该可以解决问题。
这个方法在 99% 的情况下都可以正常工作。但请注意,如果更新进程正在运行,并且您在软件包安装过程中终止了该进程,则可能会导致系统损坏。在这种情况下,不要惊慌,只需按照以下指南进行修复即可。
- 如何修复损坏的 Ubuntu 操作系统而无需重新安装
祝你好运!
删除锁定文件是正确的解决方案吗?
当然不是!正如我们的一位读者 Guillem Jover 先生提到的,删除锁定文件永远都不是正确的解决方案,并且可能会导致系统数据丢失或损坏。您必须让当前正在运行的 apt 任务正常完成。但是,有时任务的运行时间可能比平常长,或者可能被冻结。
如果需要终止任何此类冻结进程,请运行以下命令:
sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontendsudo dpkg --configure --pending第一个命令将查找当前持有锁的进程,打印有关它们的信息并提示杀死它们。如果正常终止不起作用,您可能需要使用 -KILL 代替。需要 dpkg --configure --pending 命令来完成任何挂起的配置,以使进程进入正常状态,并让 dpkg 将任何数据库日志更新合并到主状态数据库中。
资源:
- Debian 维基
相关阅读:
- 如何在 Ubuntu 上禁用无人值守升级
