如何列出所有已安装的软件包
我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看它并在另一个系统上批量安装。 我该怎么办?
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单点登录帐户”。 (在重新安装之前创建它,以便同步系统。)
-
转到软件中心,然后在“文件”菜单下查找“计算机间同步…”选项。
-
当您单击它时,您将看到您的计算机已注册,并且您的计算机上列出了所有应用程序。
-
当您安装新的时,该计算机将被视为新计算机。
-
您只需登录到您的Ubuntu帐户,即可显示以前的计算机。
-
点击它; 你会得到所有应用程序的列表。 在要安装的应用程序上选择“安装”。
还有一个名为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
解决方案要好得多,因为:
- 它保留了所有存储库信息。
- 它会跟踪自动安装的软件包。
- 它允许重新打包本地安装的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压缩文件,可以在其他机器上恢复之前轻松编辑和查看。 这是一个结构的例子:
/ ├── 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 '
有关完整的纲要,请参阅:
在页面的一半:
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很简单。 跟着这些步骤:
-
添加 PPA:
sudo add-apt-repository -y ppa:teejee2008/ppa
-
使用以下命令更新 apt。
sudo apt-get update
-
使用以下命令安装 Aptik:
sudo apt-get install aptik
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 --installed
或dpkg-query --list
实际上在后面使用名为/var/lib/dpkg/status
,其中包的所有信息都是胡子。
所以如果你想处理超级扩展的软件包列表,只需要cat /var/lib/dpkg/status
。
注意:请勿更改/var/lib/dpkg/status
文件。