dpkg/apt-cache:有用的命令


正如我在之前的几篇文章中提到的,我一直在尝试创建一个Vagrant VM,我可以使用它来进行neo4j黑客攻击,这涉及到安装apt软件包的许多麻烦。

有很多不同的方法可以解决当软件包没有按照您的预期安装时发生的问题,所以我认为最好将我使用过的软件包记录下来,这样下次就可以更容易地找到它们。

查找反向依赖项

有几次,我发现自己很纳闷某个软件包是如何在VM上结束的,因为我没有指定应该安装它,所以我想知道是谁安装的!

我想找出包的反向依赖关系。例如,要找出谁依赖于make,我们可以使用以下命令找出:

$ apt-cache rdepends make
make
Reverse Depends:
...
  build-essential
  make:i386
  libc6-dev:i386
  open-vm-dkms
  mythbuntu-desktop
  broadcom-sta-source
...

'rdepends'的好处是它可以告诉我们反向依赖关系,即使是我们还没有安装的软件包。这在这里很有帮助,因为我忘了安装'build-enssential',这让它变得很明显。

查找安装的软件包版本

我添加了一个Brightbox存储库以获得一个更新的Ruby版本,并注意到puppet试图安装的'nginx-common'版本发生了一些奇怪的事情。

它似乎是我的依赖关系试图拉入'nginx-common'的‘最新’版本,我原以为是'1.1.19-1ubuntu0.1'。

通过将'policy'标志传递到apt-cache,我可以看到Brightbox提供了一个最新版本:

$ apt-cache policy nginx-common
nginx-common:
  Installed: 1.1.19-1ubuntu0.1
  Candidate: 1:1.2.6-1~43~precise1
  Version table:
     1:1.2.6-1~43~precise1 0
        500 http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu/ precise/main amd64 Packages
 *** 1.1.19-1ubuntu0.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        100 /var/lib/dpkg/status
     1.1.19-1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages

查找包的可用版本

我们可以传递给apt-cache的另一个标志是“madison”,它向我们显示包的可用版本,但不指示安装的是哪个版本:

$ apt-cache madison nginx-common
nginx-common | 1:1.2.6-1~43~precise1 | http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu/ precise/main amd64 Packages
nginx-common | 1.1.19-1ubuntu0.1 | http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
nginx-common |   1.1.19-1 | http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
     nginx |   1.1.19-1 | http://us.archive.ubuntu.com/ubuntu/ precise/universe Sources
     nginx | 1.1.19-1ubuntu0.1 | http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe Sources
     nginx | 1:1.2.6-1~43~precise1 | http://ppa.launchpad.net/brightbox/ruby-ng/ubuntu/ precise/main Sources

查找文件属于哪个包

在某个阶段,我想检查哪个软件包正在安装nginx,我可以通过以下命令来完成:

$ dpkg -S `which nginx`
nginx-extras: /usr/sbin/nginx

我使用'rdepends'命令安装了'nginx-common',了解到它依赖于'nginx-extras':

$ apt-cache rdepends nginx-extras
nginx-extras
Reverse Depends:
  nginx-naxsi:i386
...
  nginx-common

查找包的依赖项

我想检查'ruby1.9.1'包的依赖项,看看我是否需要显式安装'libruby1.9.1',或者是否会考虑安装。

将'-s'标志传递给dpkg,让我检查一下:

$ dpkg -s ruby1.9.1
Package: ruby1.9.1
Status: install ok installed
Architecture: amd64
Version: 1:1.9.3.327-1bbox2~precise1
Replaces: irb1.9.1, rdoc1.9.1, rubygems1.9.1
Provides: irb1.9.1, rdoc1.9.1, ruby-interpreter, rubygems1.9.1
Depends: libruby1.9.1 (= 1:1.9.3.327-1bbox2~precise1), libc6 (>= 2.2.5)
Suggests: ruby1.9.1-examples, ri1.9.1, graphviz, ruby1.9.1-dev, ruby-switch
Conflicts: irb1.9.1 (<< 1.9.1.378-2~), rdoc1.9.1 (<< 1.9.1.378-2~), ri (<= 4.5), ri1.9.1 (<< 1.9.2.180-3~), ruby (<= 4.5), rubygems1.9.1
...

到目前为止,我发现这些是有用的。我想在这里其他人最喜欢的,虽然,因为我无疑错过了一些。