使用 apt-cache search

我正在学习如何使用apt。当我运行apt-cache search git来查看所有与git匹配的软件包时,我看到一堆描述与git无关的软件包。为什么会这样,我该如何解决?(Ubuntu 12.04.2 LTS)。
另外,为什么搜索功能在一个名字中带有“cache”的命令中?搜索功能与缓存有什么关系?
谢谢。
4个回答

如果你只想通过名称搜索,请使用--names-only参数。要获取更多信息,请阅读man apt-cache,它会很有用。

当你执行apt-cache search <package name>命令时,你正在对存储在本地机器上的可用软件包信息进行查询。这是来自你“订阅”的软件源的缓存。也就是说,该命令是针对你在USC(Ubuntu软件中心)或Synaptic中设置的软件源进行查询。
根据apt-cache手册页面,/etc/apt/sources.list是查询中获取信息的位置。还有一些其他类型的软件包信息的位置。请参阅man apt-cache以获取更多详细信息。
基本上,运行apt-cache search git将返回所有包含软件包名称和描述中包含单词序列“git”的可用软件包实例。
例如,这意味着任何可能在其中包含单词序列“git”的软件包,比如描述中的单词“digital”,也将作为结果返回。请注意前一句中的加粗字体。
如果你只对与Git - 源代码管理工具相关的软件包感兴趣,你需要使用正则表达式限制查询,以使搜索结果更加严格。
例如:
``` sudo apt-cache search ^git$ ```
将返回仅包含短语“git”在软件包名称中的结果。
例如:
sudo apt-cache search ^git$
git - fast, scalable, distributed revision control system

命令: sudo apt-cache search ^git 将返回以词组“git”开头的软件包结果:
例如:
sudo apt-cache search ^git
git - fast, scalable, distributed revision control system
git-core - fast, scalable, distributed revision control system (obsolete)
git-doc - fast, scalable, distributed revision control system (documentation)
git-man - fast, scalable, distributed revision control system (manual pages)
gitk - fast, scalable, distributed revision control system (revision tree visualizer)
easygit - git for mere mortals
gforge-plugin-scmgit - Git plugin for FusionForge (transitional package)
git-all - fast, scalable, distributed revision control system (all subpackages)
git-annex - manage files with git, without checking their contents into git
git-arch - fast, scalable, distributed revision control system (arch interoperability)
...

话虽如此,您需要调整软件包缓存的查询以更具体地符合您的兴趣。希望这对您有所帮助。


"apt-cache search ^git$只会返回包名中包含"git"的结果。"git-man"(从您发布的第二个输出中)也包含"git",这是我不理解的地方。请问插入符号和美元符号的意思是什么?我知道插入符号表示“以...开头”,但这与您发布的第二个输出(^git的输出)相矛盾,因为它返回了"easygit" =)。 - Alaa Ali
哦。^ 表示以 git 开头的包和描述。好的,第二个输出已经理解了。那么 ^git$ 返回什么呢?以 git 开头的包和...? - Alaa Ali
@Alaa 将字符“^”和“$”视为查询的锚点。apt-cache search ^git$将返回具体的git软件包。apt-cache search ^git将返回以短语“git”开头的软件包,但不太具体。 - Kevin Bowen
通过运行查询apt-cache search ^git?,可以获得更多的通用搜索结果。 - Kevin Bowen
为了获得更丰富的输出,你可以通过使用apt-cache search ^git | grep --color git来增强你的命令。 - georg
有趣的是,它似乎也能找到所有的组合:我正在寻找“naps”,它匹配包含“snap”(例如vlcsnapshot)、“synapse”、“userspace software suspend”等字符串。建议使用“^git$”的方式似乎非常方便,但太狭窄了,因为它会排除“git2”(我知道它不存在,只是举个例子)。 - Ivan

这是对你问题的间接回答,但仍然与之相关,因为它涉及到软件包管理。我个人使用aptitude而不是apt-get。aptitude是终端中的synaptic等效工具。
要进行搜索,
sudo aptitude search $keyword

其他命令
sudo aptitude install
sudo aptitude update
sudo aptitude upgrade

安装aptitude,
sudo apt-get install aptitude

请记住,在多架构系统上,适用性可能仍然存在问题 - 因此可以在查询/搜索中使用它,但不适合安装/卸载软件包。 - guntbert
https://help.ubuntu.com/community/MultiArch 解释了如何使用aptitude处理多架构问题。 - llt
那个页面只是提到了“aptitude why” - 就像我说的“用它来查询” - 而且那个页面也很旧(编辑于2012-02-08) - 所以我的警告仍然有效。 - guntbert
我明白了。我是一个熟练的用户,所以你能给我指出一篇文章吗?其中提到在多架构系统上存在问题吗?也许我需要切换回apt-get。 - llt
最近似乎已经修复了这个问题,你可以在这个链接中查看详细信息:https://bugs.launchpad.net/ubuntu/+source/aptitude/+bug/831768。不过我仍然保持警惕。Debian也推荐使用apt-get(wheezy文档中有相关说明)。 - guntbert
我明白了。那好吧,我会继续使用aptitude。顺便说一下,我正在使用64位的Ubuntu。 - llt

安装 apt-xapian-index,并在搜索时使用 axi-cache search 代替 apt-cache。你将会得到更好的结果