无法锁定管理目录(/ var / lib / dpkg /)是另一个使用它的进程吗?


1023

尝试使用时出现此错误apt-get

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?  

我怎样才能解决这个问题?


18
如果重新启动,这也是正确的吗?也许有些旧的apt线程正在锁定文件,您需要找出并杀死它,或者仅重新启动即可执行该操作。
布鲁诺·佩雷拉

4
此过程几乎总是可以解决此问题,如果没有解决,则有时其输出(来自终端的文本)很有用。如果您决定这样做,则可以将此文本添加到您的问题中。
伊利亚·卡根

54
您可以sudo lsof /var/lib/dpkg/lock用来查找拥有锁定文件的进程(如果为空,则假定该锁定是先前引导中留下的,并且可以是sudo rmd),然后考虑执行一个操作sudo kill -9 <PID>(从lsof输出中获取<PID> 。)
waltinator 2014年

11
这可能表明其他东西正在安装或删除软件,并在执行操作时锁定了apt数据库。
2015年

5
在我的Ubuntu 18.04 VM上,有一个名为无人值守更新的进程root <pid> <ppid> 0 15:58 ? 00:00:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held install,该进程由像进程运行,似乎每次打开计算机时都运行apt update。根据更新的大小(通常对应于自上次使用该机器以来的时间),此更新可能需要1到10分钟才能完成。之后,将释放该锁,以进行手动apt安装和更新。试试:sudo ps aux|grep apt或`sudo ps aux | grep无人看管。
Kjetil S.

Answers:


871

这应该用作最后的手段。如果不小心使用它,可能会导致系统损坏。请尝试其他的 答案, 第一在此之前。

您可以使用以下命令删除锁定文件:

sudo rm /var/lib/apt/lists/lock

您可能还需要删除缓存目录中的锁定文件

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

之后,尝试再次打开Synaptic。


13
好的...但是为什么会这样呢?
Jaime Hablutzel

40
@jaime:执行过程中可能停止了apt-get(或它的某些GUI前端),从而使apt处于锁定状态。
bouke 2012年

10
我认为这是最好的答案。纠正一个。
安华

9
@AnwarShah不,在删除系统文件之前,还有其他注意事项。
Braiam 2013年

22
rm / var / lib / dpkg / lock; dpkg --configure -a:
WitchCraft 2014年

663

我看到几乎所有答案都建议删除该锁。我不建议您首先这样做。也许如果没有其他选择。在apt进程运行时放置该锁,并在该进程完成时将其删除。如果存在没有明显进程在运行的锁,则可能意味着该进程由于某种原因而卡住了。

如果你试试

ps aux | grep [a]pt

要么

pgrep -a apt

apt至少会捕获包含单词的进程。如果您看到一个apt-get或多个aptitude进程陷入困境,可以尝试

sudo kill processnumber

如果这不起作用,请尝试

sudo kill -9 processnumber

这将终止进程,并可能会删除锁。除非某个进程处于安装软件包的中间,否则杀死它aptaptitude进程是无害的。无论如何,如果进程陷入困境,您可能别无选择,只能杀死它。

dpkg直接杀死一个进程(如果存在)不是一个好主意,因为如果该进程dpkg处于活动状态,则可能正在处理软件包数据库,而杀死它可能会使软件包数据库处于不一致状态;即损坏。

通常,杀死一个apt-get或一个aptitude进程要安全得多。


18
@Link我认为杀死dpkg不是一个好主意,因为通常dpkg是直接操作软件包数据库,这可能会导致损坏。
Faheem Mitha 2013年

18
如果杀死dpkg可能会破坏其数据库,则dpkg的设计不当。期。
2014年

10
对我来说,这导致再次dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.运行sudo apt-get dist-upgrade时出错。运行命令即可解决问题。我爱尼克斯!
韦恩·菲普斯

5
注意,killall apt-getps/ killcomb 做相同的事情。
塞林

3
请注意,我发现sudo dkpg --configure -a在终止流氓apt进程后需要运行以使事情恢复正常。
starbeamrainbowlabs

219

删除/var/lib/dpkg/lock文件并强制重新配置软件包。

sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a

此后它应该工作。


这些命令有所帮助,但是现在当我尝试再次安装时,得到了以下答复:无法获得锁/ var / cache / apt / archives / lock-打开。我想我必须像以前的解锁问题一样,但是请告诉我命令的确切关键字。我是绝对的初学者。
kern 2012年

1
sudo-以root身份执行命令, rm-删除文件。也许试试sudo rm /var/cache/apt/archives/lock
kubahaha 2012年

5
这不是一个好建议:盲目地消除运气可能会破坏dpkg的状态。
poolie'2

5
为什么现在不修复呢?
玛丽安·克鲁斯派(MarianKlühspies),2016年

2
这对我有用。上面的aws没有。
1rq3fea324wre'5

108

如果您sudo在执行apt命令时忘记使用它,则会收到此消息。

否则,这表明有其他东西正在安装或删除软件,并在执行操作时锁定了apt数据库。可以执行此操作的程序是:

  • 软件中心
  • 更新管理器
  • apt链接安装程序(我认为现在通过SC进行)
  • apt-get或aptitude命令行实用程序。
  • 突触包管理器

重要说明:只能尝试以下方法,因为它可能会使您的系统崩溃。首先尝试杀死Faheem的answer中描述的apt或正在运行的任何实例。aptitude

您可以通过删除文件来强制关闭锁,但是建议您先关闭安全持有锁的程序,否则不建议这样做,因为这可能会导致损坏或中断安装(严重)。João提供的命令应关闭持有该锁的程序,然后再删除该锁,但不会保护您免受安装中断的影响:

sudo fuser -cuk /var/lib/dpkg/lock; sudo rm -f /var/lib/dpkg/lock   

相同的命令可用于apt缓存锁定:

sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock

5
收到错误消息后,我正在更新软件。
2013年

20
这让我崩溃了–
umpirsky

5
sudo fuser -cuk /var/cache/apt/archives/lock直接重启我的电脑。apt-get现在已解锁。
Maxime R.

15
这使我的整个服务器崩溃。
에이바2015年

5
中途杀死apt或dpkg不是一个好主意。
poolie'2

99

实现此目标的最可能方法是:

  • 启动Ubuntu
  • 启动一个终端
  • 类型 sudo apt-get install whatever

并且命令行aptupdate-manager自动轮询重叠。

因此,如果您在几分钟后再试一次,应该可以解决该问题。


21
与建议仅删除文件的六次答复相比,这是个很好的提示;-)我在问题中随机遇到,很可能是这样!
2014年

2
足够安全,必须稍等一会sudo apt-get install才能生效。
sargas

好吧,这并不总是有效,是的,我已经使用过多次重启。如果不合适,请先尝试一下askubuntu.com/a/315791/378845,然后再取下锁
Menuka Ishan

@menuka,为什么不就这样结束呢。
poolie

@poolie因为还有其他限制因素正在阻止该过程结束
Menuka Ishan

52

只有一个程序可以持有该锁。确保您没有运行智能,突触或熟练的技术。关闭程序并再次运行,它应该可以工作。您可能已经打开了突触,或者正在运行另一个终端窗口以运行apt-get,或者正在运行更新管理器。检查它是否在运行,如果有的话他们正在关闭它,然后再试一次。

在终端中尝试此命令以查找正在运行的内容

ps -e | grep -e apt -e adept | grep -v grep

注意:
如果仍然无法打印任何内容,请在终端中键入以下内容以解除锁定

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

现在,您可以安装任何软件包。


9
我认为删除锁定文件是一件危险的事情。如果出于正当的原因另一个进程正在锁定-并且您删除了该锁定文件并强制执行以前的安装操作,则可能以负面的方式严重影响您的系统。
Marco Ceppi

5
这就是为什么我已在Note.If上述所有失败的唯一办法是,只要去除lock.It不会引起任何问题,因为的dpkg和apt-get /性向进程没有运行
karthick87

pgrep -f 'apt|adept|dpkg'短很多。
dhchdhd

谢谢!这可行。pgrep -f'apt | adept | dpkg'然后是sudo skill(number),杀死所有数字然后安装作品!
创作者

@Barry与整个path + process匹配。我认为这pgrep -a 'apt|adept|dpkg'是一个更好的较短等效项。
Pablo A

46

到目前为止,在不中断可能的后台运行安装(如通过删除锁定文件而发生)的情况下使其正常运行的最佳方法是使用apt停止该服务:

错误:

# sudo apt-get upgrade
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?`

