如何修复 Ubuntu 的 Could not get lock /var/lib/dpkg/lock’ 错误

最近,牛奇网在 Ubuntu 上尝试使用 apt 命令安装 Lynx 应用程序时遇到以下错误:

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

下面介绍一下,遇到了上述的错误,应该如何处理。

修复“Unable to lock the administration directory (/var/lib/dpkg/)”错误

如果您遇到上述错误,可能是因为某些程序正在进行更新。当正在更新时,会锁定 dpkg 文件(Debian 软件包管理器),以防止两个进程同时更改内容。

下面我们来看一下应该如何处理上述问题。

场景 1:

我们首先检查一下,是否正在运行系统更新或正在安装某些程序。

如果使用的是命令行,可以检查软件中心、软件更新、Synaptic 软件包管理器、Gdebi等应用程序是否正在运行任何更新或安装。如果有的话,请等待程序完成运行过程。此外,还要检查所有打开的终端窗口,看看是否正在运行更新或正在安装程序。如果有请等待它完成。

如果上述的问题都不存在,可检查一下是否有进程正在运行 apt 命令。可执行下面的命令:

ps aux | grep -i apt

它可能会显示如下所示的输出:

iuqi@niuqi-machine:~$ ps aux | grep -i apt
root        7622  0.0  0.0   2616   516 ?        Ss   17:27   0:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
root        7627  0.0  0.0   2616  1536 ?        S    17:27   0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
_apt        8098  1.1  0.5  27148  9760 ?        S    17:29   0:01 /usr/lib/apt/methods/http
niuqi       8173  0.0  0.0  11984   664 pts/0    S+   17:31   0:00 grep --color=auto -i apt

如果看到 apt 正在被 apt.systemd.daily update 之类的程序使用,说明系统正在进行更新。

如果在 Ubuntu 服务器上,可以通过查看 /etc/apt/apt.conf.d/20auto-upgrades 文件的内容,来确认是否启用了无人值守升级。

所以如果看到 apt.systemd.daily 正在使用 apt 进程,我们需要耐心等待一些时间。等自动更新完成后,应该就能够正常安装软件了。

上面介绍的是最好的情况,如果是其他程序正在使用 apt,则需要以其他的方式来处理。

场景 2:

首先,使用 Linux 命令行查找正在运行的进程。执行下面的命令:

ps aux | grep -i apt

这将返回运行 apt 或 apt-get 的进程的 ID。

然后通过下面的命令来终止该进程。将 <process_id> 替换为在上一个命令的输出中获得的进程 ID。

sudo kill <process_id>

通过运行下面的命令,检查使用 apt 的进程是否被终止。

sudo ps aux | grep -i apt

如果它仍在运行,使用下面的命令强制终止它:

sudo kill -9 <process_id>

另一种更简单的方法是使用 killall 命令。停止所有正在使用 apt 的进程:

sudo killall apt apt-get

场景 3 :

在大多数情况下,上述方法可以解决前面的 apt 问题。但有时可能有特殊情况,比如在使用命令行更新系统时,意外关闭了终端。

这里建议先尝试上面介绍的两种方法,或先重新启动系统试一下。如果这些都不起作用,那么可以选择删除锁定文件。

但在删除锁定文件之前,最好停止使用锁定文件的进程。使用 lsof 命令获取使用锁定文件进程的 ID。执行下面的命令:

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

这些命令可能不返回任何内容,或者只返回一个进程 ID。如果返回了进程 ID ,使用下面的命令中止该进程:

sudo kill -9 <process_id>

然后,使用以下命令删除锁定文件:

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

之后,重新配置软件包:

sudo dpkg --configure -a

现在,如果再次运行 sudo apt update 命令,应该不会出现之前的错误。

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/could-not-get-lock-error/

(0)
牛奇网牛奇网
上一篇 2022年2月9日
下一篇 2022年2月10日

相关推荐

发表回复

登录后才能评论