我如何找出软件包来自哪个存储库?


146

是否有方法或命令可以判断软件包来自哪个存储库?


1
这是模棱两可的。您的意思是:哪个当前启用的存储库提供具有给定名称的软件包,或者:哪个存储库用于安装具有当前已安装名称的软件包?(两者都很有用。我正在寻找后者,而不是前者。)
Reinier Post

Answers:


111

需要的命令:

  • dpkg -s <package>-允许您找到已安装的版本。(来源
  • apt-cache showpkg <package>-将显示可用软件包的版本列表。对于每个版本,将以索引文件名的形式给出包的源。

如果要查找当前安装的软件包的源,则需要输出dpkg -s <package>。否则,您只需查看由输出的最新版本apt-cache showpkg <package>

例:

$ dpkg -s liferea
Package: liferea
Status: install ok installed
Priority: optional
Section: web
Installed-Size: 760
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: i386
Version: 1.6.2-1ubuntu6
...

$ apt-cache showpkg liferea
Package: liferea
Versions: 
1.6.2-1ubuntu6.1 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-i386_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid-updates_main_binary-i386_Packages
                  MD5: 557b0b803b7ed864e6d14df4b02e3d26

1.6.2-1ubuntu6 (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid_main_binary-i386_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid_main_binary-i386_Packages
                  MD5: 557b0b803b7ed864e6d14df4b02e3d26
...

从第一个命令中,我可以看到Liferea版本1.6.2-1ubuntu6已安装。从第二个命令中,我可以看到该版本已在中列出/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_lucid_main_binary-i386_Packages

没有太多的精力,我可以推断源行包含archive.ubuntu.comubuntulucid,和main

并且,当然,我/etc/apt/sources.list包含以下行。

deb http://archive.ubuntu.com/ubuntu lucid main universe restricted multiverse

mac,感谢您的详细回答!不幸的是,这对我最初遇到的未满足的依赖问题没有帮助:-(我正在尝试安装libqt4-opengl,它说:以下软件包具有未满足的依赖关系:libqt4-opengl:依赖:libqtcore4(= 4: 4.6.2-0ubuntu5.1)但要安装4:4.7.0〜beta1 + git20100522-0ubuntu1〜lucid1〜ppa1 + appmenu20100624取决于:libqtgui4(= 4:4.6.2-0ubuntu5.1)但4:4.7。将要安装0〜beta1 + git20100522-0ubuntu1〜lucid1〜ppa1 + appmenu20100624
dfme

从中很难看出问题所在。您应该打开一个新问题,以便提供完整的详细信息。如果这样做,请在评论中保留链接。:-)
Michael Crenshaw 2010年

4
apt-cache policy <package name>(from:superuser.com/a/236605/37279
franzlorenzon 2013年

apt-cache {showpkg,policy}是否真正显示从中安装了软件包的位置,或者只是在查询时哪里显示了安装软件包的位置?
Croad Langshan

1
后者。如果我通常使用Ubuntu trusty软件包的源代码,请暂时将其添加utopic到我的软件包中,sources.list以安装1.20ubuntu3的版本init-system-helpers,然后再次从我的仓库中删除该回购协议sources.listapt-cache showpkg init-system-helpers它将仅位于原始软件包列表中,并且apt-cache policy init-system-helpers仅说明显而易见的内容。
blubberdiblub15年

103

使用以下命令。它具有更好的输出:

apt-cache policy <Package Name>

对于Ubuntu 16.04和更高版本,有一种较短的方法:

apt policy <Package Name>

11
这是正确的答案!mac9416回答中的命令需要乏味的解释+根据它们的输出进行猜测。有关更多信息,apt-cache policy请参见superuser.com/a/236605/61370
pabouk

3
apt-cache policy很好,但有时您需要apt-cache showpkg比较软件包中的MD5总和。另请参阅debsums --changed
Givenkoa 2015年

policysources.list
–infinite-etcetera

这应该是公认的答案!@pabouk是正确的。这个答案比当前接受的答案与问题更相关。
HEXcube

就像@ pablo-bianchi在他的答案中指出的那样apt policy <package-name>,从16.04LTS开始,甚至可以使用更简单的方法。一旦14.04LTS在2018年停产,可以编辑此答案以使用较新的命令。
HEXcube

9

apt 在Ubuntu 16.04+上

在和旁边apt-cache policy,现在我们有了一个更简单,易于记忆的子命令:(不要与classic混淆):showpkgshowaptapt-*

apt policy <package> 

或提供更多信息的替代方法,apt show <package>“ APT-Sources:”开头。

说明:该软件包提供了用于搜索和管理以及查询有关软件包信息的命令行工具,作为对libapt-pkg库所有功能的低级访问。这些措施包括:apt-getapt-cacheapt-cdromapt-configapt-key

来自的基本命令 apt --help

其他也容易记住的子命令:

  • apt list –根据软件包名称列出软件包
  • apt search –搜索包装说明
  • apt show –显示包裹详情
  • apt update –更新可用软件包列表
  • apt install –安装软件包
  • apt remove –删除软件包
  • apt purge-删除软件包和配置文件

    删除软件包会删除所有打包的数据,但是如果删除是偶然的,通常会留下较小的(已修改的)用户配置文件。在这种情况下,只需发出针对意外删除的软件包的安装请求,即可恢复其功能。另一方面,即使在已经删除的软件包上,也可以通过调用purge来摆脱这些残留。请注意,这不会影响存储在主目录中的任何数据或配置。

  • apt upgrade –通过安装/升级软件包来升级系统

  • apt full-upgrade –通过删除/安装/升级软件包来升级系统
  • apt edit-sources –编辑源信息文件

apt policy xxx看起来与相同apt-cache policy xxx,也许这应该是注释。或至少提到,apt show似乎需要-a切换才能查看其他来源的“其他记录”
Xen2050

6

遗憾的是,在软件包安装期间未记录此信息。如果存储库仍在源列表中,并且存储库仍具有软件包,则可以做出合理的猜测:

grep -l PKG /var/lib/apt/lists/*

即使突触也无法判断您是否禁用了存储库并进行了更新。



1

这更准确一些:

apt-cache show <packagename> | grep "Version:"

除非您已设置apt-pinning或显式安装特定版本,否则通常将安装最新版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.