sudo apt-get update 返回错误

sudo apt-get update 返回错误

我很确定这是重复的。我为重复道歉。我正在运行 Xubuntu 14.04。由于某种奇怪的原因,我的电脑今天运行缓慢,所以我想这可能与软件有关,所以我进行了更新,然后 sudo 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?

我试过给出的答案 apt-get install 由于 dpkg 无法正常工作,如何解决 结果如下:

$ sudo lsof /var/lib/dpkg/lock
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
aptitude 2166 root    3uW  REG  252,0        0 49021509 /var/lib/dpkg/lock

$ sudo lsof /var/lib/apt/lists/lock
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

$ sudo lsof /var/cache/apt/archives/lock
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

$ sudo dpkg --configure -a
dpkg: error: dpkg status database is locked by another process
  1. 我该如何解决?
  2. 有人可以指导我完成这些步骤吗?
  3. 为什么我需要在打开的目录上加“锁”?
  4. 我如何找到正在使用它的进程?
  5. 如果这是罪魁祸首,我该如何检查我的硬件?

我会尝试重启,看看是否能解决问题。马上回来。


好的,现在重新启动后我得到以下结果:|

$ sudo lsof /var/lib/dpkg/lock
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

$ sudo lsof /var/lib/apt/lists/lock
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.

$ sudo lsof /var/cache/apt/archives/lock
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
lsof: status error on /var/cache/apt/archives/lock: No such file or directory
lsof 4.86
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.

我也试过

sudo dpkg --configure -a

这可能有效,因为当我这样做的时候

sudo apt-get update

我没有收到任何错误。

答案1

我将稍微不按顺序地回答你的问题,因为我可以。

如果这是罪魁祸首,我该如何检查我的硬件?

您的计算机运行正常吗?如果运行正常,则问题不是由硬件引起的。

为什么我需要在打开的目录上加“锁”?

DPKG/Apt 锁定/var/lib/dpkg以确保它可以安全地安装软件,而不会对已安装软件包的数据库(位于/var/lib/dpkg/status)造成任何冲突。这是一种安全机制,可防止 APT 意外自毁。

我如何找到正在使用它的进程?

您已经拥有了!查看输出sudo lsof /var/lib/dpkg/lock::

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
aptitude 2166 root    3uW  REG  252,0        0 49021509 /var/lib/dpkg/lock

该程序aptitude(一个漂亮的包管理器)处于活动状态,并且是锁的当前所有者。

我该如何解决这个问题?有人能指导我完成这些步骤吗?

您可以做几件事。

首先,您可以通过运行 来打破锁定sudo rm /var/lib/dpkg/lock。但是,最好不要打破此锁定来强制其他apt进程运行,因为您可能会中断某些重要操作,这可能会导致您的系统处于不可用状态。只有当您 100% 确定aptdpkg没有运行时才可以这样做。您可以通过运行ps -aux | grep dpkg或 来检查这一点ps -aux | grep apt。如果其中任何一个返回的不是一行grep,则打破锁定是不安全的。

其次,您可以查看所有终端,查看aptitude正在运行的位置并进行检查。如果您找不到它所在的终端,该w命令将对您大有帮助。

第三,您可以强制终止进程,尽管这可能仍需要您打破锁定。通过运行 来执行此操作sudo kill <PID><PID>其中条目中的数字是多少lsof,在您的例子中是2166。不要运行kill -9apt,因为它会强制终止它,而常规kill将给 apt 一个机会在它死掉之前清理所有内容。您还可以通过重新启动、注销或退出正在运行的终端来终止进程。

如果您确实强行杀死apt并破坏了锁,那么最好运行dpkg --configure -a让 DPKG 修复可能损坏的东西。

答案2

  1. 我如何找到正在使用它的进程?
ps -fea | grep apt

然后,一旦您确定了该进程,您可能需要将其终止。

kill -9 nnnn

nnnn进程号在哪里?

[重新启动计算机也会终止该进程,但通常只需注销并重新登录即可,具体取决于导致该问题的进程的所有者。]

答案3

  1. 重新启动系统以确保 apt 没有运行
  2. 删除锁定文件 ( sudo rm /var/lib/dpkg/lock)

锁定文件可防止 apt 的多个实例同时运行

相关内容