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

La *_*tra 1124 package-management apt dpkg

尝试使用时出现此错误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?  
Run Code Online (Sandbox Code Playgroud)

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

zur*_*rdo 932

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

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

sudo rm /var/lib/apt/lists/lock
Run Code Online (Sandbox Code Playgroud)

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

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
Run Code Online (Sandbox Code Playgroud)

之后,再次尝试打开 Synaptic。

  • @jaime:可能 apt-get(或它的某些 GUI 前端)在执行时停止,使 apt 处于锁定状态。 (44认同)
  • rm /var/lib/dpkg/lock; dpkg --configure -a: (25认同)
  • 好吧……但是为什么会这样呢? (16认同)
  • @AnwarShah 不,在删除系统文件之前还有其他注意事项。 (9认同)
  • 啊,请不,永远不要建议删除锁定文件!这肯定会损坏你的包管理器数据库。:/ 该文件的存在并不表明进程正在锁定它们。不久前,我在 dpkg 常见问题解答中添加了一个条目,解释了这一点,因为互联网似乎充满了不正确的建议:https://wiki.debian.org/Teams/Dpkg/FAQ#Q:_What_can_be_done_when_the_dpkg_lock_is_held.3F。此外,我们还改进了 dpkg 和 apt,以打印持有锁的进程的更详细的错误消息,并且 apt 现在默认等待锁被释放。 (3认同)

Fah*_*tha 728

我看到几乎所有的答案都建议删除锁。我不建议将其作为首要措施;也许如果没有其他选择。该锁在 apt 进程运行时放置,并在进程完成时移除。如果有一个没有明显进程运行的锁,这可能意味着进程由于某种原因卡住了。

如果你试试

ps aux | grep [a]pt
Run Code Online (Sandbox Code Playgroud)

或者

pgrep -a apt
Run Code Online (Sandbox Code Playgroud)

apt至少会捕获包含单词的进程。如果您看到一个apt-get进程或一个aptitude看起来卡住的进程,您可以尝试

sudo kill processnumber
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请尝试

sudo kill -9 processnumber
Run Code Online (Sandbox Code Playgroud)

这应该会终止进程并可能会移除锁。杀死aptoraptitude进程是无害的,除非它实际上是在软件包安装过程中。无论如何,如果进程卡住了,您可能别无选择,只能杀死它。

dpkg直接杀死一个进程,如果存在的话,不是一个好主意,因为如果dpkg是活跃的,它很可能正在操纵包数据库,而杀死它可能会使包数据库处于不一致的状态;即损坏。

杀死一个apt-getoraptitude进程通常更安全。

  • @Link 我不认为杀死 `dpkg` 是个好主意,因为通常 `dpkg` 是直接操作包数据库,这可能会导致损坏。 (21认同)
  • 如果杀死 dpkg 会损坏它的数据库,那么 dpkg 设计得很糟糕。时期。 (21认同)
  • 对我来说,这导致了一个错误`dpkg 被中断,你必须手动运行 'sudo dpkg --configure -a' 来纠正这个问题。再次运行 `sudo apt-get dist-upgrade` 时。运行命令然后解决了问题。我爱尼克斯! (11认同)
  • 注意,`killall apt-get` 和你的 `ps`/`kill` 组合做同样的事情。 (6认同)
  • 请注意,我发现我需要在杀死流氓 apt 进程后运行 `sudo dkpg --configure -a` 才能恢复正常。 (3认同)
  • 了解问题进程的最简单方法`ps -e | grep -e apt -e 熟练 | grep -v grep` 然后运行 ​​sudo kill num 例如`sudo kill 2304` (2认同)
  • 我遇到了同样的问题,就我而言,问题是 ubuntu 无人值守升级。同样的问题是谈论 [here](https://github.com/boxcutter/ubuntu/issues/73#issuecomment-231679733)。你也可以`apt remove unattended-upgrades`。 (2认同)
  • 不要`ps .. | grep ..` 因为它将匹配 grep。而是使用 `pgrep -f dpkg` 和 `pkill -f dpkg` (2认同)
  • 在我的进程列表中,我发现了一个 `usr/lib/apt/apt.systemd.dayly install`。想我只需要给它一些时间再试一次。有效。我节省了一个过程,并找到了解决我问题的和平方法。 (2认同)
  • @PabloBianchi 没有理由在这里使用 `pgrep`。此答案并未显示自动化或脚本化方法,而是涉及人工。所以`ps` 或`pgrrp -a` 彼此一样好。 (2认同)

Bru*_*ira 232

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

sudo rm /var/lib/dpkg/lock
sudo dpkg --configure -a
Run Code Online (Sandbox Code Playgroud)

在此之后它应该可以工作。

  • 为什么它现在不能自我修复? (8认同)
  • 这不是一个好建议:盲目移除锁可能会破坏 dpkg 的状态。 (7认同)
  • 这对我有用。上面的aws没有。 (3认同)

poo*_*lie 115

最有可能的方法是:

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

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

因此,如果您在几分钟内再次尝试应该可以修复它。

  • 与建议仅删除文件的六个回复相比,这是一个很好的提示;-) 我随机遇到了这个问题,很可能就是这样! (26认同)
  • 足够安全,必须稍等片刻,然后 `sudo apt-get install` 才能工作。 (2认同)

Mar*_*mo- 109

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

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

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

重要提示:只能尝试以下作为最后的手段,因为它可能会使您的系统崩溃。首先尝试按照Faheem 的回答中所述杀死apt或 的任何正在运行的实例。aptitude

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

sudo fuser -cuk /var/lib/dpkg/lock; sudo rm -f /var/lib/dpkg/lock   
Run Code Online (Sandbox Code Playgroud)

同样的命令可以用于 apt 缓存锁:

sudo fuser -cuk /var/cache/apt/archives/lock; sudo rm -f /var/cache/apt/archives/lock
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说崩溃了- (22认同)
  • 这使我的整个服务器崩溃。 (16认同)
  • 当我收到错误消息时,我正在更新我的软件。 (5认同)
  • `sudo fuser -cuk /var/cache/apt/archives/lock` 直接重启了我的电脑。`apt-get` 现在已解锁。 (5认同)
  • 中途杀死 apt 或 dpkg 不是一个好主意。 (5认同)
  • 不要使用此命令,它会使您的 PC 崩溃,如果您已经尝试过,重新启动对您没有帮助。只需关闭PC并开始。 (2认同)

kar*_*k87 53

只有一个程序可以持有锁。确保您没有运行 aptitude、synaptic 或 adept。关闭程序并再次运行它应该可以工作。您可以打开突触,或者打开另一个终端窗口运行 apt-get,或者运行更新管理器。检查它并查看是否有任何正在运行,如果有的话他们正在运行关闭它并重试。

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

ps -e | grep -e apt -e adept | grep -v grep
Run Code Online (Sandbox Code Playgroud)

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

sudo rm /var/lib/dpkg/lock    
sudo rm /var/cache/apt/archives/lock
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为删除锁定文件是一件危险的事情。如果另一个进程因正当理由被锁定——并且你删除了那个锁定文件并用你之前所做的强制安装——你可能会以消极的方式严重影响你的系统。 (9认同)
  • 这就是为什么我在 Note.If 中给出的原因。如果以上所有方法都失败了,唯一的方法是移除锁。只要 dpkg 和 apt-get/aptitude 进程没有运行,它就不会导致任何问题 (6认同)

Jai*_*lee 50

到目前为止,在不破坏可能的后台运行安装的情况下使其正常工作的最佳方法是使用 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?`
Run Code Online (Sandbox Code Playgroud)

