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

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

Ubuntu14.04及以上

apt Ubuntu14.04及以上版本的工具使这非常容易。

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 或这里所需的任何其他变体)

要获取明确安装的软件包(而不仅仅是作为依赖项安装),您可以运行

aptitude search '~i!~M'

这也将包括一个简短的描述,你可能想要。 如果没有,还要添加选项 -F '%p',如karthick87所述。


另一种选择似乎是复制文件 /var/lib/apt/extended_states,这是这种格式的文本文件数据库:

Package: grub-commonArchitecture: amd64Auto-Installed: 0Package: linux-headers-2.6.35-22-genericArchitecture: amd64Auto-Installed: 1

Auto-Installed: 0 表示该包已明确安装,而不仅仅是依赖项。

列出所有软件包 有意安装 (不是依赖项)通过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 k3bCommandline: apt-get install jhead...

安装数据也显示突触的使用情况,但没有细节(与安装日期相同) :

(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:14Commandline: apt-get install gpartedStart-Date: 2012-09-23  15:02:51Commandline: apt-get install sysstat...

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

dpkg --get-selections > list.txt

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

dpkg --clear-selectionssudo dpkg --set-selections < list.txt

摆脱陈旧的包装:

sudo apt-get autoremove

像在备份时一样安装(即安装由 dpkg --set-selections):

sudo apt-get dselect-upgrade
apt-mark showmanual

曼页状态:

将打印手动安装的软件包列表

因此,它应该只给出一个明确安装的软件包列表(尽管这包括默认初始安装的软件包),而不包括由于这些软件包被安装而包含的所有依赖项。

将结果输出到文本文件中:

apt-mark showmanual > list-manually-installed.txt

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

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

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

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

dpkg --get-selections > 1.txt

注意事项:
你会得到结果1。您的主文件夹中的txt文件,或者您可以指定自己的路径。

您可以使用Synaptic保存已安装软件包的当前状态。 在Synaptic中,选择"文件/保存状态",输入要将状态保存到的文件的名称,并确保选中"保存完整状态,而不仅仅是更改"框。

从中保存的文件可以使用Synaptic中的"文件/读取标记"加载到新机器中。

我建议使用 蓝图. 即使它是为服务器设计的,它也可以从桌面上使用。 它将创建一个shell脚本/chef/puppet,您可以使用它来重新安装所有软件包。

你想在12.04上重新安装软件包,对吧?

如果是这样,这很容易。 你需要一个"Ubuntu单点登录帐户。"(在重新安装之前创建它,以便您的系统同步。)

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

  2. 当你点击它,你会看到你的电脑注册和您的计算机上的所有应用程序的列表。

  3. 当您将安装fresh时,该计算机将被视为新计算机。

  4. 你只需要登录到你的Ubuntu帐户,你以前的电脑就会显示出来。

  5. 点击它;你会得到所有应用程序的列表。 在要安装的应用程序上选择"安装"。

Related.

Similar question at unix.stackexchange.com “List packages by installation date”