在Ubuntu中生成已安装的软件包列表

我想在Ubuntu中备份我手动select的软件包列表,而不列出作为依赖项安装的软件包。 例如,

dpkg --get-selections 

返回所有已安装软件包的完整列表,以及依赖关系。 我如何过滤依赖关系?

我砍了自己的解决scheme:)

 dpkg --get-selections | cut -f 1 > /tmp/all apt-mark showauto > /tmp/auto diff /tmp/all /tmp/auto | grep '<' | sed 's/.* //' 

这将首先生成一个完整的列表“所有”已安装的软件包,然后自动安装的列表“自动”,最后创build一个不同的所有和自动,这是我需要的列表。

有更好的build议吗?

你可以过滤掉lib包并手动过滤剩下的包。 我不认为有一个标准的方法来做到这一点。

 dpkg --get-selections |wc -l 1831 dpkg --get-selections |grep -v ^lib | wc -l 1060 

#假设您的dpkg日志返回到最初的机器安装

###(可能/可能不适用于远程升级)

apt-mark showauto >/tmp/auto.pkgs

创build一个完整的dpkg时间表日志

 cp /dev/null /tmp/dpkg.full for LOG in $(ls -rt /var/log/dpkg.log.[0-9].gz /var/log/dpkg.log.1[0-9].gz) do test -e $LOG && gunzip -c $LOG>> /tmp/dpkg.full done for LOG in $(ls -rt /var/log/dpkg.log /var/log/dpkg.log.[0-9] /var/log/dpkg.log.1[0-9]) do test -e $LOG && cat $LOG >>/tmp/dpkg.full done 

现在Filer出最初由OS安装的软件包

 awk -v initialinstall=1 ' / install grub-pc / {initialinstall = 0; next;} / install / {if ( initialinstall == 0) print $4;} ' /tmp/dpkg.full | grep -vf /tmp/auto.pkgs >~/iInstalled.pkgs 

如果你想要一个没有被标记为自动安装的软件包列表(它不总是与不依赖的一样),你可以用aptitude这样简单的方法来做到这一点:

 aptitude search ~i | grep "^i " | awk '{ print $2 }' 

如果你真的关心清除所有的依赖关系,你可以看看~R~Dsearch模式。 我认为aptitude是目前推荐的dpkg和apt的前端。 除了ncurses接口,你会发现它有很多非常有用的命令行选项。