解:

sudo systemctl stop apt-daily.timer

升级系统后,我建议重新启用该系统,因为锁定该系统的错误可以通过升级来解决。

sudo systemctl start apt-daily.timer

我尚未验证升级后此错误是否已解决。验证后,我将添加一个新评论


升级系统并再次启动apt-daily.timer服务后,到目前为止,我还没有遇到这个问题。
Jairelee '17

与以上所有投票率较高的答案相比,这可能是最干净的方法。在我的情况下,它可以正常工作,谢谢!
CygnusX1

这在17.10上也完美无瑕
Elder Geek,

工作于17.10 +1
Eng.Fouad,

2
在18.04中工作正常。:)
Naveen Kumar V

33

首先,我们应该使用以下命令检查哪个进程创建了锁定文件lsof

sudo lsof /var/lib/dpkg/lock

或在其他/var/lib/apt/lists/lock有问题的情况下:

sudo lsof /var/lib/apt/lists/lock

输出将接近:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
apt-get   12127 root   4uW  REG  252,1        0    86   /var/lib/apt/lists/lock

然后,我们应该检查一下commad在做,我们可以发现它用pspgrep等等; 该命令是apt-get这样我运行:

pgrep apt-get -a

-a开关列出了完整的命令对我来说,在我的情况是:

 pgrep -a apt-get
 12127 apt-get update

