如何获得Debian中可用(即已卸载)软件包的列表?


19

本质上,我正在寻找的Debian等效项是:

yum list available

向我展示可用的软件包(尽管当前未安装)。我希望可以从控制台运行某些内容,因为它位于远程服务器上。谢谢。

Answers:


7

grep-dctrl及其派生工具提供了一种查询apt缓存文件的好方法。(您可以使用sudo apt-get install dctrl-tools在ubuntu上安装这些工具)

如果有可用(但不一定安装)软件包,则可以使用grep-available。例如,列出所有可用的软件包:

grep-available  -s Package .

编辑:

aptitude 可以通过启动它来显示“未安装的软件包”列表。

您还可以使用以下方法获取未安装软件包的列表aptitude

aptitude -F "%p" search "?not(?installed)"

注意,使用新的多体系结构软件包,您将获得此结果中列出的其他体系结构的软件包。例如,我得到:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

我已经bash安装了软件包,但是它是amd64版本,因为我的操作系统安装了Ubuntu Precise的amd64版本。如果您不想看到这些用于其他体系结构的软件包,则可以排除包含:以下内容的行:

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

谢谢,但是这样做的问题是,我必须在我选择的存储库的整个软件包列表中进行遍历。也许可以用一种更好的方式来可视化该问题:假设X是服务器指向的Debian软件包存储库中所有软件包的通用集,而Y是我在上述服务器上安装的软件包集。我实质上要寻找的是X-Y。现在,我意识到我可以以编程方式进行此操作,但我希望可以有一个相对简单的命令在Debian系统上实现相同的结果。
freakwincy'4

刚看到您编辑的答案。这正是我想要的!谢谢。
freakwincy'4

附言:我会投票给你答案,但我还没有积累足够的声望点。
freakwincy 2012年

没问题。欢迎来到SU ;-)
phaphink '04

16

apt-cache 用于查询程序包缓存:

apt-cache pkgnames | 分类
apt-cache搜索事物
apt-cache搜索-仅名称的东西

谢谢,但是我担心那是行不通的。我将第一个命令生成的列表与先前生成的安装软件包列表进行了比较,由此得出了这些列表:code“ dpkg --get-selections | grep'[[:space:]] install $'| awk'{print $ 1}' > installed.txt”,发现重复。您提供的其他两个命令将不起作用,因为我不是在搜索特定的软件包,而是在搜索当前未安装的任何软件包。
freakwincy'4

2

使用apt-cache用于此目的:

apt-cache search package

由于apt-cache仅在系统上使用程序包缓存,因此请确保此缓存是最新的:

apt-get update

apt-file如果您知道要搜索的文件名,也可以使用该实用程序。但是必须将此添加到系统中。例如:

apt-file search somefilename

我倾向于以apt-cache下列方式之一使用:

apt-cache search package | sort | grep item

(这将向您显示在摘要或名称中实际包含项目的内容。)

apt-cache search thing | sort | less

(这个搜索的东西,然后排序,为愉快的观赏用less。)


2

我的观点是使用默认安装的命令,如果没有任何特殊原因,请避免使用额外的软件包。

在我的使用GNU bash的Debian中,这些简单的命令

apt list
apt list --all-versions

给出所有内容的列表(已安装和未安装)。然后,我可以使用“已安装” grep或“已安装” grep -v限制结果。它也可以与一个或多个程序包名称组合(接受通配符)。

开关“ -all-versions”为每种软件包版本(稳定,测试,不稳定,实验)在输出中提供单独的行。

简单的“ apt list”仅给出一个(最高优先级)版本。


0

严格回答您的问题(要显示未安装的软件包的列表),请尝试使用

(根据下面的评论编辑)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

不过,我不确定确切的语法,因为我正在Windows框上编写此代码,无法进行检查。也许尝试更改您的grep


这列出了已安装的软件包,未卸载
phaphink

@Raphink:对不起,我编辑的职位,以解决这个问题
PPC

没问题,但是您仍未列出未安装的软件包。通过排除“II”套餐(这实际上是不是真的你的表情做什么,你应该使用'^ii',而不是'[ii]'),你错过了上已安装但未配置,例如(如包iFiH为例)。
phaphink'4

@PPC:las,这不起作用,因为dpkg -l仅列出已安装的软件包,即所有软件包都以“ ii”开头,因此使用--invert-match或-v标志将结果传递给grep只会产生一个系列破折号,即列表标题分隔符。不管怎么说,还是要谢谢你。
freakwincy'4

// @ freakwincy:对!很抱歉在发送之前未测试(在Windows上工作)。根据联机帮助页,您应该使用“ dpkg -l'*'”列出所有软件包。
PPC'4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.