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

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

Ubuntu 14.04及以上版本

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或任何其他变体)

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

 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 

手册状态:

将打印手动安装的包列表

因此,它应该只提供显​​式安装的软件包列表(尽管这包括作为默认初始安装的一部分的软件包),但由于安装了这些软件包,因此不包含所有依赖项。

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

 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中的“文件/读取标记”将从此保存的文件加载到新计算机中。

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

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

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

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

  2. 当您单击它时,您将看到您的计算机已注册,并且您的计算机上列出了所有应用程序。

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

  4. 您只需登录到您的Ubuntu帐户,即可显示以前的计算机。

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

还有一个名为Aptik (命令行和GUI)的工具可以帮助您查看所有已安装软件包的列表,可以选择/取消选择其中一些软件包,制作备份列表,然后恢复同一组软件包。另一个系统。

安装:

 sudo add-apt-repository -y ppa:teejee2008/ppa sudo apt-get update sudo apt-get install aptik 

更多信息: http : //www.teejeetech.in/2014/04/aptik-v14.html

在此处输入图像描述

从屏幕截图中可以看出, Aptik 允许您备份和恢复PPA ,这对于安装一些安装的软件包肯定是必需的。

APT-Clone 。 此程序包可用于在基于apt的系统上克隆/恢复程序包。

  • 它将保存/恢复包,sources.list,密钥环和自动安装状态。
  • 它还可以使用dpkg-repack保存/恢复不再可下载的软件包。

来源: man apt-clone

ubiquity (Ubuntu安装程序)使用APT-Clone进行升级过程。 它比dpkg --get-selections解决方案要好得多,因为:

  1. 它保留了所有存储库信息。
  2. 它会跟踪自动安装的软件包。
  3. 它允许重新打包本地安装的DEB文件。

如何使用

  1. 安装

     sudo apt-get install apt-clone 
  2. 做备份

     sudo apt-clone clone path-to/apt-clone-state-ubuntu-$(lsb_release -sr)-$(date +%F).tar.gz 
  3. 恢复备份

     sudo apt-clone restore path-to/apt-clone-state-ubuntu.tar.gz 

    恢复到较新版本:

     sudo apt-clone restore-new-distro path-to/apt-clone-state-ubuntu.tar.gz $(lsb_release -sc) 

它制作简单的gzip压缩文件,可以在其他机器上恢复之前轻松编辑和查看。 这是一个结构的例子:

 / ├── etc │  └── apt │  ├── preferences.d │  ├── sources.list │  ├── sources.list.d │  │  ├── anton_-ubuntu-dnscrypt-vivid.list │  │  ├── maarten-baert-ubuntu-simplescreenrecorder-vivid.list │  │  └── megasync.list │  ├── trusted.gpg │  └── trusted.gpg.d │  ├── anton__ubuntu_dnscrypt.gpg │  ├── anton__ubuntu_dnscrypt.gpg~ │  ├── maarten-baert_ubuntu_simplescreenrecorder.gpg │  └── maarten-baert_ubuntu_simplescreenrecorder.gpg~ └── var └── lib └── apt-clone ├── extended_states ├── installed.pkgs └── uname 

Unix StackExchange有一个很好的解释,它描述了如何使用aptitude列出未作为依赖项安装的软件包,以及如何将该列表与Ubuntu版本的默认软件包列表进行比较。

要获取12.04及更高版本的桌面版本的清单文件,请访问此站点 ,选择您的版本,然后向下滚动CD图像下方的文件部分。 你会发现类似你的架构的“ubuntu-12.04.4-desktop-amd64 + mac.manifest”。

对于服务器版本,您需要从用于安装原始系统的ISO获取清单文件。 对于VPS或云服务器,您的提供商可能会提供图像,或者您可能需要与他们联系。

下面是使用引用post中的代码以及在新服务器上安装的修改的示例。

旧服务器(来自其他post的代码,输出保存到文件):

 aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currently-installed.list wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \ | cut -f1 | sort -u > default-installed.list comm -23 currently-installed.list default-installed.list > user-installed.list 

在新服务器上,使用scp复制文件,然后使用sed将’install’附加到每一行(-i执行内联替换)。 然后,您可以使用列表作为’dpkg –set-selections’的输入,并使用apt-get安装包:

 scp user@oldserver:user-installed.list . sed -i 's/$/\tinstall/' user-installed.list sudo dpkg --set-selections < user-installed.list sudo apt-get dselect-upgrade 