我们可以看到它正在运行update子命令,我也可以运行以下命令:

ps -f 12127

产生:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root     12127 12126  0 09:39 pts/0    S+     0:00 apt-get update

在这种情况下,我将等待一分钟以释放资源,并且如果在2或3分钟后问题仍然存在,或者该命令对我而言无关紧要或对系统无害(例如apt-get update),我将发送SIGTERM至过程:

sudo kill -15 12127

它可以完成工作,如果没有,我SIGINT这次要发送(就像按CTRL+ C):

sudo kill -2 12127

如果还是不行,我们应该发送SIGHUPkill -1),最后如果没有任何效果,我就简单地终止进程:

sudo kill -9 12127

要么

sudo pkill -9 apt-get

然后,我删除繁忙的资源:

sudo rm /var/lib/apt/lists/lock

小事情是,/var/lib/dpkg/lock而不是问题/var/lib/apt/lists/lock中的文件。
Chai T. Rex

1
感谢神根说终于有人提到pgreppkill
dhchdhd

1
这应该是公认的答案。
Marwan Nabil

如果安装或升级引起此问题,dpkg --configure -a也可能需要
LUXS

这对我
有用

21

此错误可能是由于Update Manager尝试在后台自动刷新软件包列表而导致的,通常是在您登录后立即这样做,从而锁定了目录。

在这种情况下,只需等待几秒钟(如果您的上一次更新是很久以前的,则要等待几秒钟)才能完成或启动Update Manager来检查状态。


安装Ubuntu 16.04之后,我拥有此权限。原来,Ubuntu软件中心中有一个后台进程正在等待我手动安装一些更新。
jvriesem '16

全新安装16.04后,同上。在我看来,这比“几秒钟”要长得多(我有时间阅读整个问答页面!),但刷新ps几次后,我发现dpkg正在更新全部内容,我耐心地等待着一切完成。然后,我尝试运行Software Updater,直到所有内容都更新为止,然后再尝试安装新的内容。
Charlie Joynt

16

如果您并行运行“更新管理器”以进行任何更新检查或在安装过程中放置​​锁定,则会发生这种情况。如果您在未运行“更新管理器”的情况下遇到相同的错误,则必须将其从中删除/var/lib/dgkg/lock,这绝对不能手动进行

sudo fuser -cuk /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock

工作正常。摘自:https : //askubuntu.com/a/15469/68707


1
这就是我的问题!
LondonRob 2014年

1
更好的解决方案,因为融合器命令用于跟踪其他进程(如果仍然有效)
Lars Nordin

16

不要太快地删除某些东西,它可能会完全损坏您的系统;而要等到当前正在安装或卸载的程序完成其任务,然后您才能进行访问。如果您认为当前没有安装或卸载任何东西,则只需使用命令重新引导系统sudo reboot


1
这看起来像是评论而不是答案。您能否将其作为对其响应的答复的评论?
jvriesem '16

4
@jvriesem我认为这是一个非常重要的答案,因为他的意思是许多其他答案中所缺少的!
Volker Siegel

@jvriesem这通常是正确的答案。当我长时间不使用它们时,我的Linux容器经常会遇到此问题。等一下 是的,可能需要一段时间。但是让它在进入并破坏事物之前做好工作。
Earth2jason

这应该是第一件事。大多数情况下,此答案可解决问题。我可能有4-5次了,重新启动总是可以解决它。
1

10

如果您将安全更新设置为自动安装,则这种情况会经常发生。我实际上等待30秒,它解决了这个问题。只是把它扔在那里,以防其他人遇到这个问题。


1
根据发行版启动的时间长短,可能会长达半小时。但是让发行版在破坏事物之前完成工作可能是理想的。
Earth2jason


4

sudo rm -f /var/lib/apt/lists/lock再试一次。

apt-fast可能会导致无法正确解锁;当你放弃这种情况有时apt-get还是dpkg太。


4

我已经多次遇到这个问题。对我来说,它几乎总是由apt-get或某些GUI挂起,由于某种原因而挂起。我不得不杀死它,这留下了各种各样的锁。

