列出从特定组件安装的所有软件(非免费,提供)


12

有没有办法列出所有non-freecontrib通过Debian安装的软件apt

/etc/apt/sources.list 如下

deb http://ftp.us.debian.org/debian/ wheezy main non-free contrib
deb-src http://ftp.us.debian.org/debian/ wheezy main non-free contrib

deb http://security.debian.org/ wheezy/updates main non-free contrib
deb-src http://security.debian.org/ wheezy/updates main non-free contrib

# wheezy-updates, previously known as 'volatile'
deb http://ftp.us.debian.org/debian/ wheezy-updates main
deb-src http://ftp.us.debian.org/debian/ wheezy-updates main

几年前我添加了这个信息non-freecontrib因为我的视频卡需要一个非免费的驱动程序,现在已经被不需要非免费的驱动程序的新驱动程序所取代。我想摆脱那些非免费的东西,但恐怕多年来,我可能已经安装了其他一些我无法卸载的非免费软件。


Answers:


15
  • dpkg-query -W -f='${Section}\t${Package}\n' | grep ^non-free
  • aptitude search '~i ?section(non-free)'

Section 对于非自由路径中的所有内容,都是非自由/...。

[注意]对于gcc文档...

 This documentation is licensed under the terms of the GNU Free
 Documentation License, and contains invariant sections, so it can't be
 part of Debian main.

(我也想知道这一点,但是直到提到它时才开始打扰。)


两者均产生了不同的结果(pastebin.com/rAhYHTk8)。NVIDIA是驱动程序,因此dpkg似乎正确!已投票。我只是想知道gcc-doc在做什么。
Alex

NVIDIA的东西已经被删除了,很可能列出了它,因为它保留了.deb之类的东西。我只是想起非自由活动中未列出的一件事:的dpkg -l | grep -i nonfree结果flashplugin-nonfree。我想知道为什么没有按能力列出,而实际上是否列出了非自由的一切。
2014年

2
因为它在contrib中:: debian / pool / contrib / f / flashplugin-nonfree(Section: contrib/web
Ricky Beam

1
这两个部分的dpkg-query -W -f='${Section}\t${Package}\n' | sort | egrep ^contrib\|^non-free
单线

关于dpkg-query -W -f='${Section}\t${Package}\n'Section不显示组件。(至少,它不适合我在Ubuntu 18.04。)的一个例子组件可能是maincontribnon-free。而部分是一样的东西:admingnomeutils,或x11
mpb

6

有一个名为VRMS(虚拟Richard M. Stallman的)程序,将在简短的摘要中报告系统上的所有非自由软件。它在仓库中,您可以通过apt;-) 安装它


2
值得一提的vrms/etc/cron.monthly。安装一个月后,当我收到虚拟Stallman的邮件时,我感到非常惊讶。
2014年

2

几年前,我也曾有过类似的“敦促”,无法确定原始软件包信息在下载软件包后是否保留在系统中。我认为此信息不可用dpkg

所以我最后要做的是设置一个干净的虚拟机,设置合适的虚拟机,/etc/apt/sources.list并安装由以下命令生成的整个列表:

dpkg --get-selections | fgrep -v deinstall | cut -s -f 1

不会安装的软件包(我只是下载来节省一些时间apt-get -d)。

apt-get --root-directory=some_dir在临时更改您的之后sources.list,您也许可以使用进行类似的操作,但是我不确定这是否使用您当前的安装数据库并将软件包移动到那里。用于这种实验的VM更安全。通常,我可以将我当前的Linux作为VM进行干净的基本安装,因此只需克隆即可(而不是在VM上安装Linux需要那么长时间)。


不错的“解决方案”。我目前没有足够的磁盘空间,但是我想apt会首先显示未找到的软件包(因此是非免费的),对吗?
Alex 2014年

@Alex是的,这是正确的。这是答案中缺少的一种。但是Ricky的方法更好,除非发生这种情况不太可能,并且某个软件包实际上会随着时间从一个存储库转移到另一个存储库(并且您不是最新的,或者该软件包没有更改版本号)。
Timo 2014年

0

访问Ask Ubuntu。这是命令行:

FILTER=non-free TMP_DIR=$(mktemp -d) && {
  dpkg -l | grep ^ii | cut -f 3 -d' ' | cut -f 1 -d : | sort | uniq > ${TMP_DIR}/pkg_installed.list
  cat /var/lib/apt/lists/*_${FILTER}_*Packages | grep "^Package:"  | sort | uniq | cut -d' ' -f2 > ${TMP_DIR}/pkg_filtered.list
  comm -12 ${TMP_DIR}/pkg_installed.list ${TMP_DIR}/pkg_filtered.list
}
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.