zub*_*uba 11 software-center software-installation
软件中心以某种方式显示了相当短的已安装软件包列表。如何在文本文件中获取它?
我试过:
> 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
Run Code Online (Sandbox Code Playgroud)
我知道我已经安装了几十个软件包,而不是数千个。我需要在列表中准确地选择我选择的没有依赖关系的包来查看它。
更新
非常感谢@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
Run Code Online (Sandbox Code Playgroud)
kos*_*kos 13
这并没有完全回答这个问题:它提供了一个命令来列出所有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.*'
Run Code Online (Sandbox Code Playgroud)
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:
zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?= apt-get)(?=.* install ) \K.*'
Run Code Online (Sandbox Code Playgroud)
因此,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'
Run Code Online (Sandbox Code Playgroud)
apt-mark 显示手册
将为您提供所有没有依赖项的手动安装包的列表 - 需要注意的重要一点是它还将显示在 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)
Run Code Online (Sandbox Code Playgroud)
虽然我完全不知道上面是如何工作的;)
按日期使用cat /var/log/dpkg.log | grep "\ install\ > somefile"
安装的软件包使用dpkg使用安装的软件包ls -l /var/log/dpkg* > somefile- 这可能是您正在寻找的。
该文件包含以上信息: /var/log/dpkg.log