其他答案提出了非常好的要点,即确保在执行诸如删除锁定文件之类的任何大动作之前,确保当前没有更新正在运行。但是,一旦确定不是这种情况,以下通常对我有用。我是通过阅读许多有关此类问题的答案而获得的。

虽然大多数或所有这些都在其他答案中给出,但这将修补程序简化为几个命令。

sudo fuser -vki /var/lib/dpkg/lock
sudo fuser -vki /var/cache/apt/archives/lock
sudo fuser -vki /var/cache/debconf/config.dat
sudo dpkg --configure -a

用于某种更新崩溃或终止但未通过其他某种方式完成后用于解锁软件包系统。这些命令应按显示的顺序运行。


3

我在上面的任何地方都没有看到这个答案,但是在Ubuntu 16.04上,我也遇到了这个问题。原因是我的计算机上的时间设定为将来。(这是因为我使用的是Windows + Ubuntu双启动系统,我想我弄乱了本地时间与UTC时间。)

奇怪的是,锁定文件的日期和时间是我运行程序的确切日期和时间。

然后,我按照前面的文章中的描述使用了“定影器”,并且可以正常工作,但是我收到了有关需要运行的投诉dpkg -a -reconfigure。当我这样做的时候,我得到了如下错误:

newline in field name #padding

在“ / var / lib / dpkg / updates / 0003”之类的文件中。

所有这些都是非常奇怪的,因为我从未见过。因此,我认为这些是症状,并手动更改了我的数据和时间。我知道登录时的日期/时间有问题,但忽略了它。(以前,它是通过Internet和NTP自动设置的)。

然后,解决了以上所有问题……希望对您有所帮助!最明显的症状可能是锁定文件的日期/时间是您尝试运行命令的确切日期/时间。


3

就我而言,X在apt-get仍然删除旧内核时崩溃了。我使用系统监视器来确认它仍在运行并且没有卡住。该过程完成后,一切都很好。


3

检查启动器以查看其是否Software Updater正在运行。如果是这样,则将其最大化,然后看看它在做什么。如果仍在检查,请等待其完成。完成后,它可能会告诉您该软件是最新的,请关闭该应用程序。如果显示有可用的更新,请执行更新或单击“稍后提醒我”。此应用关闭后,您可以返回使用apt-getapt

如果Software Updater没有运行,只需使用Dash调用它并等待完成,然后决定是否要更新或单击“稍后提醒我”。此应用关闭后,您可以返回使用apt-getapt


2

在我的情况下,我没有意识到自己已经切换到root用户并尝试sudo apt-get 来得到相同的消息。一旦意识到这一点,我就开始运行apt-get,并且它起作用了。愚蠢的,但是它可能仍然可以解释某些错误。


2
这不是问题的原因,因为您可以sudo以root身份运行(即使不能运行,也不会产生此错误消息)。发生的可能性更大,是您在编写下一个命令时另一个进程完成了。
wjandrea

有时它确实会产生相同的错误消息。
karel

2
sudo killall -9 apt && sudo killall -9 dpkg

使用风险自负


1

就我而言,之后:

  1. 打开Firefox。
  2. 打开终端

我打过


sudo apt update
sudp apt upgrade
然后我遇到了问题

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?
我修复了该问题,运行了运行后显示给我的命令 sudo apt update

apt list --upgradable

在我的情况下,此命令将显示程序列表,仅Firefox,我关闭了Firefox,然后可以再次运行该命令而不会出现问题。

sudo apt upgrade

0

对于有兴趣在脚本中主动阻止此错误的人来说,我发现-q标志对apt upgrade -yq我造成了此问题。在升级过程中,我猜想它偶尔会给我警告(类似于更新桌面的内容,我想继续),如果这些警告被抑制了,那么我想可能导致无法解锁它正在保护的文件它卡住了。

诚然,我在100%的时间都无法重现此错误,但是消除该-q选项对我来说完全解决了这个问题


0

像其他大多数人一样,我等待着将锁取下。30分钟后,我放弃了工作,并将其硬启动到其他发行版。从那里开始,我使用互联网进行了一些研究,这些研究使我进入了这里。

事实证明unattended-upgrades.service正在运行。我发现正在重新启动进入损坏的系统并正在运行:

sudo systemctl disable apt-daily.service
sudo systemctl disable unattended-upgrades.service
sudo systemctl disable apt-daily-upgrade.service
sudo systemctl disable apt-daily-upgrade.timer
sudo systemctl disable apt-daily.timer
sudo shutdown -r # Note it will take a couple minutes to reboot

让我可以让损坏的系统重新工作:

sudo apt update
sudo apt upgrade
sudo apt install -f

但是,它并没有解决保留的软件包和apt最初报告的不可能的情况。看来这首先是导致apt启动时锁定。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.