Ivan Asked: 2010-12-17 18:08:49 +0800 CST2010-12-17 18:08:49 +0800 CST 2010-12-17 18:08:49 +0800 CST 如何列出所有已安装的软件包 772 我想将所有已安装软件包的列表输出到一个文本文件中,以便我可以查看它并在另一个系统上批量安装。我该怎么做? package-management apt 24 个回答 Voted Best Answer Sabacon 2010-12-17T19:02:36+08:002010-12-17T19:02:36+08:00 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这里不需要或任何其他变体) intuited 2012-08-29T13:35:16+08:002012-08-29T13:35:16+08:00 要仅获取明确安装的软件包(不仅仅是作为依赖项安装),您可以运行 aptitude search '~i!~M' 这还将包括您可能需要的简短描述。如果没有,还添加 option -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表示该软件包已明确安装,而不仅仅是依赖项。 bcl 2013-02-03T02:39:47+08:002013-02-03T02:39:47+08:00 要列出所有通过 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 ... gogaman 2012-05-17T10:26:48+08:002012-05-17T10:26:48+08:00 创建当前安装的软件包的备份: 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 Tim Tisdall 2014-07-11T05:43:47+08:002014-07-11T05:43:47+08:00 apt-mark showmanual 手册页状态: 将打印手动安装的软件包列表 因此,它应该只给出一个显式安装的软件包列表(尽管这包括作为默认初始安装的一部分的软件包),而不包括由于安装这些软件包而包含的所有依赖项。 要将结果输出到文本文件中: apt-mark showmanual > list-manually-installed.txt kyleN 2012-05-17T10:40:42+08:002012-05-17T10:40:42+08:00 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 karthick87 2010-12-17T19:35:42+08:002010-12-17T19:35:42+08:00 要列出所有已安装的软件包, dpkg -l |awk '/^[hi]i/{print $2}' > 1.txt 或者 aptitude search -F '%p' '~i' > 1.txt 或者 dpkg --get-selections > 1.txt 注意: 您将在主文件夹中获得结果 1.txt 文件,或者您可以指定自己的路径。 user.dz 2015-09-06T15:09:50+08:002015-09-06T15:09:50+08:00 APT克隆 此软件包可用于在基于 apt 的系统上克隆/恢复软件包。 它将保存/恢复包、sources.list、keyring 和自动安装状态。 它还可以使用 dpkg-repack 保存/恢复不再可下载的包。 资源:man apt-clone APT-Clone 由ubiquity(Ubuntu 安装程序)用于升级过程。它比dpkg --get-selections解决方案要好得多,因为: 它保留所有存储库信息。 它跟踪自动安装了哪些软件包。 它允许重新打包本地安装的 DEB 文件。 如何使用 安装 sudo apt-get install apt-clone 进行备份 sudo apt-clone clone path-to/apt-clone-state-ubuntu-$(lsb_release -sr)-$(date +%F).tar.gz 恢复备份 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 压缩 tar 文件,可以在其他机器上恢复之前轻松编辑和查看该文件。这里是它的结构示例: / ├── 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 Tamer 2011-04-13T04:26:16+08:002011-04-13T04:26:16+08:00 我建议使用blueprint。尽管它是为服务器设计的,但也可以在台式机上使用。它将创建一个 shell script/chef/puppet,您可以使用它来重新安装所有软件包。 Nerdfest 2010-12-17T20:46:37+08:002010-12-17T20:46:37+08:00 您可以使用 Synaptic 保存已安装软件包的当前状态。在 Synaptic 中,选择“文件/保存标记”,输入要保存状态的文件的名称,并确保选中“保存完整状态,而不仅仅是更改”框。 可以使用 Synaptic 中的“文件/读取标记”将由此保存的文件加载到新机器中。
Ubuntu 14.04 及更高版本
Ubuntu 14.04 及更高版本上的
apt
工具使这非常容易。旧版本
要获取本地安装的软件包列表,请在终端中执行以下操作:
(
-v
标签“反转” grep 以返回不匹配的行)要获取安装的特定软件包的列表:
要将该列表保存到桌面上调用的文本文件
packages
中,请在终端中执行以下操作:或者,只需使用
(您不需要以超级用户身份运行任何这些命令,因此
sudo
这里不需要或任何其他变体)要仅获取明确安装的软件包(不仅仅是作为依赖项安装),您可以运行
这还将包括您可能需要的简短描述。如果没有,还添加 option
-F '%p'
,如 karthick87 所述。另一种选择似乎是复制文件
/var/lib/apt/extended_states
,这是一个这种格式的文本文件数据库:Auto-Installed: 0
表示该软件包已明确安装,而不仅仅是依赖项。要列出所有通过 apt 命令有意安装的包(而不是依赖项),请运行以下命令:
这提供了一个基于反向时间的视图,首先列出了较旧的命令:
安装数据也显示突触使用情况,但没有详细信息(与安装日期相同):
提供以下内容:
创建当前安装的软件包的备份:
然后(在另一个系统上)从该列表中恢复安装:
要摆脱陈旧的包:
要像在备份时一样安装(即安装由 设置的软件包
dpkg --set-selections
):手册页状态:
因此,它应该只给出一个显式安装的软件包列表(尽管这包括作为默认初始安装的一部分的软件包),而不包括由于安装这些软件包而包含的所有依赖项。
要将结果输出到文本文件中:
dpkg-query
(而不是dpkg --get-selections
,其中列出了一些未安装的软件包)如下:或者:
要列出所有已安装的软件包,
或者
或者
注意:
您将在主文件夹中获得结果 1.txt 文件,或者您可以指定自己的路径。
APT克隆
APT-Clone 由
ubiquity
(Ubuntu 安装程序)用于升级过程。它比dpkg --get-selections
解决方案要好得多,因为:如何使用
安装
进行备份
恢复备份
恢复到较新的版本:
结果结构
它制作了一个简单的 gzip 压缩 tar 文件,可以在其他机器上恢复之前轻松编辑和查看该文件。这里是它的结构示例:
我建议使用blueprint。尽管它是为服务器设计的,但也可以在台式机上使用。它将创建一个 shell script/chef/puppet,您可以使用它来重新安装所有软件包。
您可以使用 Synaptic 保存已安装软件包的当前状态。在 Synaptic 中,选择“文件/保存标记”,输入要保存状态的文件的名称,并确保选中“保存完整状态,而不仅仅是更改”框。
可以使用 Synaptic 中的“文件/读取标记”将由此保存的文件加载到新机器中。