在开始此任务之前,我建议您阅读并理解开头提到的post的所有部分,然后查阅aptitude参考指南以获取有关搜索模式的详细信息。

你可以查看/var/log/apt/下的apt日志和/var/log/下的dpkg日志

并且您只需使用命令即可获取已安装软件包的列表:

 dpkg -l | grep '^ii ' 

有关完整的纲要,请参阅:

https://help.ubuntu.com/community/SwitchingToUbuntu/FromLinux/RedHatEnterpriseLinuxAndFedora#Command_Line_Tools

在页面的一半:

dpkg –list

我很惊讶为此目的设计的apt-cache命令还没有在上面提到过……

 apt-cache pkgnames 

有关更多信息,请运行apt-cache --help

 ** apt-cache是​​一个用于查询信息的低级工具
来自APT的二进制缓存文件

命令:
    gencaches  - 构建包和源缓存
    showpkg  - 显示单个包的一些常规信息
    showsrc  - 显示源记录
   统计 - 显示一些基本统计数据
    dump  - 以简洁的forms显示整个文件
    dumpavail  - 将可用文件打印到stdout
    unmet  - 显示未满足的依赖项
   搜索 - 在包列表中搜索正则表达式模式
    show  - 显示包的可读记录
    depends  - 显示包的原始依赖关系信息
    rdepends  - 显示包的反向依赖性信息
    pkgnames  - 列出系统中所有包的名称
    dotty  - 为GraphViz生成包图
    xvcg  - 为xvcg生成包图
    policy  - 显示策略设置

选项:
   -h这个帮助文本。
   -p =? 包缓存。
   -s =? 源缓存。
   -q禁用进度指示器。
   -i仅显示未满足命令的重要deps。
   -c =? 阅读此配置文件
   -o =? 设置任意配置选项,例如-o dir :: cache = / tmp
有关更多信息,请参阅apt-cache(8)和apt.conf(5)手册页。
 **

以下命令还将列出所有已安装的软件包,

 grep ' installed ' /var/log/dpkg.log /var/log/dpkg.log.1 | awk '{print $5}' | sort -u 

要将已安装的软件包列表保存到名为installed_packages.txt的文件中,只需运行:

 dpkg-query --list >> installed_packages.txt 

帮助这个社区维基 – 添加最新的解决方案。


dpkg,xargs和apt-get

此命令应完成包含已安装包的文本文件的创建:

 dpkg -l | awk '{print $2}' > package_list.txt 

要完成列出的软件包的批量安装,您需要编辑’package_list.txt’。 使用文本编辑器删除文件顶部的奇怪行。 然后,您可以使用此命令从创建的文件中使用以下命令安装软件包:

 xargs < package_list.txt apt-get install -y 

apt-cache,xargs和apt-get

如果您希望使用列表( 包括自动安装等)安装所有当前包,请仅使用此方法。

将'apt-cache pkgnames'的响应输出到一个文件,我们只需命名为“package_list.txt”。 你可以用:

 apt-cache pkgnames > package_list.txt 

然后,当您想要从“package_list.txt”安装软件包时,您将使用以下命令:

 xargs < package_list.txt apt-get install -y 

apt-mark,xargs和apt-get

我们可以使用命令'apt-mark showmanual'来提供手动或最初使用Ubuntu安装的软件包列表。 我们要将其输出到我们只称为“package-list.txt”的文件中。 使用此命令可以完成此任务:

 apt-mark showmanual > package-list.txt 

我们用来从文件“package_list.txt”安装软件包的命令如下所示。

 xargs < package_list.txt apt-get install -y 

Aptik迁移实用程序

在升级/重新安装基于Ubuntu的发行版之后,用于简化软件包重新安装的实用程序。
[ Launchpad | Aptik ]

有关Aptik的信息,请尝试访问其官方页面 ,有关屏幕截图,请单击此处或查看本节末尾。

安装Aptik很简单。 跟着这些步骤:

  1. 添加 PPA:
    sudo add-apt-repository -y ppa:teejee2008/ppa

  2. 使用以下命令更新 apt。
    sudo apt-get update

  3. 使用以下命令安装 Aptik:
    sudo apt-get install aptik

Aptik Migration Utility v16.5.2


