我怎样才能获取特定版本Ubuntu的所有可用软件包列表(不一定是我已安装的版本)?

我可以使用以下命令获取所有可用软件包及其详细信息的列表:
apt-cache search .

这将输出一个类似于以下内容的包列表:
i   0ad                - Real-time strategy game of ancient warfare
i   0ad-data           - Real-time strategy game of ancient warfare (data files)                            
i   0ad-data-common    - Real-time strategy game of ancient warfare (common data files)                        
p   0ad-dbg            - Real-time strategy game of ancient warfare (debug)                                    
p   0xffff             - Open Free Fiasco Firmware Flasher                                                     
p   2ping              - Ping utility to determine directional packet loss                                     
p   2vcard             - perl script to convert an addressbook to VCARD file format                            
p   3270-common        - Common files for IBM 3270 emulators and pr3287                                        
p   389-admin          - 389 Directory Administration Server 
...

如何获取我未安装的Ubuntu版本的软件包列表?
具体来说,我应该在哪里下载特定版本Ubuntu的所有可用软件包的数据库,并如何以纯文本或易于脚本解析的格式获取其详细信息(可能包括版本、大小、长描述等)?

对我来说,apt-cache search . 或者 apt-cache search '' 的输出有23xx行,实际上是所有可能的软件包的总数,包括不同的桌面环境版本。 - Videonauth
2如果这个没有悬赏,我会建议将其视为 http://askubuntu.com/q/722439/158442 的重复问题。 - muru
3个回答

1. 在线

我更喜欢使用http://packages.ubuntu.com/,就像muru的回答中提到的那样。

2. 离线,手动

如果你正在寻找离线解决方案,那么你应该成为APT先生,并从http://archive.ubuntu.com/ubuntu/dists/开始下载它们。

p=$(pwd); for c in main universe multiverse restricted; do for u in "" -security -updates; do for a in binary-amd64 binary-i386; do mkdir trusty${u}_${c}_$a; cd trusty${u}_${c}_$a; wget http://archive.ubuntu.com/ubuntu/dists/trusty$u/$c/$a/Packages.bz2; cd $p; done; done; done;

结果:

$ tree
.
├── trusty_main_binary-amd64
│   └── Packages.bz2
├── trusty_main_binary-i386
│   └── Packages.bz2
├── trusty_multiverse_binary-amd64
│   └── Packages.bz2
├── trusty_multiverse_binary-i386
│   └── Packages.bz2
├── trusty_restricted_binary-amd64
│   └── Packages.bz2
├── trusty_restricted_binary-i386
...

3. 离线使用 apt-cache/overlay-filesystem/chroot

高级设置:离线操作

实际上,我将使用一个自定义的 sources.list*,并在16.04上安装相同的 apt-cache,但是 apt 不会覆盖 /var/lib/apt/lists/ 中的16.04真实列表文件,更改将保存到 overlay 文件系统中。

设置:

sudo apt-get install chroot
mkdir sandbox0
cd sandbox0
mkdir upper work merged
sudo mount -t overlay overlay -o lowerdir=/,upperdir=./upper,workdir=./work ./merged
sudo chroot merged/
echo "deb http://archive.ubuntu.com/ubuntu/ trusty universe multiverse main restricted" > /etc/apt/sources.list
rm -r /etc/apt/sources.list.d/*
apt-get update
exit

使用:(您可以准备一个脚本)

sudo mount -t overlay overlay -o lowerdir=/,upperdir=./upper,workdir=./work ./merged
sudo chroot merged/

apt-cache ...

使用chdist命令。该命令允许您像往常一样运行apt-getapt-cache,但是针对不同版本的Ubuntu(或Debian,实际上是任何其他基于Debian的发行版)。
它还提供了一个包装器grep-dctrl,可以轻松地搜索和报告元数据字段。

1谢谢,这似乎正是我所需的,并且看起来比Sneetsher回答中的方法更容易实现。 - Jonas Czech
太棒了,这就是标准答案。你赢了 :D。很高兴知道有这样的工具。 - user.dz

你已经有了列出所有可能发布的命令,但我们可以再深入一点,好吧?所以 apt-cache search . 或者 apt-cache search '' 的输出大约有2300多行,实际上是所有可能的软件包数量,包括不同的桌面环境版本。

为了更方便,你可以只获取名称:

apt-cache search '' | sort -d | awk '{print $1}'

或者,如果你想要更多的信息,并且不介意一个很长很长的列表,你可以通过apt-cache policy来查看:
apt-cache policy $(apt-cache search '' | sort -d | awk '{print $1}')

4是的,但我问的是“_一个我尚未安装的特定版本的Ubuntu_”,所以我在我的apt-cache中没有这个列表,我需要从互联网上获取它。你知道我该如何做吗? - Jonas Czech
嗯嗯,至少对于桌面版本来说是有清单文件的,让我找一个链接给你,好吗? - Videonauth
这是16.04 LTS的链接:http://releases.ubuntu.com/16.04/ubuntu-16.04-desktop-amd64.manifest,而14.04.4的链接在这里:http://releases.ubuntu.com/14.04/ubuntu-14.04.4-desktop-amd64.manifest。你可以将它们以文件形式下载。 - Videonauth
很遗憾,这不是所有“可用”软件包的完整列表(只是ISO上的软件包列表),而我需要的是完整的列表,也没有包含描述和其他数据,这也是我需要的。还有其他可能性吗? - Jonas Czech
不是我知道的,真的这是我能给你的最好猜测。清单中的列表只包含了我认为不是规范的东西。除此之外,它们还相当完整。 - Videonauth
好的,无论如何还是谢谢你,并且因为提供了有关如何获取更多详细信息的长列表的有用信息,我给你点赞。谢谢 :-) - Jonas Czech