如何找到所有可用软件包的列表以及存储库中可用的最新版本号?

我想列出所有软件包( 已安装或未安装 )以及存储库中可用的最新版本号。

例如:

apt-cache policy chromium-browser的输出如下所示

 $ apt-cache policy chromium-browser chromium-browser: Installed: (none) Candidate: 34.0.1847.116-0ubuntu2 Version table: 34.0.1847.116-0ubuntu2 0 500 http://ftp.cuhk.edu.hk/pub/Linux/ubuntu/ trusty/universe amd64 Packages 

因此,存储库中提供的最新版本的34.0.1847.116-0ubuntu2 chromium-browser软件包是34.0.1847.116-0ubuntu2 。 像这样,我想列出版本号以及存储库中可用的包名称。 而我想通过命令行完成所有这些工作。

我希望输出像这样,

 chromium-browser 34.0.1847.116-0ubuntu2 xxxxxxxxxxxxxx yyyyyyyyyyy ............ ............ 

apt-cache policy '.*'显示所有包的详细版本信息。

如果你想要一个更紧凑的输出,每个包一行,你可以使用aptitude。 以下命令列出了除跨体系结构之外的所有软件包的可用版本(请参阅输出格式规范手册)(例如,64位系统上的32位软件包)(请参阅搜索模式手册):

 aptitude search -F '%54p %24V' '~rnative' 

apt-cache dump

注意:这是一个非常大的输出。 您将需要使用less的寻呼机,或将此输出重定向到文件。

以下命令将列出所有可用的软件包及其在存储库中可用的最新版本号。

 for i in $(apt-cache search all | awk -F' - ' '{print $1}'); do apt-cache policy $i | sed -n '1,3p' | sed ':a;N;s/\n//g;ba'; done | awk '{print $1,$5}' 

例:

 $ for i in $(apt-cache search all | awk -F' - ' '{print $1}'); do apt-cache policy $i | sed -n '1,3p' | sed ':a;N;s/\n//g;ba'; done | awk '{print $1,$5}' acpica-tools: 20140214-1ubuntu1 acpid: 1:2.0.21-1ubuntu2 activity-log-manager: 0.9.7-0ubuntu14 adduser: 3.113+nmu3ubuntu3 advancecomp: 1.18-1 aide: 0.16~a2.git20130520-2 aide-common: 0.16~a2.git20130520-2 alembic: 0.6.2+ds-1 alien: 8.90 alsa-base: 1.0.25+dfsg-0ubuntu4 amavisd-new: 1:2.7.1-2ubuntu3 anacron: 2.3-20ubuntu1 android-headers: 4.2.2-2-0ubuntu1 android-tools-fsutils: 4.2.2+git20130218-3ubuntu23 antlr: 2.7.7+dfsg-5 apache2: 2.4.7-1ubuntu4 apache2-bin: 2.4.7-1ubuntu4 apache2-dev: 2.4.7-1ubuntu4 apache2-mpm-event: 2.4.7-1ubuntu4 apache2-mpm-prefork: 2.4.7-1ubuntu4 apache2-mpm-worker: 2.4.7-1ubuntu4 apache2-utils: 2.4.7-1ubuntu4 apache2.2-bin: 2.4.7-1ubuntu4 apg: 2.2.3.dfsg.1-2ubuntu1 ^C 

我拿第一个包然后执行apt-cache policy ,它显示与上面显示的命令相同的版本号,

 $ apt-cache policy acpica-tools acpica-tools: Installed: (none) Candidate: 20140214-1ubuntu1 Version table: 20140214-1ubuntu1 0 500 http://ftp.cuhk.edu.hk/pub/Linux/ubuntu/ trusty/main amd64 Packages 

这似乎完成了你所要求的。

 gawk '/^Package:/{printf $2 "\t"} /^Version:/{print $2}' /var/lib/dpkg/available 

它应该比解析另一个命令的输出快一些。 如果你想搞乱格式化(对于package: version – 请注意,这不是你的问题所要求的),你可以将第一个printf更改为:

 printf $2 ": "