1.在Ubuntu上列出已安装的软件包

要列出计算机上已安装的软件包,可以使用以下命令:

 sudo apt list --installed 

该命令的输出将与以下命令非常相似,具体取决于当前安装的软件包:

 Listing... acl/xenial,now 2.2.52-3 amd64 [installed] adduser/xenial,xenial,now 3.113+nmu3ubuntu4 all [installed] apache2/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] apache2-bin/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed,automatic] apache2-data/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed,automatic] apache2-doc/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed] apache2-utils/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] apparmor/xenial-updates,now 2.10.95-0ubuntu2.5 amd64 [installed,automatic] apt/xenial-updates,now 1.2.19 amd64 [installed] apt-utils/xenial-updates,now 1.2.19 amd64 [installed] ... 

2.使用LESS程序

要轻松读取整个输出,您可以使用less程序。

 sudo apt list --installed | less 

3.使用GREP命令

您可以使用grep程序通过输出查找特定包。

 sudo apt list --installed | grep -i apache 

4.列出包含Apache的所有包

上面命令的输出将列出名称中包含apache所有包。

 apache2/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] apache2-bin/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed,automatic] apache2-data/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed,automatic] apache2-doc/xenial-updates,xenial-updates,xenial-security,xenial-security,now 2.4.18-2ubuntu3.1 all [installed] apache2-utils/xenial-updates,xenial-security,now 2.4.18-2ubuntu3.1 amd64 [installed] libapache2-mod-php/xenial,xenial,now 1:7.0+35ubuntu6 all [installed,automatic] libapache2-mod-php7.0/xenial-updates,now 7.0.13-0ubuntu0.16.04.1 amd64 [installed,automatic] libapache2-mod-security2/xenial,now 2.9.0-1 amd64 [installed] libapache2-modsecurity/xenial,xenial,now 2.9.0-1 all [installed] 

Apt支持模式以匹配软件包名称和选项,以列出已安装(--installed)软件包,可升级(--upgradeable)可升级(--upgradeable)软件包或所有可用(--all-versions)软件包版本。

5.使用DPKG程序

您可以用来列出Ubuntu VPS上已安装软件包的另一种方法是使用dpkg命令。

 sudo dpkg -l 

该命令的输出将为您提供包的名称,版本,体系结构和有关包的简短描述等信息。 当然,您可以再次使用grep程序来搜索特定的包。

 sudo dpkg -l | grep -i apache 

输出应如下所示:

 ii apache2 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server ii apache2-bin 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server (modules and other binary files) ii apache2-data 2.4.18-2ubuntu3.1 all Apache HTTP Server (common files) ii apache2-doc 2.4.18-2ubuntu3.1 all Apache HTTP Server (on-site documentation) ii apache2-utils 2.4.18-2ubuntu3.1 amd64 Apache HTTP Server (utility programs for web servers) rc apache2.2-common 2.2.22-6ubuntu5.1 amd64 Apache HTTP Server common files ii libapache2-mod-php 1:7.0+35ubuntu6 all server-side, HTML-embedded scripting language (Apache 2 module) (default) rc libapache2-mod-php5 5.5.9+dfsg-1ubuntu4.16 amd64 server-side, HTML-embedded scripting language (Apache 2 module) ii libapache2-mod-php7.0 7.0.13-0ubuntu0.16.04.1 amd64 server-side, HTML-embedded scripting language (Apache 2 module) ii libapache2-mod-security2 2.9.0-1 amd64 Tighten web applications security for Apache ii libapache2-modsecurity 2.9.0-1 all Dummy transitional package ii libapr1:amd64 1.5.2-3 amd64 Apache Portable Runtime Library ii libaprutil1:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library ii libaprutil1-dbd-sqlite3:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library - SQLite3 Driver ii libaprutil1-ldap:amd64 1.5.4-1build1 amd64 Apache Portable Runtime Utility Library - LDAP Driver . 

通过本教程的竞争,您已成功学习如何在Ubuntu中列出已安装的软件包。

我认为有趣的是注意到apt list --installeddpkg-query --list实际上在后面使用名为/var/lib/dpkg/status ,其中包的所有信息都是胡子。

所以如果你想处理超级扩展的软件包列表,只需要cat /var/lib/dpkg/status

注意:请勿更改/var/lib/dpkg/status文件。