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

dfm*_*fme 219 package-management apt repository

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

SuB*_*SuB 170

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

apt-cache policy <Package Name>
Run Code Online (Sandbox Code Playgroud)

对于 Ubuntu 16.04 及更高版本,有一种更短的方法可以做到这一点:

apt policy <Package Name>
Run Code Online (Sandbox Code Playgroud)

  • 这是正确答案!mac9416 的答案中的命令需要根据其输出进行繁琐的解释 + 猜测。有关“apt-cache 策略”的更多信息,另请参见 http://superuser.com/a/236605/61370 (17认同)
  • `apt-cache policy` 很好,但有时你需要 `apt-cache showpkg` 来比较包中的 MD5 总和。另见`debsums --changed` (3认同)

Mic*_*haw 150

编辑:

查看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
...
Run Code Online (Sandbox Code Playgroud)

从第一个命令,我可以看到安装了 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
Run Code Online (Sandbox Code Playgroud)

  • `apt-cache policy &lt;package name&gt;`(来自:http://superuser.com/a/236605/37279) (6认同)
  • 如果您尝试这样做,这会告诉您软件包将从哪里安装/升级。它不会告诉您当前安装的版本来自哪里。它可能会有所不同,例如在添加/删除 PPA 后。 (2认同)

Pab*_*chi 19

apt 在 Ubuntu 16.04+ 上

除了apt-cache policy,showpkgshow,现在我们有一个更简单、易于记忆的子命令:[1] [2](不要与经典混淆):apt apt-*

apt policy <package> 
Run Code Online (Sandbox Code Playgroud)

或者有更多信息的替代方法,apt show <package>"APT-Sources:"开头的行。

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

警告apt没有稳定的 CLI 界面。在脚本中谨慎使用。

来自的基本命令 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 $2}')
    
    Run Code Online (Sandbox Code Playgroud)
  • apt upgrade – 通过安装/升级软件包来升级系统

  • apt full-upgrade – 通过删除/安装/升级包来升级系统

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


小智 8

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

grep -l PKG /var/lib/apt/lists/*
Run Code Online (Sandbox Code Playgroud)

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