如何修复“ E:无法在Ubuntu上获得锁/var/lib/dpkg/lock”错误
时间:2020-03-21 11:44:32 来源:igfitidea点击:
每当我启动Ubuntu 18.04 LTS虚拟机并尝试使用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操作。
我知道某些进程已在后台安装或者删除软件或者更新系统时锁定了apt数据库。
我运行“ top”命令来调查正在运行的进程的列表。
在查看top命令的输出后,我知道有一个名为无人值守更新的进程,该进程在每次打开Ubuntu虚拟机时都会运行apt update。
在运行apt更新时,apt数据库已锁定,我无法执行任何apt操作。
在Ubuntu上修复"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/lock
从上面的输出中可以看到,保存锁定文件的进程的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