apt如何列出所有已经安装的软件包

・7 分钟阅读

问题:

我想将所有已安装软件包的列表输出到一个文本文件中,这样我可以查看它,并且在另一个系统上进行批量安装,我该怎么做?

回答 1:

Ubuntu 14.04和更高版本的apt工具使得这非常容易。


apt list --installed



旧版本

要获取在本地安装的软件包列表,请在你的终端中执行这个操作:


dpkg --get-selections | grep -v deinstall



(-v标记"反转"grep返回不匹配行)

要获取安装的特定软件包的列表:


dpkg --get-selections | grep postgres



要将列表保存到你的桌面上名为 packages的文本文件里,请在你的终端中执行这个操作 :


dpkg --get-selections | grep -v deinstall > ~/Desktop/packages



或者,只需使用

 
dpkg -l



 

(你不需要作为超级用户运行命令,所以不需要sudo),

回答 2:

要获得明确安装的(不只是安装为依赖项)包,你可以运行,


aptitude search '~i!~M'



然而另一个方法是复制文件/var/lib/apt/extended_states,它是这种格式的文本文件数据库:


Package: grub-common


Architecture: amd64


Auto-Installed: 0



Package: linux-headers-2.6.35-22-generic


Architecture: amd64


Auto-Installed: 1



Auto-Installed: 0指示软件包已明确安装,并且不只是一个依赖项。

回答 3:

创建当前安装的软件包的备份:


dpkg --get-selections > list.txt



然后(在另一个系统上)从该列表还原安装:


dpkg --clear-selections


sudo dpkg --set-selections < list.txt



要删除过时的软件包:


sudo apt-get autoremove



要在备份时安装(例如,要安装由 dpkg --set-selections 设置的软件包):


sudo apt-get dselect-upgrade



回答 4:

要按apt命令列出有意安装的所有软件包,请运行以下命令:


(zcat $(ls -tr /var/log/apt/history.log*.gz); cat /var/log/apt/history.log) 2>/dev/null |


 egrep '^(Start-Date:|Commandline:)' |


 grep -v aptdaemon |


 egrep '^Commandline:'



这提供了基于时间的反向视图,其中列出了较早的命令:


Commandline: apt-get install k3b


Commandline: apt-get install jhead


...



安装数据也显示了synaptic使用情况,但是没有详细信息(安装日期相同):


(zcat $(ls -tr /var/log/apt/history.log*.gz); cat /var/log/apt/history.log) 2>/dev/null |


 egrep '^(Start-Date:|Commandline:)' |


 grep -v aptdaemon |


 egrep -B1 '^Commandline:'



提供以下内容:


Start-Date: 2012-09-23 14:02:14


Commandline: apt-get install gparted


Start-Date: 2012-09-23 15:02:51


Commandline: apt-get install sysstat


...



回答 5:


apt-mark showmanual



要将结果输出到文本文件中,请执行以下操作:


apt-mark showmanual >list-installed.txt



回答 6:

dpkg-query (代替dpkg --get-selections,它列出了一些未安装的包)如下:


dpkg-query -W -f='${PackageSpec} ${Status}n' | grep installed | sort -u | cut -f1 -d > installed-pkgs



或者:


dpkg -l | grep ^ii | sed 's_ _t_g' | cut -f 2 > installed-pkgs



回答 7:

列出所有已安装的软件包,


dpkg -l |awk '/^[hi]i/{print $2}' > 1.txt



或者


aptitude search -F '%p' '~i' > 1.txt



或者


dpkg --get-selections > 1.txt



备注: 你将在主文件夹中得到结果1.txt文件,或者你可以指定自己的路径。

回答 8:

你可以使用Synaptic保存已安装软件包的当前状态,在Synaptic中,选择"file/save markings",输入要保存状态的文件名,并选中 "Save full state ,not only changes"。

保存的文件可以加载到一台新机器中,使用Synaptic"file/read markings"进行加载。

回答 9:

我建议使用blueprint ,即使它是为服务器设计的,在桌面也可以使用,它将创建一个script/chef/puppet,你可以使用它来安装所有软件包。

回答 10:

你需要一个"ubuntu account."(在重新安装之前创建它,以便你的系统同步。),

转到软件中心,在文件菜单下查找"在计算机之间同步..."选项。

点击它,你会看到你注册的电脑和你电脑上所有应用的列表。

安装新计算机时,计算机将被视为新计算机。

点击它,你会得到所有应用的列表。

讨论
Tianye profile image