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

评论

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

#1 楼

编辑:
查看SuB的答案。看起来更简单!
原始代码:
所需命令:


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.comubuntulucidmain。 ,我的/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
2010-10-20 22:23

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

– Michael Crenshaw
2010-10-21 13:10

apt-cache策略<软件包名称>(来自:superuser.com/a/236605/37279)

–franzlorenzon
13年8月1日在14:47

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

–狼山路
15年2月21日在11:36

后者。如果我通常使用Ubuntu可信任软件包的源代码,请暂时将utopic添加到我的sources.list中,以安装1.20ubuntu3版的init-system-helpers,然后再次从我的sources.list中删除存储库,apt-cache showpkg init-system -helpers只会说谎在原始软件包列表中,而apt-cache策略init-system-helpers只会说出显而易见的内容。

–blubberdiblub
15年7月4日在1:22

#2 楼

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

apt-cache policy <Package Name>


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

apt policy <Package Name>


评论


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

– pabouk
2015年11月23日9:45



apt-cache策略很好,但是有时候您需要apt-cache showpkg来比较软件包中的MD5总和。另请参见debsums --changed

– gavenkoa
2015年12月9日在11:03



与sources.list进行比较时,此策略选项最有用

–infinite-etcetera
17年1月26日在13:06



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

– HEXcube
17年9月23日在13:07

就像@ pablo-bianchi在他的答案中指出的那样,从16.04LTS起,甚至可以使用更简单的apt策略。一旦14.04LTS在2018年停产,可以编辑此答案以使用较新的命令。

– HEXcube
17/09/23在13:12



#3 楼


Ubuntu 16.04+上的apt
除了apt-cache policyshowpkgshow,现在我们有了一个更简单,易于记忆的子命令:apt(不要与经典apt-*混淆):
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来摆脱这些残留。请注意,这不会影响存储在主目录中的任何数据或配置。

要删除残留的软件包,请执行以下操作:
sudo apt purge $(dpkg -l | grep "^rc" | awk '{print }')




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


apt full-upgrade –通过移除/安装/升级软件包来升级系统


apt edit-sources –编辑源信息文件



评论


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

– Xen2050
17年12月23日23:00

你那里有个性感的头像

–伊万·伊夫科维奇(IvanIvković)
20年1月22日在14:49

#4 楼

遗憾的是,在软件包安装期间未记录此信息。如果存储库仍在源列表中,并且该存储库仍具有以下软件包,则可以做出合理的猜测:即使突触也无法告知您是否禁用了该存储库,并且更新。

#5 楼

sudo grep *packagename* /var/lib/apt/lists/* | grep "Filename:"




#6 楼

这样会更准确一些:

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


通常将安装最新版本,除非您设置了apt-pinning或明确安装了特定版本。