当前位置: 首页>>技术教程>>正文


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

, ,

问题描述

我想将所有已安装软件包的列表输出到文本文件中,以便我可以在另一个系统上查看它和bulk-install。我将如何做到这一点?

最佳解决办法

Ubuntu 14.04及以上版本

Ubuntu 14.04及以上版本的apt工具使这非常简单。

apt list --installed

旧版本

要获得本地安装的软件包列表,请在终端中执行以下操作:

dpkg --get-selections | grep -v deinstall

(-v标签”inverts” grep返回non-matching行)

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

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-common
Architecture: amd64
Auto-Installed: 0

Package: linux-headers-2.6.35-22-generic
Architecture: amd64
Auto-Installed: 1

Auto-Installed: 0表明该软件包是明确安装的,不仅仅是一个依赖项。

第三种解决办法

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

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

第四种办法

要通过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
...

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

(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
...

第五种办法

apt-mark showmanual

手册页状态:

will print a list of manually installed packages

所以,它应该只给出一个明确安装的软件包列表(尽管这包括了默认初始安装的一部分软件包),但由于安装了这些软件包而没有包含所有的依赖关系。

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

apt-mark showmanual >list-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中的“文件/读取标记”加载到新机器中。

第九种办法

我建议使用blueprint。即使它是为服务器设计的,它也可以在桌面上使用。它会创建一个shell脚本/厨师/傀儡,您可以使用re-install所有包装。

第十种办法

你想在12.04现在重新安装软件包,对吗?

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

  1. 转到软件中心并在文件菜单下查找“计算机间同步…”选项。

  2. 当你点击它时,你会看到你的计算机已经注册并且你的计算机上有所有应用程序的列表。

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

  4. 您只需登录到您的Ubuntu帐户,即可显示您之前的电脑。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/3.html,未经允许,请勿转载。