问题描述
尝试使用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?
我怎样才能解决这个问题?
最佳解决方案
这应该是最后的手段。如果您不小心使用它,则可能会导致系统损坏。在此之前请尝试other answers first。
您可以使用以下命令删除锁定文件:
sudo rm /var/lib/apt/lists/lock
您可能还需要删除缓存目录中的锁定文件
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
之后,再次尝试打开Synaptic。
次佳解决方案
我看到几乎所有的答案都建议删除锁。我不建议这样做,作为第一个措施;也许如果没有其他选择。当apt进程正在运行时,将放置该锁并在进程完成时将其移除。如果有没有明显的进程运行的锁,这可能意味着进程因某种原因卡住了。
如果你试试
ps aux | grep apt
那将会捕获至少包含单词apt
的进程。如果您看到apt-get
进程或aptitude
进程出现卡住,您可以尝试
kill processnumber
如果这不起作用
kill -9 processnumber
这应该杀死进程并可能会删除该锁。杀死apt
或aptitude
进程是无害的,除非它实际上处于软件包安装过程中。无论如何,如果这个过程陷入困境,你可能没有选择,只能杀死它。
直接杀死dpkg
进程(如果存在)不是一个好主意,因为如果dpkg
处于活动状态,则可能操纵程序包数据库,而杀死程序包可能会使程序包数据库处于不一致状态;即损坏。
杀死apt-get
或aptitude
过程通常更安全。
第三种解决方案
删除您的/var/lib/dpkg/lock
文件并强制重新配置程序包。
sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a
它应该在此之后工作。
第四种方案
如果您在执行apt命令时忘记使用sudo
,则会收到此消息。
否则,这表示其他人正在安装或删除软件,并在执行操作时锁定了apt数据库。可以做到这一点的程序是:
-
软件中心
-
更新管理器
-
apt链接安装程序(我认为这现在通过SC)
-
apt-get或aptitude命令行实用程序。
-
新立得包管理器
重要提示:只能尝试下面的最后手段,因为它可能会导致系统崩溃。首先尝试按照Faheem’s 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
第五种方案
最有可能的方法是:
-
启动Ubuntu
-
启动一个终端
-
键入
sudo apt-get install whatever
并且命令行 apt
与update-manager
自动轮询重叠。
所以如果你在几分钟内再试一次,应该解决它。
第六种方案
只有一个程序可以保持锁定。确保你没有运行智力,突触或娴熟。关闭程序并重新运行它应该可以工作。你可以打开突触,或者打开运行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
现在你可以安装任何软件包。
第七种方案
到目前为止,最好的方法是在不破坏可能的后台运行安装的情况下运行安装程序(因为它可能通过删除锁定文件来实现),因此使用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
升级系统后,我建议re-enabling它,因为它的错误锁定可以通过升级来解决。
sudo systemctl start apt-daily.timer
我没有验证升级后这个错误得到修复。验证完成后,我会添加一条新评论
第八种方案
如果您将’Update Manager’并行运行以进行任何更新检查或安装为安装进程地点Lock,则会发生这种情况。如果您在运行’Update Manager’时遇到相同的错误,则必须将其从/var/lib/dgkg/lock
中删除,这肯定不能手动执行
sudo fuser -cuk /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock
工作正常。取自:https://askubuntu.com/a/15469/68707
第九种方案
首先,我们应该检查使用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在做什么,我们可以使用ps
,pgrep
等找出它;命令是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
它应该做的工作,如果这次didn’t I’m要发送SIGINT
(这就像按下CTRL
+ C
):
sudo kill -2 12127
如果它不起作用,我们应该发送一个SIGHUP
(kill -1
),最后如果没有任何工作,我简单地杀死进程:
sudo kill -9 12127
要么
sudo pkill -9 apt-get
然后我删除繁忙的资源:
sudo rm /var/lib/apt/lists/lock
第十种方案
此错误可能是由Update Manager试图自动刷新后台中的软件包列表引起的,通常在您登录后立即刷新,从而锁定目录。
在这种情况下,只需等待几秒钟(或更多,如果上次更新很久以前),它就可以完成或启动Update Manager来检查状态。