解决方案:

sudo systemctl stop apt-daily.timer
Run Code Online (Sandbox Code Playgroud)

升级系统后,我建议重新启用它,因为锁定它的错误可以通过升级修复。

sudo systemctl start apt-daily.timer

我还没有验证这个错误在升级后得到修复。我将在验证后添加新评论

  • 在 18.04 中工作正常。:) (2认同)

Rav*_*ina 34

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

sudo lsof /var/lib/dpkg/lock
Run Code Online (Sandbox Code Playgroud)

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

sudo lsof /var/lib/apt/lists/lock
Run Code Online (Sandbox Code Playgroud)

输出将接近于:

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
Run Code Online (Sandbox Code Playgroud)

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

pgrep apt-get -a
Run Code Online (Sandbox Code Playgroud)

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

 pgrep -a apt-get
 12127 apt-get update
Run Code Online (Sandbox Code Playgroud)

我们可以看到它正在运行update子命令,我也可以运行这样的东西:

ps -f 12127
Run Code Online (Sandbox Code Playgroud)

它产生:

UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root     12127 12126  0 09:39 pts/0    S+     0:00 apt-get update
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我会等待一分钟以释放资源,如果 2 或 3 分钟后问题仍然存在,或者命令是我不关心或对系统无害的东西(像这样apt-get update),我会发送一个SIGTERM给过程:

sudo kill -15 12127
Run Code Online (Sandbox Code Playgroud)

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

sudo kill -2 12127
Run Code Online (Sandbox Code Playgroud)

如果它也不起作用,我们应该发送一个SIGHUP( kill -1),最后如果没有任何作用,我只是终止进程:

sudo kill -9 12127
Run Code Online (Sandbox Code Playgroud)

或者

sudo pkill -9 apt-get
Run Code Online (Sandbox Code Playgroud)

然后我删除繁忙的资源:

sudo rm /var/lib/apt/lists/lock
Run Code Online (Sandbox Code Playgroud)


Cav*_*vaz 22

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

在这种情况下,只需等待几秒钟(或更多,如果您的上次更新是很久以前)让它完成或启动更新管理器来检查状态。


小智 17

不要那么快删除某些东西,它可能会完全损坏您的系统;而是等到当前安装或卸载程序完成其任务,然后您将获得访问权限。如果您认为当前没有安装或卸载任何内容,那么只需使用命令重新启动系统sudo reboot

  • @jvriesem 我认为这是一个非常重要的答案,因为他提出的观点是许多其他答案所缺少的! (4认同)
  • 这看起来像是评论而不是答案。您能否将其移至其所回复的答案的评论中? (2认同)

小智 16

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

sudo fuser -cuk /var/lib/dpkg/lock
sudo rm -f /var/lib/dpkg/lock
Run Code Online (Sandbox Code Playgroud)

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


Wh3*_*33t 10

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


Pav*_*sov 6

就我而言,我不得不等待几分钟才能释放锁(看起来apt曾经持有它)。这一切都发生在系统启动后。


Joe*_*Joe 6

我已经多次遇到过这个问题。对我来说,这几乎总是由 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
Run Code Online (Sandbox Code Playgroud)

用于在某种更新崩溃或终止而未以其他方式完成后解锁软件包系统。这些命令应按所提供的顺序运行。


归档时间:

查看次数:

3477249 次

最近记录:

4 年 前