0 前言
译自:https://www.tecmint.com/fix-unable-to-lock-the-administration-directory-var-lib-dpkg-lock/
在Ubuntu Linux或其衍生版本(如Linux Mint(我实际上用作日常工作的主要操作系统))中使用apt-get命令或相对较新的APT软件包管理工具时,您可能会遇到错误–“无法 锁定管理目录(/ var / lib / dpkg /)是在命令行上使用它的另一个过程。
对于特别是可能不确切知道错误原因的新Linux(Ubuntu)用户,此错误可能会令人讨厌。
下面是一个示例,显示了Ubuntu 16.10中的锁定文件错误:
tecmint@TecMint:~$ sudo apt install neofetch [sudo] password for tecmint: 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/ 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?
万一将来碰到上述错误,如何解决? 有几种方法可以解决此错误,但是在本指南中,我们将介绍两种最简单且可能是最有效的解决方法。
1 查找并杀死所有apt-get或apt进程
运行以下命令以生成名称由apt组成的所有进程的列表,通过使用ps和grep命令以及管道,您将获得包含所有apt或apt-get进程的列表。
$ ps -A | grep apt
对于您可以在上面的命令输出中看到的每个apt-get或apt进程,请使用以下命令杀死每个进程。
进程ID(PID)在上面的屏幕快照的第一列中。
$ sudo kill -9 processnumber OR $ sudo kill -SIGKILL processnumber
例如,在下面的命令中,其中9是SIGKILL信号的信号编号,将杀死第一个apt进程:
2 Delete the lock Files
lock文件仅阻止访问Linux系统上的另一个文件或某些数据,Windows和其他操作系统中也存在此概念。
一旦运行apt-get或apt命令,就会在以下任何目录/var/lib/apt/lists/,/var/lib/dpkg/和/var/cache/apt/archives/下创建一个lock文件。
这有助于避免已经运行的apt-get或apt进程被用户或其他需要处理apt-get或apt所使用的文件的系统进程中断。 进程完成执行后,将删除lock文件。
重要提示:如果在上述两个目录中仍然存在锁,并且没有运行明显的apt-get或apt进程,则这可能意味着该进程由于一个原因或另一个原因而被保留,因此您需要删除lock文件才能清除错误。
首先执行以下命令以删除/var/lib/dpkg/目录中的锁定文件:
$ sudo rm /var/lib/dpkg/lock
然后强制软件包重新配置,如下所示:
$ sudo dpkg --configure -a
或者,删除 /var/lib/apt/lists/ 中的锁定文件并缓存目录,如下所示:
$ sudo rm /var/lib/apt/lists/lock $ sudo rm /var/cache/apt/archives/lock
接下来,如下更新软件包源列表:
$ sudo apt update OR $ sudo apt-get update
总之,在运行apt-get或apt以及aptitude命令时,我们已经通过两种重要的方法来解决Ubuntu(及其衍生产品)用户面临的常见问题。
3 绝招
对,就是重启大法reboot。