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

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

我试过了:

> 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 

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

UPDATE

非常感谢@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 :解压缩/var/log/apt所有压缩apt日志,连接它们并打印到stdout ;
  • cat - /var/log/apt/history.log :追加/var/log/apt/history.log并打印到stdout ;
  • grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*' :仅选择以Commandline: apt-get开头的Commandline: apt-get包含带有前导和尾随空格的install并打印剩余部分每个选定的行到stdout ;

这将输出所有运行的apt-get install命令的列表(唯一未考虑的输出可能是提到install包的apt-get -non apt-get 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' 
  apt-mark showmanual 

将给出一个没有依赖关系的所有手动安装包的列表 – 需要注意的重要一点是,它还将显示在Ubuntu安装过程中安装的包。

要将输出写入文件:

  apt-mark showmanual> somefile 

实际上还有很多其他方法,例如使用此命令

 comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u) 

虽然我完全不知道上面是如何工作的;)

要查看按日期安装的软件包:

按日期安装的软件包使用cat /var/log/dpkg.log | grep "\ install\ > somefile" cat /var/log/dpkg.log | grep "\ install\ > somefile"
使用dpkg安装的软件包使用ls -l /var/log/dpkg* > somefile - 这个可能就是你要找的东西。

要查看使用dpkg安装的软件包:

该文件包含以上信息: /var/log/dpkg.log

这实际上比看起来更复杂,并且在Ask Ubuntu上有很多类似的问题。

我发现在/var/log/apt/history.log和该日志的旧gzip压缩版本中, apt-get install命令安装的任何东西都列在该命令所安装的位置。

所以:

 grep "apt-get install" /var/log/apt/history.log 

将显示当前apt历史记录所涵盖的时间段内的所有这些内容。 你需要对你的旧日志进行gunzip ,然后将这些日志与grep一起用来将所有信息集中在一起。 grep命令都可以重定向到文本文件中,为您提供一个很好的列表。

如果Software Center apt-get install时使用apt-get install ,这可能仅对您的情况有用。 我知道软件中心是apt的前端,但不确定它是否明确地使用了该命令。