无法打开锁定文件 /var/lib/dpkg/lock 权限被拒绝 - 即使使用 sudo

Jim*_*ker 6 dpkg

我最近安装了新版本的 Ubuntu LTS 12.04。我一直在使用 LTS 10.4 并保存了我的 package.list 并计划使用

$> sudo dpkg --set-selections < package.list && apt-get dselect-upgrade
Run Code Online (Sandbox Code Playgroud)

在新版本中安装相同的软件包

但是,计算机无法运行并出现错误

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)  
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
Run Code Online (Sandbox Code Playgroud)

对此的简单答案是我是 root 还是 sudo 的成员?

  $> whoami

  surfer

   $> groups

surfer adm cdrom sudo dip plugdev lpadmin sambashare
Run Code Online (Sandbox Code Playgroud)

简单的答案就这么多。

根据类似的帖子 无法锁定管理目录 (/var/lib/dpkg/) 是另一个使用它的进程吗? 推荐的解决方案是

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

执行该命令后,我的屏幕变为空白,键盘无响应,我唯一的选择是按下电源按钮并重新启动......(我原以为这是一个恶意建议,但许多其他人似乎喜欢它。 )

我试过列出任何可能正在使用的程序 /var/lib/dpkg/lock

$> sudo lsof 

lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/surfer/.gvfs
      Output information may be incomplete.
Run Code Online (Sandbox Code Playgroud)

请注意,没有列出任何程序。

同样,没有运气

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

什么都没有列出。

顺便说一句,我可以从命令行运行 apt-get 。

$> sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

按预期运行并更新我的包列表...

@izx:尝试您的建议后,我无法运行

$> sudo dpkg --set-selections < package.list && apt-get dselect-upgrade
Run Code Online (Sandbox Code Playgroud)

它因相同的错误而失败。我试过这个

a)紧接着 F1 终端中的 rm 命令
b)执行 rm 命令并使用 Ctrl+Alt+F7 返回 X
c)执行 rm 命令并重新启动

仅感兴趣的选项c)产生了不同的(但类似的错误消息),它是

dpkg: error: dpkg status database is locked by another process
Run Code Online (Sandbox Code Playgroud)

虽然我无法使用/var/lib/dpkg/lockwith终止进程fuser,但我确实获得了链接到它的进程的以下输出。

$> fuser -cv /var/lib/dpkg/lock  
                     USER        PID ACCESS COMMAND  
/var/lib/dpkg/lock:  root     kernel mount (root)/var  
                     surfer     1641 ....m (surfer)gnome-settings-  
                     surfer     1656 ....m (surfer)compiz  
                     surfer     1679 ....m (surfer)nm-applet  
                     surfer     1688 ....m (surfer)nautilus  
                     surfer     1731 ....m (surfer)gtk-window-deco  
                     surfer     1733 ....m (surfer)unity-panel-ser  
                     surfer     1831 ....m (surfer)gnome-terminal  
                     surfer     1899 f.... (surfer)unity-applicati  
                     surfer     2029 F...m (surfer)update-notifier   
Run Code Online (Sandbox Code Playgroud)

所以我尝试从 F1 终端杀死每个进程,并删除锁定文件。没问题。结果是

$> fuser -cv /var/lib/dpkg/lock  
                     USER        PID ACCESS COMMAND  
/var/lib/dpkg/lock:  root     kernel mount (root)/var  

$> ls /var/lib/dpkg/lock  
ls: cannot access /var/lib/dpkg/lock: No such file or directory
Run Code Online (Sandbox Code Playgroud)

文件和链接似乎消失了,但是在执行 dpkg命令时,我得到了同样的错误......锁定文件又回来了。

我真的很困惑,并欢迎任何帮助。

ate*_*enz 10

你的第一步应该是

sudo dpkg --set-selections < package.list && sudo apt-get dselect-upgrade
Run Code Online (Sandbox Code Playgroud)

以下错误

E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)  
Run Code Online (Sandbox Code Playgroud)

本来从未发生,即使second time你使用相同的代码,并得到了同样的错误。

通过按上述添加sudo来尝试正确的命令,并发布您的发现。

注意&&的使用使您可以在同一行上执行多个命令,在通常意义上&&仅在第一个命令返回值报告成功时才执行第二个命令。因此,这里的sudo需要在第二个命令中指定。