如果您是 Ubuntu/Debian 的普通用户,您可能会在某个时间点遇到错误:’无法获得锁 /var/lib/dpkg/lock‘。 这恰好与错误有关 ‘无法获得锁 /var/lib/apt/lists/lock’. 下面是显示此类错误的屏幕截图。
这是一个非致命错误,通常不是引起关注的主要原因。 正如我们稍后将演示的那样,它可以很容易地解决。 但首先是什么原因造成的呢? 让我们来了解一下。
错误原因
此错误的常见原因是当进程使用 APT 包管理器更新/升级/安装软件或在系统上执行某些包管理时。 发生这种情况时,该进程使用锁定文件锁定 dpkg 文件,这样另一个进程不会更改可能导致错误和系统中关键文件损坏的数据。
每当您遇到此错误时,很有可能有另一个同时运行的进程正在运行 APT。 这可能是在另一个终端上同时运行的进程。 由于在终端上按 CTRL + C 或意外关闭终端窗口而提前终止的更新或升级过程中断,也可能发生该错误。
如何解决无法获取锁 /var/lib/dpkg/lock 错误
这里有一些技巧可以帮助纠正错误并帮助您重新使用 APT 包管理器。
等待过程完成
如果您有另一个终端会话,其中 APT 包管理器正在被更新或升级系统或安装应用程序等命令使用,请让操作成功完成。 完成后,您可以运行所需的命令并使用 APT 执行任何其他操作。
使用 APT 包管理器终止进程
如果您使用 APT 中断了进程,例如取消升级或更新包索引,请首先使用显示的 ps 命令识别使用 APT 的进程:
$ ps aux | grep -i apt
从输出中,我们可以看到 APT 被 root 启动的两个进程使用。 进程带有 PID 3994 和 3999. 一旦您使用 APT 识别了进程,接下来的操作就是终止或终止这些进程。
为此,请使用 kill 命令,如下所示。
$ kill -9 PID
从输出中,我们将杀死带有 PID 的进程 3994 和 3999 如下:
$ kill -9 3994
$ kill -9 3999
这 -9 flag 触发一个 SIGKILL 信号,该信号立即终止一个进程,而不允许它正常退出。
一个更简单的方法是使用 杀死所有 命令如图。
$ killall apt apt-get
一旦你杀死了有问题的进程,你现在可以继续在你的命令中使用 APT 包管理器。
删除锁定文件
您可以应用的另一个修复是删除锁定文件。 如前所述,锁定文件可防止两个不同进程访问数据。 要摆脱锁定文件,请运行以下命令。
$ sudo rm /var/lib/dpkg/lock
$ sudo rm /var/lib/dpkg/lock-frontend
最后,重新配置软件包。
$ sudo dpkg --configure -a
结论
这些解决方案中的任何一个都将帮助您绕过此错误,并让您使用 APT 包管理器进行其他操作。 请让我们知道什么对您有用。