ubuntu如何获取没有依赖项的已安装软件包列表

软件中心以某种方式显示了相当短的已安装软件包列表。如何在文本文件中获取它?

我试过了:

> dpkg --get-selections|wc -l
3265

> aptitude search '~i!~M'|wc -l
1181

> dpkg -l | grep ^ii | sed 's_  _\t_g' | cut -f 2|wc -l
3076

> dpkg --get-selections | grep -v deinstall|wc -l
3076

> apt-mark showmanual|wc -l
1181

我知道我已经安装了几十个软件包,而不是数千个。我需要在列表中准确地选择我选择的没有依赖项的包来查看它。

更新

非常感谢@kos,我终于得到了该命令的列表:

> zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install \K.*' | tr ' ' '\n' | grep -v '\-\-reinstall'|grep -v '\-\-force-yes'|grep -v '\-y'|grep -v '\-f'|sort|uniq wc -l
103




这并没有完全回答这个问题:它提供了一个命令来列出所有apt-get install运行过的命令以及一些关于如何进一步解析列表的建议,以获得apt-get install除 Ubiquity 运行的那些之外的所有运行过的命令的列表,因为这个任务的完美解决方案似乎不存在。

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*'
  • zcat /var/log/apt/history.log.*.gz: 解压所有压缩的apt日志/var/log/apt,将它们连接起来并打印到stdout;

  • cat - /var/log/apt/history.log: 附加/var/log/apt/history.log并打印到stdout;

  • grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*': 仅选择以Commandline: apt-get包含开头install和结尾空格开头的行,并将每个选定行的其余部分打印到stdout;

这将输出apt-get install曾经运行过的所有命令的列表(唯一不需要的输出可能是一个apt-get-non-install命令提到一个install包,但该包不存在(还没有?),至少在默认存储库中);

注意:在我的安装(Ubuntu 15.04 64 位)中,列出的前四个命令是在安装过程中由 Ubiquity 运行的;要排除这些,您可以将输出通过管道传输到sed

sed '1,4d'

因此,Ubuntu 15.04 64 位的最终近似命令是:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*' | sed '1,4d'
相关文章推荐:
(0)

相关推荐